1、【李宏毅机器学习(2017)】Regression - Case Study(回归-案例分析)

本篇博客将按照机器学习简介中机器学习建模步骤,结合宝可梦(神奇宝贝)具体数据进行案例分析。


目录

  • Objective
  • step1:Model
  • step2:Goodness of Function
  • step3:Best Function
  • demo


Objective

通过训练宝可梦属性的历史数据构建回归模型,输入宝可梦进化前的属性数据,预测宝可梦进化后的Combat Power (CP)。
1、【李宏毅机器学习(2017)】Regression - Case Study(回归-案例分析)_第1张图片

step1:Model

假设进化前的 xcp x c p 与进化后的 xcp x c p 的(即 y y )存在关系 f1,f2fn,(fi=bi+wixcp,i=1,2n) f 1 , f 2 … f n , ( f i = b i + w i x c p , i = 1 , 2 … n )
1、【李宏毅机器学习(2017)】Regression - Case Study(回归-案例分析)_第2张图片

step2:Goodness of Function

xicp x c p i 表示第 i i 个观测(进化前的CP), ŷ i y ^ i 表示第 i i 个观测的真实值(进化后的CP),现在捕捉10只宝可梦,记录这10只宝可梦进化前和进化后的CP( xicp,ŷ i,i=1,210 x c p i , y ^ i , i = 1 , 2 … 10 ),在这一案例中 L(w,b)=10n=1(ŷ n(b+wxncp))2 L ( w , b ) = ∑ n = 1 10 ( y ^ n − ( b + w x c p n ) ) 2
1、【李宏毅机器学习(2017)】Regression - Case Study(回归-案例分析)_第3张图片

Loss function L由 w,b w , b 控制,可视化如图,冷色调代表低 L L 值,暖色调代表高 L L 值,
1、【李宏毅机器学习(2017)】Regression - Case Study(回归-案例分析)_第4张图片

step3:Best Function

从Step1中的 f1,f2fn f 1 , f 2 … f n 选择最优函数 f f ∗ f=argminfFL(f) f ∗ = a r g m i n f ∈ F L ( f ) ,在这一案例中,即 w,b=argminw,bL(w,b) w ∗ , b ∗ = a r g m i n w , b L ( w , b )
1、【李宏毅机器学习(2017)】Regression - Case Study(回归-案例分析)_第5张图片

L L 函数最小值问题一般用梯度下降法来进行计算,步骤如下:

  1. 随机初始化 w0,b0 w 0 , b 0
  2. 计算函数 L(w,b) L ( w , b ) w0,b0 w 0 , b 0 处的偏导 dLdw|w=w0,dLdb|b=b0 d L d w | w = w 0 , d L d b | b = b 0 w1:=w0ηdLdw|w=w0,b1:=b0ηdLdb|b=b0, w 1 := w 0 − η d L d w | w = w 0 , b 1 := b 0 − η d L d b | b = b 0 , ,其中 η η 为学习速率(Learning rate)
  3. 重复第二步直到 w,b w , b 收敛
    1、【李宏毅机器学习(2017)】Regression - Case Study(回归-案例分析)_第6张图片
注意:梯度下降方法可能得到的是局部最优,在线性回归模型中,函数是凸的,因此梯度下降得到的最优解即全局最优解

使用梯度下降算法求解案例最小化问题,

minL(w,b)=minn=110(ŷ n(b+wxncp))2 m i n L ( w , b ) = m i n ∑ n = 1 10 ( y ^ n − ( b + w x c p n ) ) 2

Lw=n=1102(ŷ n(b+wxncp))(xncp),Lb=n=1102(ŷ n(b+wxncp))(1) ∂ L ∂ w = ∑ n = 1 10 2 ( y ^ n − ( b + w x c p n ) ) ( − x c p n ) , ∂ L ∂ b = ∑ n = 1 10 2 ( y ^ n − ( b + w x c p n ) ) ( − 1 )

