Regression—Predict Combat Power(CP) of pokemon after evolution
Step 1:Find a Model
首先需要找到函数模型,假设为
y
=
b
+
w
∗
x
c
p
y = b+w*x_{cp}
y=b+w∗xcp
w和b是不同可以调整的参数,通过调整w和b,可以得到一个无穷的函数集。然后可以进一步延伸得到一个Linear Model:
y
=
b
+
∑
w
i
∗
x
i
y=b+\sum w_{i}*x_{i}
y=b+∑wi∗xi
其中,
w
i
w_{i}
wi叫做weight,
b
b
b叫做bias,
x
i
x_{i}
xi叫做feature。
Step 2:Evaluate the Goodness of Function
抓10只宝可梦,得到其初始值与进化后的cp值,定义一个新函数:Loss Function L:input: a function, output: how bad it is
L
(
f
)
=
L
(
w
,
b
)
=
∑
n
=
1
10
(
y
^
n
−
(
b
+
w
∗
x
c
p
n
)
)
2
L(f)=L(w,b)=\sum_{n=1}^{10}(\hat{y}^{n}-(b+w*x_{cp}^n))^{2}
L(f)=L(w,b)=n=1∑10(y^n−(b+w∗xcpn))2
这个损失函数是用来衡量一组参数b,w的好坏.
Step 3:Choose the Best Function-Gradient Descent
1. 一个参数 w w w
找到让loss最小的函数或者 w w w, b b b,经常使用gradient descent(梯度下降法),只考虑一个参数 w w w,具体来说:
-
选取一个初始位置 w 0 w^{0} w0,或不随机,采用其他方法,这里随机选取。
-
计算 d L d w ∣ w = w 0 \frac{dL}{dw}|_{w=w^{0}} dwdL∣w=w0也可以理解为该点的切线斜率
-
梯度下降:如果切线斜率是负的,就增加 w 0 w^{0} w0到 w 1 w^{1} w1,反之则减小。
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
其中 η \eta η被称为learning rate,之后继续计算 w 1 w^{1} w1处的微分值,经过很多次iteration,直至进入local minimum(非global optical),微分为0。完成迭代。但是在线性回归中,不存在local optimal。
2. 两个参数 w , b w,b w,b
同样的,也是先随机找到两个参数的初始值,然后分别计算对 w w w和 b b b的微分,根据微分的正负结合learning rate分别找到下一个 w w w和 b b b,以此类推不断更新参数,直到进入local minimum。
3. 计算
L ( f ) = L ( w , b ) = ∑ n = 1 10 ( y ^ n − ( b + w ∗ x c p n ) ) 2 L(f)=L(w,b)=\sum_{n=1}^{10}(\hat{y}^{n}-(b+w*x_{cp}^n))^{2} L(f)=L(w,b)=n=1∑10(y^n−(b+w∗xcpn))2
∂ L ∂ w = ∑ n = 1 10 2 ( y ^ n − ( b + w ∗ x c p n ) ) ( − x c p n ) \frac{\partial L}{\partial w}=\sum_{n=1}^{10}2(\hat{y}^{n}-(b+w*x_{cp}^n))(-x_{cp}^{n}) ∂w∂L=n=1∑102(y^n−(b+w∗xcpn))(−xcpn)
∂ L ∂ b = ∑ n = 1 10 2 ( y ^ n − ( b + w ∗ x c p n ) ) ( − 1 ) \frac{\partial L}{\partial b}=\sum_{n=1}^{10}2(\hat{y}^{n}-(b+w*x_{cp}^n))(-1) ∂b∂L=n=1∑102(y^n−(b+w∗xcpn))(−1)
How’s the results?
通过计算,得到最好的
w
w
w和
b
b
b,然而,在预测其他数据时表现不是非常好,因此考虑换一个更复杂的模型:
y
=
b
+
w
1
∗
x
c
p
+
w
2
∗
(
x
c
p
)
2
y = b+w_{1}*x_{cp}+w_{2}*(x_{cp})^2
y=b+w1∗xcp+w2∗(xcp)2
通过梯度下降法得到更小的Average Error和Best Function发现在测试集中表现更好。
进一步地,设计一个三次模型:
y
=
b
+
w
1
∗
x
c
p
+
w
2
∗
(
x
c
p
)
2
+
w
3
∗
(
x
c
p
)
3
y = b+w_{1}*x_{cp}+w_{2}*(x_{cp})^2+w_{3}*(x_{cp})^3
y=b+w1∗xcp+w2∗(xcp)2+w3∗(xcp)3
结果在训练集中表现更好了,在测试集中表现稍微好一点。
再提高次数,得到新的模型:
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}*x_{cp}+w_{2}*(x_{cp})^2+w_{3}*(x_{cp})^3+w_{4}*(x_{cp})^4
y=b+w1∗xcp+w2∗(xcp)2+w3∗(xcp)3+w4∗(xcp)4
在测试在训练集中表现更好了,在测试集中表现反而不好。在五次的模型中这一特性体现得更显著。
过拟合
出现这一现象的原因是过拟合(overfitting),更复杂的模型在训练集表现很好,但是在测试集并不一定好,因为会学习到很多仅适用于训练集的特殊现象。
Hidden Factor
随着数量增加,发现明显还有一个隐藏的要素影响着进化后的cp值—物种属性,因此可以重新定义函数,通过
δ
(
x
s
)
\delta(x_{s})
δ(xs)函数来调节不同物种下不同的参数,然后重新进行计算。同时可以将其初始的weight、height、hp值构建模型。然而,考虑过多的feature容易产生overfitting,因此可以进行正则化(regularization)处理。
正则化
调整Loss函数如下:
y
=
b
+
w
∗
x
c
p
y = b+w*x_{cp}
y=b+w∗xcp
L
(
f
)
=
∑
n
(
y
^
n
−
(
b
+
∑
w
i
x
i
)
)
2
+
λ
∑
(
w
i
)
2
L(f)=\sum_{n}(\hat{y}^{n}-(b+\sum w_{i}x_{i}))^{2}+\lambda\sum(w_{i})^{2}
L(f)=n∑(y^n−(b+∑wixi))2+λ∑(wi)2
在新的loss函数中可以看出,相较之前,增加了一部分,这部分的含义是期待
w
i
w_{i}
wi的和最小,也即期待模型能更好的拟合的同时,参数
w
i
w_{i}
wi平方和最小。原因如下:当
w
w
w小时,函数更平滑,即调整输入,输出的变化越小,这样一来,当输入中含有噪音,平滑的函数受影响更小。
λ
\lambda
λ 值越大,则代表考虑更多的考虑函数的平滑,通过调整
λ
\lambda
λ值从0—>100000,在Training data中Average error越来越大,这是合理的,但是在testing data中,表现先变好后变差,通过手动调整
λ
\lambda
λ,找到最好的情况,在这个过程中要考虑函数的拟合程度和平滑性的一个均衡,即
λ
\lambda
λ不能太小也不能太大。
参数
b
b
b(bias)不影响函数平滑程度,因此不需要考虑。