台大李宏毅Machine Learning学习笔记(二)——回归(Regression)(一)

本文通过预测宝可梦进化后的CP值,介绍了回归分析的基本原理。包括模型选择、损失函数定义、梯度下降法应用及过拟合问题解决。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  先看一个实例,以直观理解回归:假设我抓到一只宝可梦,我想知道它进化后的 c p cp cp值,以此来确定我是进化它还是把它当做食物喂其他的宝可梦(不忍~~)。如图1:
Alt=图1宝可梦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可分以下三步进行:

  1. 第一步:寻找一个模型(model)

  模型有无穷无尽个,在此假设选取一个线性模型 (1) y = b + w ⋅ x c p y=b+w{\cdot}x_{cp}\tag{1} y=b+wxcp(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.0xcp
  • 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.2xcp
  • f 3 : y = − 0.8 − 1.2 ⋅ x c p f_3:y=-0.8-1.2{\cdot}x_{cp} f3:y=0.81.2xcp;
  • ⋯ ⋯ {\cdots\cdots}

这些模型有好有坏,例如第三个显然是错的,因为一般来说进化过后 c p cp cp值是大于进化之前的,这时我们就要在这些模型中找一个较好函数。

  1. 第二步:寻找一个“上帝”的函数

  假设我现在收集了十组数据 ( 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:
图2

图2 损失函数
在第一步中,我们假设了线性模型,因为 w , b w,b w,b是不确定的,那么怎么知道无数个线性模型中哪一个是我们需要的函数呢?这时候就要定义一个函数,来评判这些线性函数中哪一个是最好的。在此,我们定义损失函数(loss function): (2) L ( f ) = L ( w , b ) = ∑ n = 1 10 ( y ^ − ( b + w ⋅ x c p n ) ) 2 L(f)=L(w,b)=\sum\limits_{n=1}^{10}(\hat y-(b+w{\cdot}x_{cp}^n))^2\tag 2 L(f)=L(w,b)=n=110(y^(b+wxcpn))2(2)当然,也可以定义别的损失函数,但就目前的模型来说,最小二乘形式的损失函数是最合理 1

  1. 最好的函数

  第二步中,我们定义了损失函数,要找到最好的能够预测宝可梦的 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=110(y^n(b+wxcpn))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ηwLw=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ηbLb=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ηwLw=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ηbLb=b1;
  4. ⋯ ⋯ {\cdots\cdots} ;
  5.直到找到最优解。如下图3:
在这里插入图片描述

图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 wL=n=1102(y^n(b+wxcpn))(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 bL=n=1102(y^n(b+wxcpn))(1)(6)2。由于线性回归问题是凸规划3问题,所有不存在局部最优解(local optimal)。根据以上推到求出的结果如下:
图 4 训练集集

图4 训练集集结果

从上图看结果在起始的两个点和结束的两个点误差较大,但我们更关心在我们给定另外的 c p cp cp值的情况下,这个函数能不能预测准确,因此,找来另外十组数据(通常称之为测试集)来检验这个函数是否预测准确,结果如下:
图5 测试集

图5 测试集结果
从上图可以看出,测试集结果要比训练集差(通常如此),误差是比较大的,因此,可要考虑换几个模型看看,假设如下几个模型:

  1. y = b + w 1 ⋅ x c p y=b+w_1{\cdot}x_{cp} y=b+w1xcp
  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+w1xcp+w2xcp2
  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+w1xcp+w2xcp2+w3xcp3
  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+w1xcp+w2xcp2+w3xcp3+w4xcp4
  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+w1xcp+w2xcp2+w3xcp3+w4xcp4+w5xcp5
对比结果如下:
图6 过拟合

图6 不同模型对比结果、过拟合

可以看出当选取的函数阶次越高时,训练集拟合得越好,这是由于 n n n次多项式可任意逼近非线性函数,但是在我们更关心的测试集上,阶次越高,精度不一定越好,称这种现象为过拟合(overfitting),导致函数的泛化(generation)能力差。

  随着我们的宝可梦越抓越多,假设有60个,数据如下图7:图7

图7 隐藏的属性
  从上图可以发现的问题是:这些数据怎么也不能用一条直线来拟合的或者说用一条直线拟合误差很大。说明还有别的因素影响进化后的 c p cp cp值,比如说物种。因此,我们改善我们的模型:令 x s = s p e c i e s   o f   x : x_s=species\ of\ x: xs=species of x:
   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+w1xcp
   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+w2xcp
   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+w3xcp
   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+w4xcp
将上面四个式子合起来写就是: 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)就是前面所说的特征(这样写虽然比较奇怪,但毫无疑问是正确的,后面还会碰到这种写法,应在此熟悉之)。通过求解得到结果如下:
图8
图8 不同物种的拟合结果
貌似结果还比较可靠。这时,如果想要继续提高预测精度,自然而然会想到是不是还有别的属性也影响 c p cp cp值呢?好,接着往下走。
  为了追求更精确的结果,我们将能想到的属性,如身高、体重、 H P HP HP值都考虑进去,重新构造一个函数如下图:
图9
图9 重新构造的函数
这个函数比较复杂,在训练集上能够取得很好的结果,但是泛化性能很差,造成过拟合。怎么解决这种过拟合问题呢?第一反应就是减少特征的数量,只保留几种用处比较大的特征,同时,我们也丢失了信息,但是有时候所有的特征都是有用的,我们并不想丢弃,这种情况下就需要用正则化 4(Regularization)来解决问题。
图10
图10 正则化
如图中所示,当我们最小化损失函数时,如果 λ \lambda λ比较大的话, w i w_i wi就会很小,输入的变化对函数的输出影响就会小得多,即函数比较平滑。
图11
图11 正则化后的结果
我们调整 λ \lambda λ的值,发现并不是函数越平滑越好,当 λ = 100 \lambda=100 λ=100的时候结果最好。

以上就是本人关于台大李宏毅机器学习视频的第一个笔记,如果有表述不当或错误的地方欢迎批评指正!


  1. 吴恩达机器学习视频好像证明了为什么选最小二乘,感兴趣的同学可以去看看,如果有时间的话,后面我会贴出来。 ↩︎

  2. 为了方便起见,消除 ( 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=110(y^(b+wxcpn))2(7) ↩︎

  3. 凸规划可以参见最优化知识,这里不赘述。 ↩︎

  4. 正则化部分很复杂,这里只是简单介绍,在实际中会遇到很多正则化问题 ↩︎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值