模型介绍
进化前pokemon的各种特征,一只pokemon为 x x ,包括了战斗力、输入的pokemon的状态 xs x s 、hp值 xhp x h p 、重量 xw x w 、高度 xh x h ,以上为输入的特征;输出为pokemon进化后的CP值。
回归过程
根据第一讲介绍,第一步为找到模型,也就是对应的函数集合,本讲对应的模型为 y=b+w⋅x y = b + w ⋅ x ,其中 y y 为进化后的CP值。而和 b b 可以为不同值,这对应了不同的函数,构成了function set,也就是前面所说的模型,而这些函数数量为无穷多个,有些是合理的,有些是不合理的。上述模型为典型的线性模型(Linear model),为weight, b b 为bias。
第二步为收集资料,评估模型函数集合中各函数的Goodness。
采用上标表示数据的序号,即存在各种不同的pokemon状态,对应的进化后CP值为
(y1,y2,...,yN)
(
y
1
,
y
2
,
.
.
.
,
y
N
)
。具体的数据集见参考资料Pokemon数据集,可以利用数据可视化工具进行显示。
为了衡量各函数的Goodness,需要计算另外的一个函数,loss function,其输入为模型中的函数,输出为衡量值(how bad the function is),即loss function中包含了model中函数
f(xcpn)
f
(
x
c
p
n
)
,这也对应着实际的预测输出量。将函数带入,则可以得到各变量对应的损失函数,也就是需要优化的函数。该过程如下图所示:
针对部分情况,可以通过手段将loss function可视化,例如下图中各点均代表了一个function,其中颜色代表了loss function的大小。
接下来就主要是解决如何找到最小的loss function, 这里对应的参数值就是loss function里面的自变量值,符合
第一个优化算法为Gradient descent,此为一阶最优化算法,可以找到函数的局部最小值( 极小值,这是GD的第一个问题: stuck at local minima or at saddle point),例如更新 w w 的步骤如下,其中称为learning rate。该过程不断重复,直到微分形式的值为0,也就是达到了极值点。
对于本例子,存在两个优化参数,将两个参数排成一个vector,即 ∇L ∇ L ,过程如下图所示。如果仅有两个参数,则可以绘制loss function的等高线图, ∇L ∇ L 指向等高线的法线负方向。对于 ∇L ∇ L ,其值与局部的下降速度有关,当等高线密集则 ∇L ∇ L 的数值较大,对应图上则跳动的距离较长。
更一般地,使用
θ
θ
代表参数集合,对于实际情况,并不能保证每次迭代完成后,Loss fuction均会降低,这是一个相对较大的问题。
第三个问题是,当函数存在plateau的情况,如下图所示,则损失函数最优化得到的参数集合与最优值相差很远。但是对于linear regression来说,其loss function为convex,则出现前述问题的可能性不大。如果model较为复杂,则需要考虑以上三个问题。
对于Linear regression,可以采用链式法则(chain rule)进行求梯度操作。
回归的缺陷及解决方法
同样,为了能够实现更好的拟合,可以定义更加复杂的linear model(参数对于输出是否为Linear),例如定义如下,这同样也是一个linear model。同样的,也可以使用更高次的linear model去拟合,最终可能会导致过拟合的情况。过拟合指的是测试数据结果与训练数据结果相差过大的情况。其原因是高次复杂模型会包含低次模型,因此对于训练数据的误差而言只会越来越小,需要选择对于测试数据集最小的model。
解决overfitting的方法包括 collect more data(可能会发现一些隐藏的属性会影响输出),例如在数据足够多的情况下,可以发现预测CP值会与pokemon的种类有关,如下图所示。接下来,可以通过引入If条件,区别对待不同的pokemon,定义不同的种类,引入 δ δ 函数。
还有一种方式是通过regularization解决过拟合。如下图所示,较小的w意味着function较为平滑,也就是对于输入变化产生的输出变化较小。这基于一个假设:较为平滑的函数更有可能描述实际情况。
λ
λ
需要人工干预,没有考虑bias(不需要考虑,加上后意味着需要x限制bias较小,对于本问题没什么帮助)。后续则需要人工干预
λ
λ
,确定最合适的值。实际上,加上限制项,会发现training data的loss function越来越大,但是对于测试数据而言则会存在一个较优值。
本讲结论