5. Sklearn岭回归

发布时间 2023-11-05 10:49:31作者: 乐池

1. 线性回归

\[w = (X^TX)^{-1}X^TY \]

对于矩阵X,若某些列线性相关性较大(即训练样本中某些属性线性相关 ),就会导致\(X^TX\)的值接近0,在计算\((X^TX)^{-1}\)时就会出现不稳定性。

结论:传统的基于最小二乘的线性回归法缺乏稳定性

2.岭回归

通常情况下会引入正则化(regularization)项解决该问题。
ω加入正则化项则变成

\[w = (X^TX+ \lambda I)^{-1}X^TY \]

由于加上正则化项\(\lambda I\)后,对任意的实数\(X^TX+ \lambda I\)一定为满秩矩阵。

3. 代码

import numpy as np

from sklearn.linear model import Ridge
#通过sklearn.linermodel加载岭回归方法

from sklearn import cross_validation  #加载交叉验证模块,加载matplotilib模块
import matplotlib.pyplot as plt

from sklearn.preprocessing import PolynomialFeatures
#通过sklearn.preprocessing加载PolynomialFeatures用于创建多项式特征,如ab、a2、b2

data=np.genfromtxt('data.txt')  # 使用numpy的方法从txt文件中加载数据
X=data[:,:4]  #X用于保存8-3维数据,即属性
y=data[:,4]  #y用于保存第4维数据,即车流量
poly=PolynomialFeatures(6)#用于创建最高次数6次方的的多项式特征,多次试验后决定采用6次
X=poly.fit_transform(X)  #X为创建的多项式特征

train_set_X, test_set_X , train_set_y, test_set_y =cross_validation.train_test_split(X,y,test_size=0.3.random_state=0)
#将所有数据划分为训练集和测试集,test_size表示测试集的比例
#random_state是随机数种子

clf=Ridge(alpha=1.0,fit intercept = True)  #接下来我们创建岭回归实例
clf.fit(train_set_X,train_set_y) #调用fit函数使用训练集训练回归器
clf.score(test_set_X,test_set_Y)  #利用测试集计算回归曲线的拟合优度,clf.score返回值为0.7375
#拟合优度,用于评价拟合好坏,最大为1,无最小值,当对所有输入都输出同一个值时,拟合优度为0。

#接下来我们画一段200到300范围内的拟合曲线
start=200
end=300
y_pre=clf.predict(x) #是调用predict函数的拟合值
time=np.arange(start,end)
plt.plot(time,y[start:end],'b',label="real")
plt.plot(time,y_pre[start:end],'r', label='predict')展示真实数据( 蓝色 ) 以及拟合的曲线( 红色)
plt.legend(loc= 'upper left') #设置图例的位置
plt.show()