本文所用文件的链接
链接:https://pan.baidu.com/s/1RWNVHuXMQleOrEi5vig_bQ
提取码:p57s
岭回归
普通的线性回归模型使用基于梯度下降的最小二乘法, 在最小化损失函数的前提下, 寻找最优模型参数. 在此过程中, 包括少数的异常样本在内的全部训练数据都会对最终的模型参数造成相等程度的影响, 并且异常值对模型所带来的影响无法在训练过程中被识别出来. 为此, 岭回归在模型迭代过程中增加了正则项, 用来限制模型参数对异常样本的匹配程度, 进而提高模型面对大多数正常样本的拟合精度.
import sklearn.linear_model as lm
model = lm.Ridge(
正则强度,
fit_intercept=是否训练截距,
max_iter=最大迭代次数
)
model.fit(输入,输出)
预测输出 = model.predict(输入)
该案例利用线性回归和领回归分别训练了同一组数据,很明显,岭回归能够不受异常数据的影响,训练的直线更符合大多数数据的变换规律。而线性回归则明显受到了异常数据的影响,这个问题在机器学习中称为过拟合,后续的复杂模型中会有各种方式来避免过拟合,而岭回归就是防止线性回归过拟合的一种方式。
"""
岭回归
"""
import numpy as np
import sklearn.linear_model as lm
import matplotlib.pyplot as mp
import sklearn.metrics as sm
x ,y = np.loadtxt('ml_data/abnormal.txt',
delimiter=',', usecols=(0,1),
unpack=True)
# 把x改为n行1列 这样才可以作为输入交给模型训练
x = x.reshape(-1, 1)
mp.figure('Ridge Regression', facecolor='lightgray')
mp.title('Ridge Regression', fontsize=18)
mp.xlabel('X', fontsize=16)
mp.ylabel('Y', fontsize=16)
mp.tick_params(labelsize=12)
mp.grid(linestyle=':')
mp.scatter(x, y, s=60, c='dodgerblue',
label='Points')
# 使用线性回归, 绘制回归线
model = lm.LinearRegression()
model.fit(x, y)
pred_y = model.predict(x)
mp.plot(x, pred_y, c='orangered',
label='Linear Regression Line')
# 使用岭回归, 绘制回归线
model = lm.Ridge(150, fit_intercept=True,
max_iter=1000)
model.fit(x, y)
pred_y = model.predict(x)
mp.plot(x, pred_y, c='limegreen',
label='Ridge Regression Line')
mp.legend()
mp.show()