学习李宏毅《机器学习》课程笔记,具体视频可以到https://www.bilibili.com/video/av59538266/中观看。
Regression
股票预测(Stock Market Forecast)
f(历史股市情况)=明天的股市情况
无人驾驶(Self-driving Car)
f(道路状态,车辆状态)=方向盘角度等
推荐系统(Recommendation)
f(使用者A 商品B)=A购买B的可能性
例子:预测宝可梦进化后的CP(Combat Power)值(精灵宝可梦GO)
f(宝可梦)=进化后的CP值
一整只宝可梦表示为x,则CP值表示为xcp,xs表示宝可梦种类,xhp表示HP值,xw表示重量,xh表示高度,进化后的CP值表示为y。
Step1:Model
要找一个函数集(model)
假设是线性模型:y=W*Xcp+b
Linear model:y=b+sum(wixi)#xi表示x的一个属性的值,称之为特征feature
#wi为权重weight,b为偏差bias
Step2:Goodness of Function
找到评判函数好坏的方法。
首先要找到Training Data数据集:假设有10只宝可梦的数据已经有了(x1,y1)(x2,y2)......(x10,y10)
接下来定义一个函数的好坏:使用Loss function L:L(一个函数)=这个函数有多不好。L(f)=L(w,b)(因为f由w和b决定)
这里简单采用L(w,b)=sum((yhat-y)^2)#其中yhat是用f算出来的预测值
我们取使得L(w,b)最小的那个f
Step3:Best Function
找到一个让L(w,b)最小的f*
找到一个让L(w,b)最小的w*,b*
Gradient Descent(梯度下降)
只要L可以微分,Gradient Descent都可以解
使用Gradient Descent方法求使得L最小的w
随机找一个初始值w0
计算dL/dw|w=w0 若计算结果为负,说明斜率是负的,要增加w的值往下走
若计算结果为正,说明斜率是正的,要减少w的值往下走

每到一个点,就好像有个人在左顾右盼看看走哪边会使得L变小。
增加量为

因为现在的斜率越陡,就应该变得越大,越不陡就变化越小。

学习速率,一般也记为alpha,是人为规定的值,学习速率越大,变化越快,学习速率越小,变化越慢。
同理w2,w3........不断迭代(iteration)后,可能会到一个wT的斜率是0,然后学习停止了,仅仅达到了一个局部最优,而没有达到全局最优。
有两个参数的情况也是一样的。

Gradient是


线性模型是没有局部最优的,初始值在哪都一样。
偏微分的计算:

结果:w=2.7,b=-188.4
通过计算点到直线的距离可以算出训练误差。

再抓10只宝可梦将其数据作为test data。
同样,计算测试误差

那么选择另一个模型会怎么样呢?
y=b+w1xcp+w2(xcp)^2

训练误差和测试误差都更加小了。
那再继续给模型增加一个立方呢?

虽然误差变小了,但是仅仅是小了一点点。
再继续增加呢?

哦吼,结果更糟了。已经出事了。
再继续增加

已经完全失败了,但是训练误差却很小。但是测试误差爆炸大。过拟合严重!

光考虑一个cp值特征,不能很好的表示。因为进化后的CP值,还可能和宝可梦种类,体重,身高,HP有关。先把所有的特征都考虑进去。。。。结果发现。。。又过拟合了。

怎么办?使用Regularization正则化。

增加了一个入参数后,可以使得函数更平滑。就对输入不敏感,假如输入有噪声,那么受到噪声的影响也很小。

发现入越大,Training error也会越大。然后发现入=100很适合。这个函数不能不平滑,也不能太平滑。