第一章 Regression Case Study
??Regression(回归),回归是一种数学分析模型,简单来说就是研究一组随机变量和另一组随机变量之间关系的统计分析方法。比如,分析股票数据,得出之前数据和未来数据的关系;自动驾驶数据分析,输入周围环境信息,输出驾驶方向信息;淘宝自动推荐系统,通过大数据分析得出潜在购买者购买某件商品的概率。 接下来就是如何去找到这个回归模型,或者说找到一个函数
Step1 模型
??要预测宝可梦进化后的战斗值(CP)变化如何,判断某个宝可梦到底应不应该进化。想要找到一个预测宝可梦进化后战斗值变化的函数。首先要寻找一些列的函数
f
f
f,比如
y
=
b
+
w
?
x
c
p
y=b + w\cdot x_{cp}
y=b+w?xcp? 其中
b
b
b和
w
w
w是参数,可以为任何值。例如:
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? ??在这些函数中有很多很明显不满足我们的要求,这就需要训练集对函数进行训练,排除掉不符合要求的函数。 很明显
y
=
b
+
w
?
x
c
p
y=b + w\cdot x_{cp}
y=b+w?xcp?这种函数是线性函数,可总结为:
y
=
b
+
∑
w
i
x
i
y=b+\sum w_{i}x_{i}
y=b+∑wi?xi? 其中
x
i
x_{i}
xi?代表了输入参数也称为特征值,
w
i
w_{i}
wi?代表了权重,
b
b
b代表了偏移量。
Step2 对函数的拟合
??有了模型以后就需要收集测试数据,测试数据就是函数的输入值和对应的输出值,需要注意的是测试数据是真实值,也就是我们本就想要的数据。输入用
x
i
,
i
=
1
,
2
,
3
,
.
.
.
x^{i},i=1,2,3,...
xi,i=1,2,3,...表示,输出值用
y
^
i
,
i
=
1
,
2
,
3
,
.
.
.
\hat{y}^{i},i=1,2,3,...
y^?i,i=1,2,3,...表示。有了训练集后就可以对函数集进行训练,这就需要一个评价函数,也就是损失函数
L
o
s
s
f
u
n
c
t
i
o
n
Loss function
Lossfunction,这个损失函数的输入是一系列的函数,输出是一个数值,数值代表了输入的函数有多不好。
L
(
f
)
=
L
(
w
,
b
)
L(f)=L(w,b)
L(f)=L(w,b)
Step3 梯度下降
??如何找到一个比较好的损失函数呢?这就需要用梯度下降的方法。为了简单说明,我们选取只有一个变量
w
w
w的损失函数
L
(
w
)
L(w)
L(w),那最简单的方法就是穷举法,将
w
w
w的值从负无穷到正无穷全都带入损失函数
L
(
w
)
L(w)
L(w)中去,肯定会找到一个
w
w
w的值能使损失函数
L
(
w
)
L(w)
L(w)最小。但是这种做法运算量很大,一般情况下不可取。 ??梯度下降就是一种寻找能使损失函数最小的
w
w
w的方法。 ??1)首先随机选择一个初始的
w
w
w值,设为
w
0
w^{0}
w0。 ??2)计算
L
(
w
)
L(w)
L(w)在
w
0
w^{0}
w0的导数。 ??3)如果导数为正,就需要减小
w
w
w,如果导数为负,那就需要增加
w
w
w。
w
1
=
w
0
?
η
d
L
D
w
∣
w
=
w
0
w^{1}=w^{0}-\eta \frac{dL}{Dw}|_{w=w^{0}}
w1=w0?ηDwdL?∣w=w0? ??4)然后继续计算
L
(
w
)
L(w)
L(w)在
w
1
w^{1}
w1的导数,不断重复第2和第3步。 ??5)这样就会找到一个局部最优解或全局最优解。 ??同理,将参数的个数推广到两个,计算过程如下图所示。 ??但是这种运算有大概率遇到局部最优解,不过在线性回归中是不存在这种情况的,因为线性回归是没有局部最优解的,它的损失函数是凸函数,也就是它的局部解就是全局解。
Step4 计算误差
??通过梯度下降法得到最优的函数后,我们需要计算一下误差,首先用训练集进行测试。然后再使用测试集进行测试。
Step5 选择其他的模型
??当利用一次线性回归函数作为模型时,误差总会偏大,因此需要考虑用其他的模型,比如引入二次项,三次项等等,考虑一些更加复杂的函数形式。但是随着函数形式的越来越复杂,函数对于训练集的拟合越来越好,但是对于测试集,拟合结果并不是越来越好,甚至是越来越糟糕。这种现象被称为过拟合。 ??当我们拥有更多训练集以后,发现不管是几次式,拟合都不可能很完美,那就说明还有隐藏的特征没有被发现,因此需要重回步骤1,设计新的模型。
Step 6 重新设计模型
??之前的模型只考虑了宝可梦进化之间的战斗值,但是有还有其他的参数影响着进化后的战斗值,比如宝可梦的种类、重量、身高、血量等。 但是这些参数到底对进化后的战斗值有没有影响呢?到底影响如何呢?目前来看是没办法说明的,因此需要设计一个包含所有变量的函数。 ??比如宝可梦的种类
x
s
x_{s}
xs?、血量
x
h
p
x_{hp}
xhp?、重量
x
w
x_{w}
xw?、身高
x
h
x_{h}
xh?等。 ??重新设计好模型以后,我们发现新的模型对于训练集的拟合效果非常的好,但是对于测试集的效果非常的差,为什么会出现这种情况呢?这是因为参数太多,造成了模型对训练集过拟合。
Step 7 Regularization 正则化
??假如我们的函数模型仍为
y
=
b
+
∑
w
i
x
i
y=b+\sum w_{i}x_{i}
y=b+∑wi?xi? ??那么,对应的损失函数
L
L
L应该为
L
=
∑
n
(
y
^
n
?
(
b
+
∑
w
i
x
i
)
)
2
L=\sum_{n} (\hat{y}^{n}-(b+\sum w_{i}x_{i}))^{2}
L=n∑?(y^?n?(b+∑wi?xi?))2 ??但是通过试验发现,这种函数形式非常容易过拟合。因此需要再原本的损失函数上加一个正则化项,将损失函数改写成以下式子
L
=
∑
n
(
y
^
n
?
(
b
+
∑
w
i
x
i
)
)
2
+
λ
∑
(
w
i
)
2
L=\sum_{n} (\hat{y}^{n}-(b+\sum w_{i}x_{i}))^{2} +\lambda\sum (w_{i})^{2}
L=n∑?(y^?n?(b+∑wi?xi?))2+λ∑(wi?)2 ??有个这个正则化项,各个输入参数
x
i
x_{i}
xi?对应的权重
w
i
w_{i}
wi?就不会很大,也就是说函数
y
=
b
+
∑
w
i
x
i
y=b+\sum w_{i}x_{i}
y=b+∑wi?xi?会变的很光滑。
|