机器学习(十一)岭回归之交通流量预测

举报
野猪佩奇996 发表于 2022/01/23 00:29:16 2022/01/23
1.6k+ 0 0
【摘要】 (1)线性回归的不足 对于一般地线性回归问题,参数的求解采用的是最小二乘法,其目标函数如下: 参数w的求解,也可以使用如下矩阵方法进行: (2)岭回归 岭回归的优化目标: 对应的矩阵求解方法为:    岭回归(ridge regression)是一种专用于共线性数据分析的有偏估计回归方法  是一种...

(1)线性回归的不足

对于一般地线性回归问题,参数的求解采用的是最小二乘法,其目标函数如下:

参数w的求解,也可以使用如下矩阵方法进行:

(2)岭回归

岭回归的优化目标:

对应的矩阵求解方法为:

 岭回归(ridge regression)是一种专用于共线性数据分析的有偏估计回归方法
 是一种改良的最小二乘估计法,对某些数据的拟合要强于最小二乘法。

(3)sklearn中的岭回归

在sklearn库中,可以使用sklearn.linear_model.Ridge调用岭回归模型,其主要参数有:
• alpha:正则化因子,对应于损失函数中的𝜶
• fit_intercept:表示是否计算截距,
• solver:设置计算参数的方法,可选参数‘auto’、‘svd’、‘sag’等

(4)交通流量预测实例

数据介绍:
数据为某路口的交通流量监测数据,记录全年小时级别的车流量。
实验目的:
根据已有的数据创建多项式特征,使用岭回归模型代替一般的线性模型,对车流量的信息进行多项式回归。
技术路线:sklearn.linear_model.Ridgefrom
sklearn.preprocessing.PolynomialFeatures

数据特征如下:
HR:一天中的第几个小时(0-23)
WEEK_DAY:一周中的第几天(0-6)
DAY_OF_YEAR:一年中的第几天(1-365)
WEEK_OF_YEAR:一年中的第几周(1-53)
TRAFFIC_COUNT:交通流量
全部数据集包含2万条以上数据(21626)

(5)实验过程

(1)建立工程,导入sklearn相关工具包:


      import numpy as np
      from sklearn.linear_model import Ridge
      #通过sklean.linermodel加载岭回归方法
      #from sklearn import cross_validation
      from sklearn import model_selection
      #加载交叉验证模块,加载matplotilib模块
      import matplotlib.pyplot as plt
      from sklearn.preprocessing import PolynomialFeatures
      #通过..加载..用于创建多项式特征,如ab,a^2,b^2
  
 

(2)数据加载


         #2数据加载
          data = np.genfromtxt(r'C:\Users\86493\Desktop\北理工机器学习慕课数据\回归\岭回归.txt', delimiter=',')
         #使用numpy的方法从txt文件中加载数据
          plt.plot(data[:,4])
         #使用plt展示车流量信息,如右图
          plt.show()
  
 

(3)数据处理


         #3数据处理
          x = data[:,:4]
         #X用于保存0-4维数据,即属性
          y = data[:,4]
         #y用于保存第4维数据,即车流量
          poly = PolynomialFeatures(9)
         #用于创建最高次数6次方的多项式特征,多次试验后决定采用6次
          x = poly.fit_transform(x)
         #X为创建的多项式特征
  
 

(4)划分训练集和测试集


         #4划分训练集和测试集
          train_x, test_x, train_y, test_y = \
          cross_validation.train_test_split(x, y,
          test_size=0.3, random_state=0)
         #将所有数据划分为训练集和测试集,test_size表示测试集的比例
         #random_state是随机数种子
  
 

(5)创建回归器,并进行训练


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

(6)画出拟合曲线


         #6画出拟合曲线
         print('score:',score)
          start = 200
          end = 300
         #画一段200到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()
  
 

全部代码


      import numpy as np
      from sklearn.linear_model import Ridge
      #通过sklean.linermodel加载岭回归方法
      #from sklearn import cross_validation
      from sklearn import model_selection
      #加载交叉验证模块,加载matplotilib模块
      import matplotlib.pyplot as plt
      from sklearn.preprocessing import PolynomialFeatures
      #通过..加载..用于创建多项式特征,如ab,a^2,b^2
      def main():
         #2数据加载
          data = np.genfromtxt(r'C:\Users\86493\Desktop\北理工机器学习慕课数据\回归\岭回归.txt', delimiter=',')
         #使用numpy的方法从txt文件中加载数据
          plt.plot(data[:,4])
         #使用plt展示车流量信息,如右图
          plt.show()
         #3数据处理
          x = data[:,:4]
         #X用于保存0-4维数据,即属性
          y = data[:,4]
         #y用于保存第4维数据,即车流量
          poly = PolynomialFeatures(9)
         #用于创建最高次数6次方的多项式特征,多次试验后决定采用6次
          x = poly.fit_transform(x)
         #X为创建的多项式特征
         #4划分训练集和测试集
          train_x, test_x, train_y, test_y = \
          cross_validation.train_test_split(x, y,
          test_size=0.3, random_state=0)
         #将所有数据划分为训练集和测试集,test_size表示测试集的比例
         #random_state是随机数种子
         #5创建回归器,进行训练
          clf = Ridge(alpha=1.0, fit_intercept=True)
         #接下来创建岭回归实例
          clf.fit(train_x, train_y)
         #调用fit函数使用训练集训练回归器
          score = clf.score(test_x, test_y)
         #利用测试集计算回归曲线的拟合优度,clf.score返回值为0.7375
         #拟合优度,用于评价拟合好坏,最大为1,无最小值,当对所有输入都输出一个值时,拟合优度为0
         #6画出拟合曲线
         print('score:',score)
          start = 200
          end = 300
         #画一段200到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()
      if __name__ == '__main__':
          main()
  
 

(7)结果分析

分析结论:预测值和实际值的走势大致相同

文章来源: andyguo.blog.csdn.net,作者:山顶夕景,版权归原作者所有,如需转载,请联系作者。

原文链接:andyguo.blog.csdn.net/article/details/104339854

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

作者其他文章

评论(0

抱歉,系统识别当前为高风险访问,暂不支持该操作

    全部回复

    上滑加载中

    设置昵称

    在此一键设置昵称,即可参与社区互动!

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。