先看一个实例,以直观理解回归:假设我抓到一只宝可梦,我想知道它进化后的
c
p
cp
cp值,以此来确定我是进化它还是把它当做食物喂其他的宝可梦(不忍~~)。如图1:
图中, x c p x_{cp} xcp是进化前的宝可梦的 c p cp cp值, x s x_s xs是它的物种, x h p x_{hp} xhp是它的 H P HP HP值, x w x_w xw是体重,这些值都称为属性(attribute),设 y y y为进化后宝可梦的 c p cp cp值,则我们预测 y y y可分以下三步进行:
- 第一步:寻找一个模型(model)
模型有无穷无尽个,在此假设选取一个线性模型 (1) y = b + w ⋅ x c p y=b+w{\cdot}x_{cp}\tag{1} y=b+w⋅xcp(1)(后面会看到更好的模型),其中, w w w, b b b为参数。则我们可令:
- f 1 : y = 10.0 + 9.0 ⋅ x c p f_1:y=10.0+9.0{\cdot}x_{cp} f1:y=10.0+9.0⋅xcp;
- f 2 : y = 9.8 + 9.2 ⋅ x c p f_2:y=9.8+9.2{\cdot}x_{cp} f2:y=9.8+9.2⋅xcp;
- f 3 : y = − 0.8 − 1.2 ⋅ x c p f_3:y=-0.8-1.2{\cdot}x_{cp} f3:y=−0.8−1.2⋅xcp;
- ⋯ ⋯ {\cdots\cdots} ⋯⋯
这些模型有好有坏,例如第三个显然是错的,因为一般来说进化过后 c p cp cp值是大于进化之前的,这时我们就要在这些模型中找一个较好函数。
- 第二步:寻找一个“上帝”的函数
假设我现在收集了十组数据
(
x
1
,
y
^
1
)
,
(
x
2
,
y
^
2
)
,
⋯
,
(
x
10
,
y
^
10
)
(x^1,\hat y^1),(x^2,\hat y^2),{\cdots},(x^{10},\hat y^{10})
(x1,y^1),(x2,y^2),⋯,(x10,y^10)(用上标表示一个对象,下标表示对象中的某一具体属性),通常,我们称这组数据为训练集(training set),如下图2:
- 最好的函数
第二步中,我们定义了损失函数,要找到最好的能够预测宝可梦的
c
p
cp
cp值的函数,只要最小化损失函数就可以了,即
(3)
f
∗
=
a
r
g
min
f
L
(
f
)
f^*=arg\min\limits_fL(f)\tag 3
f∗=argfminL(f)(3)其中,
f
∗
f^*
f∗为我们所要求的函数,带入要求的
w
∗
,
b
∗
w^*,b^*
w∗,b∗,
(
3
)
(3)
(3)式变为:
(4)
w
∗
,
b
∗
=
a
r
g
min
w
,
b
L
(
w
,
b
)
=
a
r
g
min
w
,
b
∑
n
=
1
10
(
y
^
n
−
(
b
+
w
⋅
x
c
p
n
)
)
2
w^*,b^*=arg\min\limits_{w,b}L(w,b)=arg\min\limits_{w,b}\sum\limits_{n=1}^{10}(\hat y^n-(b+w{\cdot}x_{cp}^n))^2\tag 4
w∗,b∗=argw,bminL(w,b)=argw,bminn=1∑10(y^n−(b+w⋅xcpn))2(4) 求
w
∗
,
b
∗
w^*,b^*
w∗,b∗的方法最简单粗暴的就是穷举法,但是那几乎是不可能的。此处,我们用梯度下降法(Gradient Descent)来,操作方法如下:
1.随机初始化
w
0
,
b
0
w^0,b^0
w0,b0;
2.更新参数,令
w
1
=
w
0
−
η
∂
L
∂
w
∣
w
=
w
0
w^1=w^0-{\eta}\frac{\partial L}{\partial w}|_{w=w^0}
w1=w0−η∂w∂L∣w=w0,
b
1
=
b
0
−
η
∂
L
∂
b
∣
b
=
b
0
b^1=b^0-{\eta}\frac{\partial L}{\partial b}|_{b=b^0}
b1=b0−η∂b∂L∣b=b0;
3.更新参数,令
w
2
=
w
1
−
η
∂
L
∂
w
∣
w
=
w
1
w^2=w^1-{\eta}\frac{\partial L}{\partial w}|_{w=w^1}
w2=w1−η∂w∂L∣w=w1,
b
2
=
b
1
−
η
∂
L
∂
b
∣
b
=
b
1
b^2=b^1-{\eta}\frac{\partial L}{\partial b}|_{b=b^1}
b2=b1−η∂b∂L∣b=b1;
4.
⋯
⋯
{\cdots\cdots}
⋯⋯;
5.直到找到最优解。如下图3:
上式中,
η
\eta
η称为学习率,
(5)
∂
L
∂
w
=
∑
n
=
1
10
2
(
y
^
n
−
(
b
+
w
⋅
x
c
p
n
)
)
(
−
x
c
p
n
)
\frac{\partial L}{\partial w}=\sum\limits_{n=1}^{10}2(\hat y^n-(b+w{\cdot}x_{cp}^n))(-x_{cp}^n)\tag 5
∂w∂L=n=1∑102(y^n−(b+w⋅xcpn))(−xcpn)(5)
(6)
∂
L
∂
b
=
∑
n
=
1
10
2
(
y
^
n
−
(
b
+
w
⋅
x
c
p
n
)
)
(
−
1
)
\frac{\partial L}{\partial b}=\sum\limits_{n=1}^{10}2(\hat y^n-(b+w{\cdot}x_{cp}^n))(-1)\tag6
∂b∂L=n=1∑102(y^n−(b+w⋅xcpn))(−1)(6)2。由于线性回归问题是凸规划3问题,所有不存在局部最优解(local optimal)。根据以上推到求出的结果如下:
从上图看结果在起始的两个点和结束的两个点误差较大,但我们更关心在我们给定另外的
c
p
cp
cp值的情况下,这个函数能不能预测准确,因此,找来另外十组数据(通常称之为测试集)来检验这个函数是否预测准确,结果如下:
1.
y
=
b
+
w
1
⋅
x
c
p
y=b+w_1{\cdot}x_{cp}
y=b+w1⋅xcp
2.
y
=
b
+
w
1
⋅
x
c
p
+
w
2
⋅
x
c
p
2
y=b+w_1{\cdot}x_{cp}+w_2{\cdot}x_{cp}^2
y=b+w1⋅xcp+w2⋅xcp2;
3.
y
=
b
+
w
1
⋅
x
c
p
+
w
2
⋅
x
c
p
2
+
w
3
⋅
x
c
p
3
y=b+w_1{\cdot}x_{cp}+w_2{\cdot}x_{cp}^2+w_3{\cdot}x_{cp}^3
y=b+w1⋅xcp+w2⋅xcp2+w3⋅xcp3;
4.
y
=
b
+
w
1
⋅
x
c
p
+
w
2
⋅
x
c
p
2
+
w
3
⋅
x
c
p
3
+
w
4
⋅
x
c
p
4
y=b+w_1{\cdot}x_{cp}+w_2{\cdot}x_{cp}^2+w_3{\cdot}x_{cp}^3+w_4{\cdot}x_{cp}^4
y=b+w1⋅xcp+w2⋅xcp2+w3⋅xcp3+w4⋅xcp4;
5.
y
=
b
+
w
1
⋅
x
c
p
+
w
2
⋅
x
c
p
2
+
w
3
⋅
x
c
p
3
+
w
4
⋅
x
c
p
4
+
w
5
⋅
x
c
p
5
y=b+w_1{\cdot}x_{cp}+w_2{\cdot}x_{cp}^2+w_3{\cdot}x_{cp}^3+w_4{\cdot}x_{cp}^4+w_5{\cdot}x_{cp}^5
y=b+w1⋅xcp+w2⋅xcp2+w3⋅xcp3+w4⋅xcp4+w5⋅xcp5
对比结果如下:
可以看出当选取的函数阶次越高时,训练集拟合得越好,这是由于 n n n次多项式可任意逼近非线性函数,但是在我们更关心的测试集上,阶次越高,精度不一定越好,称这种现象为过拟合(overfitting),导致函数的泛化(generation)能力差。
随着我们的宝可梦越抓越多,假设有60个,数据如下图7:
i f x s = P i d g e y : y = b 1 + w 1 ⋅ x c p if\ x_s=Pidgey:y=b_1+w_1\cdot x_{cp} if xs=Pidgey:y=b1+w1⋅xcp
i f x s = W e e d l e : y = b 2 + w 2 ⋅ x c p if\ x_s=Weedle:y=b_2+w_2\cdot x_{cp} if xs=Weedle:y=b2+w2⋅xcp
i f x s = C a t e r p i e : y = b 3 + w 3 ⋅ x c p if\ x_s=Caterpie:y=b_3+w_3\cdot x_{cp} if xs=Caterpie:y=b3+w3⋅xcp
i f x s = E e v e e : y = b 4 + w 4 ⋅ x c p if\ x_s=Eevee:y=b_4+w_4\cdot x_{cp} if xs=Eevee:y=b4+w4⋅xcp
将上面四个式子合起来写就是: y = b 1 ⋅ δ ( x s = P i d g e y ) + w 1 ⋅ δ ( x s = P i d g e y ) ⋅ x c p + b 2 ⋅ δ ( x s = W e e d l e ) + w 2 ⋅ δ ( x s = W e e d l e ) ⋅ x c p y=b_1\cdot\delta(x_s=Pidgey)+w_1\cdot\delta(x_s=Pidgey)\cdot x_{cp}+b_2\cdot\delta(x_s=Weedle)+w_2\cdot\delta(x_s=Weedle)\cdot x_{cp} y=b1⋅δ(xs=Pidgey)+w1⋅δ(xs=Pidgey)⋅xcp+b2⋅δ(xs=Weedle)+w2⋅δ(xs=Weedle)⋅xcp (8) + b 3 ⋅ δ ( x s = C a t e r p i e ) + w 3 ⋅ δ ( x s = C a t e r p i e ) ⋅ x c p + b 4 ⋅ δ ( x s = E e v e e ) + w 4 ⋅ δ ( x s = E e v e e ) ⋅ x c p +b_3\cdot\delta(x_s=Caterpie)+w_3\cdot\delta(x_s=Caterpie)\cdot x_{cp}+b_4\cdot\delta(x_s=Eevee)+w_4\cdot\delta(x_s=Eevee)\cdot x_{cp}\tag 8 +b3⋅δ(xs=Caterpie)+w3⋅δ(xs=Caterpie)⋅xcp+b4⋅δ(xs=Eevee)+w4⋅δ(xs=Eevee)⋅xcp(8)其中, δ ( x s = P i d g e y ) = { x = 1 i f x s = P i d g e y y = 0 o t h e r w i s e \delta(x_s=Pidgey)=\left\{ \begin{aligned} x & = 1 \ \ \ \ if\ \ x_s=Pidgey \\ y & =0 \ \ \ \ otherwise\\ \end{aligned} \right. δ(xs=Pidgey)={xy=1 if xs=Pidgey=0 otherwise … … \dots\dots ……, δ ( x s = P i d g e y ) , δ ( x s = W e e d l e ) … … \delta(x_s=Pidgey),\delta(x_s=Weedle)\dots\dots δ(xs=Pidgey),δ(xs=Weedle)……就是前面所说的特征(这样写虽然比较奇怪,但毫无疑问是正确的,后面还会碰到这种写法,应在此熟悉之)。通过求解得到结果如下:

为了追求更精确的结果,我们将能想到的属性,如身高、体重、 H P HP HP值都考虑进去,重新构造一个函数如下图:



以上就是本人关于台大李宏毅机器学习视频的第一个笔记,如果有表述不当或错误的地方欢迎批评指正!
吴恩达机器学习视频好像证明了为什么选最小二乘,感兴趣的同学可以去看看,如果有时间的话,后面我会贴出来。 ↩︎
为了方便起见,消除 ( 5 ) , ( 6 ) (5),(6) (5),(6),式中的常数2,实际上我们通常看到的损失函数形式是: (7) L ( w , b ) = 1 2 ∑ n = 1 10 ( y ^ − ( b + w ⋅ x c p n ) ) 2 L(w,b)=\frac{1}2\sum\limits_{n=1}^{10}(\hat y-(b+w{\cdot}x_{cp}^n))^2\tag 7 L(w,b)=21n=1∑10(y^−(b+w⋅xcpn))2(7) ↩︎
凸规划可以参见最优化知识,这里不赘述。 ↩︎
正则化部分很复杂,这里只是简单介绍,在实际中会遇到很多正则化问题 ↩︎