1.过拟合问题
例1:线性回归问题
第一个模型是一个线性模型,欠拟合,不能很好地适应我们的训练集;第三个模型是一个四次方的模型,过于强调拟合原数据,而丢失了算法的本质:预测新数据。我们可以看出,若给出一个新的值使之预测,它将表现的很差,是过拟合,而中间的模型似乎最合适。
例2:分类问题
显然,图一是欠拟合的,不能很好的适应训练集,而图三过度拟合原数据,使其在预测新数据时表现很差,所以中间的模型最适合。
解决过拟合问题的方法:1.丢弃一些不能帮助我们正确预测的特征。可以是手工选择保留哪些特征,或者使用一些模型选择 的算法来帮忙(例如 PCA)
2.正则化。 保留所有的特征,但是减少参数的大小(magnitude)
2. 正则化
⑴ 修改代价函数
由于高次项导致了过拟合的产生,我们就通过使高次项系数接近0的方法来时函数更好的拟合
在一定程度上减小这些参数𝜃 的值,这就是正则化的基本方法。
修改后的代价函数为:
其中,λ为正则化参数,即对参数的正则化程度。
根据惯例,我们不对参数θ0进行正则化。
若λ过大,,那么𝜃(不包括𝜃0)都会趋近于 0,这样我们所得到的只能是一条平行于𝑥轴的直线。
所以对于正则化,我们要取一个合理的 𝜆 的值,这样才能更好的应用正则化。
⑵ 线性回归的正则化
正则化线性回归的代价函数为:
使用梯度下降法
由于θ0不需要正则化,故分为两种情形
对上面的算法中𝑗 = 1,2, . . . , 𝑛 时的更新式子进行调整可得:
可以看出,正则化线性回归的梯度下降算法的变化在于,每次都在原有算法更新规则的基础上令𝜃值减少了一个额外的值。
使用正规方程
图中的矩阵尺寸为 (𝑛 + 1) ∗ (𝑛 + 1)。当λ>0时,该矩阵一定是可逆矩阵。
⑶ 逻辑回归模型的正则化
逻辑回归模型正则化后的代价函数为:
Python 代码:
import numpy as np
def costReg(theta, X, y, learningRate):
theta = np.matrix(theta)
X = np.matrix(X)
y = np.matrix(y)
first = np.multiply(-y, np.log(sigmoid(X*theta.T)))
second = np.multiply((1 - y), np.log(1 - sigmoid(X*theta.T)))
reg = (learningRate / (2 * len(X))* np.sum(np.power(theta[:,1:the
ta.shape[1]],2))
return np.sum(first - second) / (len(X)) + reg
要最小化该代价函数,通过求导,得出梯度下降算法为:
注:看上去同线性回归一样,但是知道 ℎ𝜃(𝑥) = 𝑔(𝜃𝑇𝑋),所以与线性回归不同。