解决模型高方差(过拟合)的问题,所谓高方差,就是模型建立受数据变动敏感。
比如在线性回归中,为了拟合某些数据(degree设置的很大),某些系数变得非常大,正则化就是用惩罚系数来防止那些特别巨大的系数出现的。

岭回归

目标是使 ,也就是系数thtea下的预测之与真实值的差距尽可能小
但又要解决高方差的问题,使某些系数不要太大,所以加入了模型正则化,使得尽可能小。即每一个theta的平方和与(一个常数)的乘积尽可能小。这样就既要考虑mse(低偏差),又要考虑后半部分公式(低方差),即theta不能太大。这个二分之一是为了梯度下降时求导方便。

岭回归就像爬山,梯度下降法(所以不容易把系数归零)

sklearn岭回归

  1. from sklearn.linear_model import RidgeLasso # 添加惩罚系数的多项式回归
  2. from sklearn.pipeline import Pipeline
  3. from sklearn.preprocessing import StandardScaler
  4. from sklearn.mertics import mean_squared_error
  5. def RidgeRegression(degree, alpha):
  6. return Pipeline({
  7. ("poly",PolynomialFeatures(degree=degree)),
  8. ("std_scaler", StandardScaler()), # 归一化是为了让梯度下降时效率更高
  9. ("ridge_reg",Ridge(alpha=alpha)) # 公式上的惩罚系数alpha的大小
  10. })
  11. ridge1_reg = RidgeRegression(20, 0.0001)
  12. ridge1_reg.fit(X_train, y_teain)
  13. y1_predict = ridge1_reg.predict(X_test)
  14. mean_squared_error(y_test,y1_predict)

Lasso回归

类似于岭回归,只是公式不一样

由于公式的变化,相较于岭回归alpha的惩罚系数可以相对设置的大一些
lasso模型趋向于把一部分theta变成0,所以可以作为特征选择使用,但是可能删除有用的特征。

正则

,当p等于1的时候,相当于从零点到这个向量的曼哈顿距离。

这个叫做Lp范数,比如p=1时,叫做L1范数。

L0正则项,没有数学表达式,theta数量越小越好,很少使用,np难问题(无法用数学表达数或梯度下降法实现,只能用穷举的方法),通常使用L1代替。
L1正则项
L2正则项,按照公式是需要开根号的,但是这样写比较简单,alpha取小点效果是一样的

Ln正则项,通常不会用。
把均方误差加上正则项就是岭回归和lasso回归了。

弹性网(Elastic Net)


使用俩个正则项形成损失函数,并且添加新系数r用来表示俩个正则项的比例。在上述式子中分别为r和1-r
同时结合了岭回归和lasso回归的优势,既有岭回归的精确性,又有lasso的特征选择。

提一嘴模型泛化的意思

由此及彼的能力,也就是根据已有数据训练的模型的预测能力。