en=ŷ nf(xncp),n=1,210 e n = y ^ n − f ∗ ( x c p n ) , n = 1 , 2 … 10 ,表示训练集中第 n n 个观测的误差,使用新捕捉的10只宝可梦作为测试集计算平均误差,以此来评价模型的泛化能力,现在我们考虑更复杂的线性模型,即在Step1中的 f f 不再仅仅使用的 xcp x c p 一次变量。(tips:模型的总误差可以从bias和variance两方面考虑,bias衡量训练集的拟合效果,variance衡量测试集结果的稳定性

Model Best Function 训练集平均误差 测试集平均误差
y=b+wxcp y = b + w x c p b=188.4,w=2.7 b = − 188.4 , w = 2.7 35.0 31.9
y=b+w1xcp+w2x2cp y = b + w 1 x c p + w 2 x c p 2 b=10.3,w1=1.0,w2=2.7103 b = − 10.3 , w 1 = 1.0 , w 2 = 2.7 ∗ 10 − 3 15.4 18.4
y=b+w1xcp+w2x2cp+w3x3cp y = b + w 1 x c p + w 2 x c p 2 + w 3 x c p 3 b=6.4,w1=0.66,w2=4.3103,w3=1.8106 b = 6.4 , w 1 = 0.66 , w 2 = 4.3 ∗ 10 − 3 , w 3 = − 1.8 ∗ 10 − 6 15.3 18.1
y=b+w1xcp+w2x2cp+w3x3cp+w4x4cp 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 … … … 14.9 28.8
y=b+w1xcp+w2x2cp+w3x3cp+w4x4cp+w5x5cp 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 … … … 12.8 232.1

1、【李宏毅机器学习(2017)】Regression - Case Study(回归-案例分析)_第7张图片

当模型越复杂,训练集平均误差越低,如图可以直观地理解,在越复杂的模型(对应越大的集合)找到的best function拟合效果显然越好,但是测试集平均误差并不是单调递减,在引入4次、5次项之后反而急剧增大,此时产生了过拟合问题(可以尝试增加训练集样本来解决)。

现在我们考虑更复杂的线性模型,即在Step1中的 f f 不再仅仅使用的 xcp x c p 这一变量,引入变量 xs x s (宝可梦种族),此时训练集平均误差为3.8,测试集平均误差为14.3,模型拟合与泛化效果都增强,在此基础上考虑变量的二次项,
1、【李宏毅机器学习(2017)】Regression - Case Study(回归-案例分析)_第8张图片

此时模型过拟合,使用正则化方法来解决过拟合问题,即使Step2中的loss function 不仅仅考虑error,还考虑了参数个数, L=(ŷ n(b+wxncp))2+λ(wi)2 L = ∑ ( y ^ n − ( b + ∑ w x c p n ) ) 2 + λ ∑ ( w i ) 2 此时我们假设平滑的 f f 更接近真正的 f f ∗
1、【李宏毅机器学习(2017)】Regression - Case Study(回归-案例分析)_第9张图片

为了兼顾最小化第二项,训练集平均误差相对于没有正则化的方法高,但是测试集平均误差降低,大大减少了过拟合的影响。

demo

# 进化前后CP值数据
x_data=[338.,333.,328.,207.,226.,25.,179.,60.,200.,606.]
y_data=[640.,633.,619.,393.,428.,27.,193.,66.,226.,1591.]

# 假设模型
#y_data = b + w*x_data

# 初始化w、b
w,b = -4,-120
# 学习速率
lr = 0.000001
# 迭代次数
iter = 100000

b_history=[b]
w_history=[w]

for i in range(iter):
    b_grad = 0.0
    w_grad = 0.0
    for n in range(len(x_data)):
        b_grad -= 2.0*(y_data[n] - b*w*x_data[n])*1.0
        w_grad -= 2.0*(y_data[n] - b*w*x_data[n])*x_data[n]
    # 更新参数
    b = b -lr*b_grad
    w = w -lr*w_grad
    # 储存w、b
    b_history.append(b)
    w_history.append(w)

你可能感兴趣的:(学习笔记,李宏毅机器学习(2017),笔记)