当前位置:   article > 正文

基于线性回归的交叉路口车流量数据预测模型

sklearn车流量预测

菜鸟,刚入机器学习不久,数据是导师给的

  1. import pandas as pd
  2. import numpy as np
  3. import matplotlib.pyplot as plt
  4. from sklearn.linear_model import LinearRegression
  5. from sklearn import metrics
  6. from sklearn.cross_validation import KFold
  7. def mape_cal(originalValue, predictValue, length):
  8. "mape值计算"
  9. temp = (originalValue - predictValue) / originalValue
  10. mape_cal = sum(pd.Series(temp).abs()) / length
  11. return mape_cal
  12. data = pd.read_csv("east训练集.csv")
  13. data2 = pd.read_csv("测试集(1).csv")
  14. cols = data.shape[1] # 获取列数
  15. row = data.shape[0]
  16. predictors = ['x1', 'x2', 'x3', 'x4', 'x5']
  17. X_train = data.values[:, 0:cols-1] # 获取最后一列之前的所有数据
  18. y_train = data.values[:, cols-1:cols]
  19. X_test = data2.values[:, 0:cols-1] # 获取最后一列之前的所有数据
  20. y_test = data2.values[:, cols-1:cols]
  21. lr = LinearRegression()
  22. kf = KFold(row, n_folds=3, random_state=1)
  23. predictions = []
  24. # kf:一个存储所有随机组合的数据集的列表
  25. for train, test in kf:
  26. # 取训练集的特征数据
  27. train_predictors = (data[predictors].loc[train, :])
  28. # 取训练集的标记数据
  29. train_target = data['y'].loc[train]
  30. # 模型训练
  31. lr.fit(train_predictors, train_target)
  32. # 预测并返回预测值
  33. test_predictions = lr.predict(data2[predictors])
  34. predictions.append(test_predictions)
  35. y_predict = np.array(predictions).mean(axis=0)
  36. print(y_predict)
  37. #模型拟合测试集
  38. print("-----预测结果-----")
  39. # y_predict = lr.predict(X_test)
  40. print("均方差MSE:",metrics.mean_squared_error(y_test, y_predict))
  41. # 用scikit-learn计算均方根差RMSE
  42. print("均根方差RMSE:",np.sqrt(metrics.mean_squared_error(y_test, y_predict)))
  43. print("MAE:", metrics.mean_absolute_error(y_test, y_predict))
  44. mapeValue = mape_cal(y_test.ravel(), y_predict.ravel(), X_test.shape[0])
  45. print("mape值:", mapeValue)
  46. temp = pd.Series(y_predict.ravel())
  47. temp.to_csv('test2.csv')
  48. fig = plt.figure(figsize=(15, 7))
  49. ax1 = fig.add_subplot(2, 1, 1)
  50. ax1.scatter(y_test, y_predict, linewidths=4, c='blue')
  51. ax1.plot([y_test.min(), y_test.max()], [y_test.min(), y_test.max()], 'k--', lw=4, c='red')
  52. ax1.set_xlabel('Measured')
  53. ax1.set_ylabel('Predicted')
  54. ax3 = fig.add_subplot(2, 1, 2)
  55. ax3.plot(range(X_test.shape[0]), y_predict, c='red', label='predictValue', lw=2)
  56. ax3.plot(range(X_test.shape[0]), y_test, c='blue', label='originalValue', lw=2)
  57. ax3.legend(loc='upper left')
  58. plt.show()

  预测结果:

  1. -----预测结果-----
  2. 均方差MSE: 1413.927330961531
  3. 均根方差RMSE: 37.60222507992753
  4. MAE: 30.085778687356473
  5. mape值: 0.18161724802211374

 

  

转载于:https://www.cnblogs.com/octopuszy/p/9657171.html

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/796537
推荐阅读
相关标签
  

闽ICP备14008679号