目录
初步感受Regression
Regression能够做哪些事情?
- 股票行情预测(输出明天买哪只)
- 自动驾驶(输出驾驶方向)
- 推荐系统(给出可能性)
Regression案例分析(宝可梦研究)
抛出问题
我们期望根据已有的宝可梦进化前后的信息,来预测某只宝可梦进化后的cp值的大小
X
X
X: 表示一只宝可梦,用下标表示该宝可梦的某种属性
X c p X_{cp} Xcp:表示该宝可梦进化前的cp值
X s X_s Xs: 表示该宝可梦是属于哪一种物种,比如妙瓜种子、皮卡丘…
X h p X_{hp} Xhp:表示该宝可梦的hp值即生命值是多少
X w X_w Xw: 代表该宝可梦的重重量
X h X_h Xh: 代表该宝可梦的高度
f ( ) f() f(): 表示我们要找的function
y y y: 表示function的output,即宝可梦进化后的cp值,是一个scalar
解决思路
- 确定Senario、Task和Model
Senario
首先根据已有的data来确定Senario,我们拥有宝可梦进化前后cp值的这样一笔数据,input是进化前的宝可梦(包括它的各种属性),output是进化后的宝可梦的cp值;因此我们的data是labeled,使用的Senario是Supervised Learning
Task 然后根据我们想要function的输出类型来确定Task,我们预期得到的是宝可梦进化后的cp值,是一个scalar,因此使用的Task是Regression
Model 关于Model,选择很多,从简单的开始这里采用的是Llinear Model
ML 的步骤
- 定义一个model即function set
- 定义一个goodness of function损失函数去评估该function的好坏
- 找一个最好的function
Step1:Model (function set)
一般来说,是根据经验来的,我们从简单的开始,先随意定义一个模型。如下图所示,我们可以设定不同的参数w和b来得到一个函数集合,也就是我们的model。
Step 2: Goodness of Function
为了选出唯一一个function,我们需要衡量一个function的好坏,称之为loss function之前提到的model是由我们自己决定的,这里的loss function也是,最常用的方法就是采用类似于方差和的形式来衡量参数的好坏,即预测值与真值差的平方和;这里真正的数值减估测数值的平方,叫做估测误差Estimation error,将10个估测误差合起来就是loss function
L
(
f
)
=
L
(
w
,
b
)
=
∑
n
=
1
10
(
y
^
n
−
(
b
+
w
⋅
x
c
p
n
)
)
2
L(f)=L(w,b)=\sum_{n=1}^{10}(\widehat{y}^n-(b+w \cdot {x}^n_{cp}))^2
L(f)=L(w,b)=n=1∑10(y
n−(b+w⋅xcpn))2
Step3:Pick the Best Function
我们已经确定了loss function,他可以衡量我们model里面每一个function的好坏,接下来我们要做的事情就是,从这个function set里面,挑选一个最好的function
挑选最好的function这一件事情,写成formulation/equation的样子如下:
f ∗ = a r g m i n f L ( f ) f^*={arg} \underset{f}{min} L(f) f∗=argfminL(f)
w ∗ , b ∗ = a r g m i n w , b L ( w , b ) = a r g m i n w , b ∑ n = 1 10 ( y ^ n − ( b + w ⋅ x c p n ) ) 2 w^*,b^*={arg}\ \underset{w,b}{min} L(w,b)={arg}\ \underset{w,b}{min} \sum\limits^{10}_{n=1}(\widehat{y}^n-(b+w \cdot x^n_{cp}))^2 w∗,b∗=arg w,bminL(w,b)=arg w,bminn=1∑10(y n−(b+w⋅xcpn))2
也就是那个使 L ( f ) = L ( w , b ) = L o s s L(f)=L(w,b)=Loss L(f)=L(w,b)=Loss最小的 f f f或 ( w , b ) (w,b) (w,b),就是我们要找的 f ∗ f^* f∗或 ( w ∗ , b ∗ ) (w^*,b^*) (w∗,b∗)(有点像极大似然估计的思想)
我们采用Gradient Descent 来挑选出最好的function。
因为对于loss function的计算,我们穷举是不太现实的,而且非常的费精力。所以我们采用的梯度下降方法来更新我们的参数来找到是loss最小的那套参数。
Gradient Descent原理讲解,待写。(也可以直接看视频进行理解)
接下来对宝可梦的案例继续进行分析。
根据gradient descent,我们得到的
y
=
b
+
w
⋅
x
c
p
y=b+w\cdot x_{cp}
y=b+w⋅xcp中最好的参数是b=-188.4, w=2.7
我们需要有一套评估系统来评价我们得到的最后这个function和实际值的误差error的大小;这里我们将training data里每一只宝可梦
i
i
i 进化后的实际cp值与预测值之差的绝对值叫做
e
i
e^i
ei,而这些误差之和Average Error on Training Data为
∑
i
=
1
10
e
i
=
31.9
\sum\limits_{i=1}^{10}e^i=31.9
i=1∑10ei=31.9
当然我们真正关心的是generalization的case,也就是用这个model去估测新抓到的pokemon,误差会有多少,这也就是所谓的testing data的误差;于是又抓了10只新的pokemon,算出来的Average Error on Testing Data为
∑
i
=
1
10
e
i
=
35.0
\sum\limits_{i=1}^{10}e^i=35.0
i=1∑10ei=35.0;可见training data里得到的误差一般是要比testing data要小,这也符合常识。
我们想做的更好,我们从头开始决定新的模型,找到最好的函数,并用训练误差和测试误差来评估我们新产生的模型结果。
李老师再此基础上进行了多次试验并进行比对。
根据训练结果我们可以看到,随着模型越来越复杂,我们的训练误差变得越来越小。但在模型变为3元函数的时候,我们观察到测试误差呈上升趋势,这不是我们想要的。
当模型愈来越复杂,训练误差远远优于我们的测试误差时,我们就产生了过拟合的现象。
因此model不是越复杂越好,而是选择一个最适合的model,在本例中,包含
(
X
c
p
)
3
(X_{cp})^3
(Xcp)3的式子是最适合的model。
关于过拟合的理解:
我们在考驾照的时候,教练就会教我们一些小技巧,比如在倒车时,看到某个点就打半圈等,那么在我们实际生活中,这种小技巧就不灵了,你的驾驶技术也就不行了。
尝试讨论不同的参数
之前我们的model只考虑了宝可梦进化前的cp值,这显然是不对的,除了cp值外,还受到物种
x
s
x_s
xs的影响。
我们再进行之前的工作,尝试得到好的模型与测试结果。
针对过拟合问题的解决方案-Regularization
课程中,老师用L2正则化解决过拟合问题,正则化的作用是降低模型的泛化误差(测试误差)
λ是由我们自己进行设置的。
选择模型时,更倾向于选择“平滑”的模型。因为当数据有噪声干扰时,越平滑的函数受到噪声的干扰越小。
正则化解决拟合问题的原理(待写)