岭回归
岭回归为线性回归的优化
对于一般线性回归问题
参数的求解采用的是最小二乘法,其目标函数:argmin||Xw-y||^2
参数w的求解,也可以使用如下矩阵方法进行:w=(XTX)-1*XTy
对于矩阵X,若某些列线性相关性较大(即训练样本中某些属性线性相关),
就会导致XTX的值接近0,在计算(XTX)-1时就会出现不稳定性
结论:传统的基于最小二乘的线笥回归缺乏稳定性
岭回归的优化目标:argmin||Xw-y||2+a||w||2
矩阵求解:w=(XTX+aI)-1XTy #I为单位矩阵
岭回归(ridge regression)是一种专用于线性数据分析的有偏估计回归方法
是一种改良的最小二乘估计法,对某些数据的似合要强于最小二乘法。
sklearn中的岭回归
调用方式:sklearn.linear_model.Ridge
sklearn.linear_model.Ridge(alpha=1.0, copy_X=True, fit_intercept=True, max_iter=None,
normalize=False, random_state=None, solver=‘auto’, tol=0.001)
alpha:正则化因子,对应于损失函数中的a
fit_intercept:表示是否计算截距
solver:设置计算参数的方法,可选参数’auto’,‘svd’,'sag’等
交通流量预测实例
数据介绍:数据为某路口的交通流量监测数据,记录全年小时级别的车流量
实验目的:根据已有的数据创建多项式特征,使用岭回归模型代替一般的线性模型,对车流量的信息进行多项式回归
技术路线:sklearn.linear_model.Ridgefrom
sklearn.preprocessing.PolynomialFeatures
创建多项式特征
PolynomialFeatures(degree=2, include_bias=True, interaction_only=False)
degress:最高次幕函数
import numpy as np
import pandas as pd
from sklearn.linear_model import Ridge #岭加归方法
#from sklearn import cross_decomposition
from sklearn.model_selection import train_test_split
import matplotlib.pyplot as plt
from sklearn.preprocessing import PolynomialFeatures #用于创建多项式
data=pd.read_csv('岭回归.csv')
plt.plot(data.iloc[:,4])
plt.show()
X=data.iloc[:,1:5] #
y=data.iloc[:,5] #车流量
poly=PolynomialFeatures(6) #创建最高次数为6次方的多项式特征,多次试验后决定采用6次
X=poly.fit_transform(X) #x为创建的多项式特征
train_x,test_x,train_y,test_y=train_test_split(X,y,test_size=0.3,random_state=42) #测试集比例,随机数起始
clf=Ridge(alpha=1.0,fit_intercept=True) #创建岭回归实例
clf.fit(train_x,train_y) #训练样本
score=clf.score(test_x,test_y) #计算回旭曲线的似合优度
print('曲线似合得分:',score) #曲线似合得分:0.750
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()