李宏毅机器学习02 Regression:case study
case:预测宝可梦CP值
目标
找一个function
input:一只宝可梦
output:进化后的CP值
参数
X X X: 表示一只宝可梦,用下标表示该宝可梦的某种属性
X c p X_{cp} Xcp:表示该宝可梦进化前的cp值
X s X_s Xs: 表示该宝可梦是属于哪一种物种,比如妙瓜种子、皮卡丘…
X h p X_{hp} Xhp :表示该宝可梦的生命值
X w X_w Xw : 代表该宝可梦的重重量
X h X_h Xh : 代表该宝可梦的高度
f ( ) f ( ) f() : 表示我们要找的function
y y y: 表示function的output,即宝可梦进化后的cp值,是一个scalar
总体步骤
1.选择模型,即一系列函数f
2.定义loss function来评价函数f的好坏
3.找到最好的function
模型
linear model: w–weight b–bias
training data
loss function
选择平方损失函数
pick “best” function
梯度下降方法
找到参数w,b
- 随机选择初始值 w 0 w_0 w0
- 求梯度
- 迭代
缺点:找到的是局部最优
linear regression 不用担心,因为L是convex的
result
得到了b=-188.4,w=2.7
testing data
找到另外10只宝可梦,得到average error=35(大于training data上的31.9)
更好的model
加入平方项 X c p 2 X_{cp}^2 Xcp2
过拟合
更复杂的model对于training data能够拟合得更好,但是在testing data上会表现为过拟合
为什么复杂模型拟合得更好?
更复杂的模型范围更广
eg.令四次项系数为零则四次模型变为三次模型
model selection
但是线性模型真的能够很好地拟合吗?
收集到更多数据时,发现只考虑进化前CP值是不够的,还有隐藏的因素没被考虑进去
隐藏的因素是物种类型
redesign the model
if语句可以利用冲激函数改写成成linear function
结果:
还会有其他因素吗?
把所有能想到的因素都加入模型
重新定义
l
o
s
s
f
u
n
c
t
i
o
n
loss function
lossfunction ,加入正则项,这样期待得到更小的
w
w
w,使得function更平滑,这样output对于input变化的敏感度降低,这样当输入被噪声noise干扰时,受到的影响变小,得到更好的结果
λ
\lambda
λ越大,得到的function越平滑,training error越大,但testing error有一个先减后增的过程
最终选择
λ
=
100
\lambda=100
λ=100,得到
e
r
r
o
r
=
11.1
error=11.1
error=11.1