13. 岭回归

来源:互联网 发布:php命名空间的使用 编辑:程序博客网 时间:2024/03/29 05:59

  • 岭回归
    • sklearn中的岭回归
  • 交通流量预测
    • 数据
    • 代码

岭回归

岭回归(ridge regression)是一种专用于共线性数据分析的有偏估计回归方法。是一种改良的最小二乘估计法,对某些数据的拟合要强于最小二乘法。
对于一般地线性回归问题,参数的求解采用的是最小二乘法,其目标函数如下:

argmin||Xwy||2

参数w的求解,可以使用:
w=(XTX)1XTy

对于矩阵X,若某些列线性相关性较大(即训练样本中某些属性相性相关),就会导致XTX的值接近0,在计算(XTX)1时就会出现不稳定性。
岭回归的优化目标:
argmin||Xwy||2+α||w||2

对应的矩阵求解方法:
w=(XTX+αI)1XTy

sklearn中的岭回归

sklearn.linear_model.Ridge
主要参数:

参数 说明 alpha 正则化因子,对应于损失函数中的α fit_intercept 是否计算截距 solver 设置计算参数的方法,可选参数‘auto’、‘svd’、‘sag’等。

交通流量预测

数据

这里写图片描述

HR:一天中的第几个小时(0-23)
WEEK_DAY:一周中的第几天(0-6)
DAY_OF_YEAR:一年中的第几天(1-365)
WEEK_OF_YEAR:一年中的第几周(1-53)
TRAFFIC_COUNT:交通流量

代码

import numpy as npimport matplotlib.pyplot as plt# 通过sklearn.liner_model加载岭回归方法from sklearn.linear_model import Ridge# 交叉验证模块from sklearn import cross_validation# 多项式模块from sklearn.preprocessing import PolynomialFeatures'''数据加载'''# 从上向下忽略一行(第一行),以逗号作为分隔。data = np.genfromtxt('Data/岭回归.csv', delimiter=',', skip_header=1)# 不要第一列(ID)data = data[:, 1:]# plt.plot(data[:, 4])# plt.show()'''数据处理'''# X用于保存0-3维数据,即属性X = data[:, :4]# y用于保存第4维数据,即车流量y = data[:, 4]# 用于创建最高次数6次方的的多项式特征,多次试验后决定采用6次poly = PolynomialFeatures(6)# X为创建的多项式特征X = poly.fit_transform(X)# 将所有数据划分为训练集和测试集,test_size表示测试集的比例,random_state是随机数种子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)'''创建回归器,并进行训练'''# 创建岭回归实例clf = Ridge(alpha=1.0, fit_intercept=True)# 调用fit函数使用训练集训练回归器clf.fit(train_set_X,train_set_y)# 利用测试集计算回归曲线的拟合优度,clf.score返回值为0.7375# 拟合优度,用于评价拟合好坏,最大为1,无最小值,当对所有输入都输出同一个值时,拟合优度为0。print('拟合优度:', clf.score(test_set_X, test_set_y))'''画出拟合曲线'''# 画一段200到300范围内的拟合曲线start = 200end = 300# 调用predict函数拟合值y_pre = clf.predict(X)# 画图time = np.arange(start, end)plt.plot(time, y[start:end], 'blue', label="real")plt.plot(time, y_pre[start:end], 'red', label='predict')# 设置图例的位置plt.legend(loc='upper left')plt.show()

这里写图片描述

原创粉丝点击