文章目录
摘要
本文主要梳理Regression实现的操作过程,以预测宝可梦进化后的CP值为例,运用线性模型,逐步考虑影响预测误差的因素并且对模型进行优化,最终得到较小的误差。
1 对Regression的理解
Regression指找一个function,此function的输入为所需要的特征值,输出均为数值(scalar)
2 预测宝可梦进化后的战斗力(CP)案例
任务:找一个function,其input为某一只宝可梦的所有相关属性值,output为预测的宝可梦进化后的CP值,越准越好
相关符号:
- x c p x_{cp} xcp表示进化前的宝可梦战力(用下标来表示某一个完整个体里面的某一属性);
- x 1 x^1 x1表示一只杰尼龟(用上标来表示一个完整个体的编号);
- 用y来代表function的output;
- 用 y ^ 1 {\hat{y}}^1 y^1表示杰尼龟进化后正确的观测值
2.1 Step1: Model
即找 A set of function
本例中找一个Linear Model: y = b + w *
x
c
p
x_{cp}
xcp
其中b与w是常数,它们取不同的值,得到
f
1
f_1
f1,
f
2
f_2
f2 …
上图中使用的Linear model: y = b +
∑
w
i
x
i
\sum_{} w_ix_i
∑wixi
其中
x
i
x_i
xi为输入的各种不同属性的属性值(attribute value),叫做特征(feature)
w
i
w_i
wi: weight, b: bias
2.2 Step2: Goodness of Function
由于本例为监督学习,所以需要收集的是function的input和output(?根据“怎么告诉机器,我想找什么样的函式”来决定收集什么数据?)
如上图,我们已经设计好模型,现在需要搜集训练集数据
如上图,将十只宝可梦的属性值画入坐标系中
如上图,现在需要定义一个L(f),这个函数的作用是衡量Model里的各个函数有多好(有多不好)
注意:Loss function的输入是一个函数
本例中Loss Function的输出是输入的函数多不好,L(f) = L(w,b) =
∑
n
=
1
10
[
y
^
n
−
(
b
+
w
∗
x
c
p
n
)
]
2
\displaystyle\sum_{n=1}^{10}{[{\hat{y}}^n-(b+w*x_{cp}^n)]}^2
n=1∑10[y^n−(b+w∗xcpn)]2
可以直观反映【实际正确的观测值】与【Model预测值】的差距,故L(f)越小越好
如上图,将Loss function的形状绘图,图像上的每一个点代表一个function,找到loss最低的一个function(绘图可省略,不能从图上找best function)
2.3 Step3: Best Function and Gradient Descent
现在要利用Loss function找出Function set中最好的function,记作
f
∗
f^*
f∗或者
w
∗
,
b
∗
w^*, b^*
w∗,b∗
本例中Model使用的是Linear model,可选处理方法包括closed-form solution和gradient descent
- closed-form solution:
把特定的微分方程的解用基本函数(例如多项式、三角函数、对数指数函数等等)及特殊函数给表达出来,线性代数中同样可以这么理解。局限性:仅适合求Linear regression - gradient descent:
只要L(f)是可微分的,都可以拿来处理出Best function或者参数
现在以一个参数的L(w)为例,欲找到一个 w w w得到 w ∗ = a r g min w L ( w ) w^* = arg\min\limits_w L(w) w∗=argwminL(w),操作如下:
- 随机选取一个 w 0 w^0 w0,以后会有方法找到一个使L(w)值比较好的 w 0 w^0 w0
- 计算 w = w 0 w=w^0 w=w0时,L(w)对w的微分,即 w 0 w^0 w0点处切线斜率
- 当结果小于0时,增加w的取值;当结果大于0时,减小w的取值
- 参数更新幅度只与两个方面有关,一个是 d L d w ∣ w = w 0 \dfrac{dL}{dw}|_{w=w^0} dwdL∣w=w0的值的大小【微分值越大,更新幅度越大】;另一个是常数项 η \eta η,叫做learning rate【是一个事先定好的数值,值越大,更新幅度越大,学习效率越高】
- 于是得到 w 1 = w 0 − η d L d w ∣ w = w 0 w^1=w^0-\eta\dfrac{dL}{dw}|_{w=w^0} w1=w0−ηdwdL∣w=w0
- 重复步骤2~5
可能会找到的是local minimum,只找到局部最优解,而非全局最优解。不过linear regression不会遇到这个问题,因为它是convex function
本案例中有两个参数,易推广到两个参数
下面可视化一下刚才的两个参数的计算过程
2.4 Results
最后计算出
b
∗
,
w
∗
b^*,w^*
b∗,w∗, 对于Training Data来说,结果如下图
重要的是,对于Testing Data来说,结果如下
结果一般会比Training Data上的误差大一点
3 对Model优化
3.1 在10个数据的Training Data基础上
定义
y
=
b
+
w
1
∗
x
c
p
+
w
2
∗
(
x
c
p
)
2
y=b + w_1*x_{cp} + w_2*(x_{cp})^2
y=b+w1∗xcp+w2∗(xcp)2,引入二次方Model再引入三次项,Testing Data的error为18.1
Model再引入四次项,Testing Data的error为28.8,见下图
过于复杂的Model易导致过拟合
3.2 在60个数据的Training Data基础上
很多情况预测值不只受一个因素影响
本例中还受物种的影响,需彻底重构Model
这样Testing Data的error降到14.3
3.3 优化时增加影响因素导致过拟合的解决办法
Back to step 2: Regularization(正则化).
在定义Loss function时增加knowledge,重新定义一个function的好坏,来找到比较好的function.
本例Regularization是加上一项
λ
Σ
(
w
i
)
2
\lambda\Sigma(w_i)^2
λΣ(wi)2.
注:regularization的过程不考虑bias
L
=
∑
n
=
1
10
[
y
^
n
−
(
b
+
w
∗
x
c
p
n
)
]
2
+
λ
Σ
(
w
i
)
2
L=\displaystyle\sum_{n=1}^{10}{[{\hat{y}}^n-(b+w*x_{cp}^n)]}^2+\lambda\Sigma(w_i)^2
L=n=1∑10[y^n−(b+w∗xcpn)]2+λΣ(wi)2
需要理解,
w
i
w_i
wi越接近0,function就是一个越平滑的function,受到的干扰越小,结果越好。
λ
\lambda
λ是常数值,值越大,function越平滑。
4 总结与展望
首先理解机器学习就是自动找函式,其次研究找到的函式为数值的Regression,然后完成预测宝可梦进化后的CP值的过程,进而学习到找Model、定义Loss function与寻找Best function之中的操作,初步认知Gradient Descent的操作过程,最后认知过拟合与正则优化。
优化后对于Testing Data的误差为11.1,那么如果将其做成一个系统上传到网络,其实会得到大于11.1的误差,下一篇会引入验证集的概念、Gradient Descent算法等内容。