【火炉炼AI】机器学习007-用随机森林构建共享单车需求预测模型

(本文所使用的Python库和版本号: Python 3.5, Numpy 1.14, scikit-learn 0.19, matplotlib 2.2 )

共享单车是最近几年才发展起来的一种便民交通工具,基本上是我等屌丝上班,下班,相亲,泡妞必备神器。本项目拟使用随机森林回归器构建共享单车需求预测模型,从而查看各种不同的条件下,共享单车的需求量。

1. 准备数据集

本次使用的数据集来源于加利福尼亚大学欧文分校(UCI)大学的公开数据集:https://archive.ics.uci.edu/ml/datasets/Bike+Sharing+Dataset,关于本次数据集的各种信息可以参考该网站,同时也可以直接从该网站下载和使用数据集。本次共享单车数据集包含有两个文件,一个是按天来统计的共享单车使用量数据,另一个是按照小时数来统计的使用量。

说句题外话,这个共享单车数据集是在2011年至2012年间收集的,此处的共享单车是采用固定桩形式的单车,类似于中国的永安行,并不是我们目前所看到的满大街的小黄车,小蓝车,摩拜之类。

下载后,将数据集解压到D:\PyProjects\DataSet\SharingBikes中。本数据集总共有17389个样本,每个样本有16列,其中,前两列是样本序号和日期,可以不用考虑,最后三列数据是不同类型的输出结果,最后一列是第十四列和第十五列的和,因此本模型中不考虑第十四列和第十五列。

本数据集16列对应的信息分别为:

如下为分析数据集的主要代码,此处我没有深入研究数据集各个特征列之间的关系。

# 首先分析数据集
dataset_path='D:\PyProjects\DataSet\SharingBikes/day.csv' # 首先只分析day 数据
# 首先加载数据集
raw_df=pd.read_csv(dataset_path,index_col=0)
# print(raw_df.shape)  # (731, 15)
# print(raw_df.head()) # 查看是否正确加载
# print(raw_df.columns)
# 删除不需要的列,第1列,第12,13列
df=raw_df.drop(['dteday','casual','registered'],axis=1)
# print(df.shape) # (731, 12)
# print(df.head()) # 查看没有问题
print(df.info()) # 没有缺失值 第一列为object,需要进行转换
# print(df.columns)# 分隔数据集
dataset=df.as_matrix() # 将pandas转为np.ndarray# 将整个数据集分隔成train set和test set
from sklearn.model_selection import train_test_split
train_set,test_set=train_test_split(dataset,test_size=0.1,random_state=37)
# print(train_set.shape) # (657, 12)
# print(test_set.shape) # (74, 12)
# print(dataset[:3])
复制代码

-------------------------------------输---------出--------------------------------

<class 'pandas.core.frame.DataFrame'> Int64Index: 731 entries, 1 to 731 Data columns (total 12 columns): season 731 non-null int64 yr 731 non-null int64 mnth 731 non-null int64 holiday 731 non-null int64 weekday 731 non-null int64 workingday 731 non-null int64 weathersit 731 non-null int64 temp 731 non-null float64 atemp 731 non-null float64 hum 731 non-null float64 windspeed 731 non-null float64 cnt 731 non-null int64 dtypes: float64(4), int64(8) memory usage: 74.2 KB None

--------------------------------------------完-------------------------------------

########################小**********结###############################

1,从打印的结果可以看出,这个数据集中没有缺失值,且每一列的数据特征都是一致的,故而不需要再额外做这些处理。

2,数据集中season, yr等有7列是int64类型,代表这些数据需要重新转换为独热编码格式,比如对于season中,1=春,2=夏,3=秋,4=冬,需要改成独热编码形成的稀疏矩阵。

#################################################################

2. 构建随机森林回归模型

在第一次尝试时,我没有对原始数据进行任何的特征分析,也没有对数据集进行修改,直接使用随机森林回归模型进行拟合,看看结果怎么样。

# 其次,构建随机森林回归器模型
from sklearn.ensemble import RandomForestRegressor
rf_regressor=RandomForestRegressor()
# rf_regressor=RandomForestRegressor(n_estimators=1000,max_depth=10,min_samples_split=0.5)rf_regressor.fit(train_set[:,:-1],train_set[:,-1]) # 训练模型# 使用测试集来评价该回归模型
predict_test_y=rf_regressor.predict(test_set[:,:-1])import sklearn.metrics as metrics
print('随机森林回归模型的评测结果----->>>')
print('均方误差MSE:{}'.format(round(metrics.mean_squared_error(predict_test_y,test_set[:,-1]),2)))
print('解释方差分:{}'.format(round(metrics.explained_variance_score(predict_test_y,test_set[:,-1]),2)))
print('R平方得分:{}'.format(round(metrics.r2_score(predict_test_y,test_set[:,-1]),2)))
复制代码

-------------------------------------输---------出--------------------------------

随机森林回归模型的评测结果----->>> 均方误差MSE:291769.31 解释方差分:0.92 R平方得分:0.92

--------------------------------------------完-------------------------------------

然后采用(【火炉炼AI】机器学习006-用决策树回归器构建房价评估模型)的方式绘制相对重要性直方图,结果如下:

########################小**********结###############################

1,在没有对数据集进行任何处理的情况下,采用默认的随机森林回归器得到的模型在测试集上的MSE非常大,解释方差分和R2都是0.93,表明模拟的还可以。

2,从相对重要性图中可以看出,温度对共享单车的使用影响最大,这个可以理解,比如冬天太冷,夏天太热时,骑小黄车的人就显著减少。但图中显示年份(yr)是第二个重要因素,这个估计是因为年份只有2011和2012两年所致,要想得到更加可信的结果,还需要更多年份的数据。

#################################################################

注:本部分代码已经全部上传到(我的github)上,欢迎下载。

参考资料:

1, Python机器学习经典实例,Prateek Joshi著,陶俊杰,陈小莉译

【火炉炼AI】机器学习007-用随机森林构建共享单车需求预测模型相关推荐

  1. 随机森林分析共享单车的需求

    随机森林相关API: import sklearn.ensemble as se # 随机森林回归模型 (属于集合算法的一种) # max_depth:决策树最大深度10 # n_estimators ...

  2. 词袋模型 matlab,【火炉炼AI】机器学习051-视觉词袋模型+极端随机森林建立图像分类器...

    [火炉炼AI]机器学习051-视觉词袋模型+极端随机森林建立图像分类器 (本文所使用的Python库和版本号: Python 3.6, Numpy 1.14, scikit-learn 0.19, m ...

  3. 【火炉炼AI】机器学习012-用随机森林构建汽车评估模型及模型的优化提升方法

    [火炉炼AI]机器学习012-用随机森林构建汽车评估模型及模型的优化提升方法 [本文所使用的Python库和版本号]: Python 3.5, Numpy 1.14, scikit-learn 0.1 ...

  4. 【火炉炼AI】机器学习013-用朴素贝叶斯分类器估算个人收入阶层

    [火炉炼AI]机器学习013-用朴素贝叶斯分类器估算个人收入阶层 (本文所使用的Python库和版本号: Python 3.5, Numpy 1.14, scikit-learn 0.19, matp ...

  5. python用numpy和pil处理图像成灰度图_「火炉炼AI」机器学习047-图像的直方图均衡化操作...

    [火炉炼AI]机器学习047-图像的直方图均衡化操作 [火炉炼AI]机器学习047-图像的直方图均衡化操作 (本文所使用的Python库和版本号: Python 3.6, Numpy 1.14, sc ...

  6. 【火炉炼AI】机器学习032-用户之间相似度的计算

    [火炉炼AI]机器学习032-用户之间相似度的计算 (本文所使用的Python库和版本号: Python 3.6, Numpy 1.14, scikit-learn 0.19, matplotlib ...

  7. 【火炉炼AI】机器学习006-用决策树回归器构建房价评估模型

    [火炉炼AI]机器学习006-用决策树回归器构建房价评估模型 (本文所使用的Python库和版本号: Python 3.5, Numpy 1.14, scikit-learn 0.19, matplo ...

  8. 【火炉炼AI】机器学习044-创建隐马尔科夫模型

    [火炉炼AI]机器学习044-创建隐马尔科夫模型 (本文所使用的Python库和版本号: Python 3.6, Numpy 1.14, scikit-learn 0.19, matplotlib 2 ...

  9. 【火炉炼AI】机器学习031-KNN回归器模型的构建

    [火炉炼AI]机器学习031-KNN回归器模型的构建 (本文所使用的Python库和版本号: Python 3.6, Numpy 1.14, scikit-learn 0.19, matplotlib ...

最新文章

  1. 舞伴问题数据结构java_Gale-Shapley算法解决舞伴问题过程详解(C++实现)
  2. java实现ftp文件的上传与下载
  3. java数组交集_java数组的交集和并集
  4. 百度视觉技术部人脸检测方向招聘实习生~北京
  5. android alarmmanager定时任务,AlarmManager 实现定时任务
  6. MLE(最大似然估计)和EM算法
  7. PAT 乙级 1010. 一元多项式求导 (25) Java版
  8. 课时8-1:adams建约束副----齿轮约束
  9. 【计算机网络实验】使用Packet Tracer搭建网络拓扑
  10. FPGA学习——矩阵键盘驱动及数码管显示键值
  11. 2021年G2电站锅炉司炉最新解析及G2电站锅炉司炉作业考试题库
  12. Matlab-16QAM调制与解调 16-QAM星座点图 16-QAM在AWGN信道下的误码率和误比特率性能,仿真值与理论值曲线对比图
  13. css第八课:文本属性(字体,颜色属性)
  14. reason: 'Multiplier is not finite! That's illegal. multiplier:nan' *** First throw call stack:
  15. 麻省理工学院-面向生命科学的深度学习2021
  16. PCL中点云关键点提取
  17. Python读取docx表格中的合并单元格信息
  18. 数值分析——自适应辛普森积分
  19. 阿里mysql待遇_到了2020年,年薪80w的阿里P7+,需要掌握什么样的技术水平?
  20. 狂肝半个月-嵌入式开发学习学习路线+知识汇总

热门文章

  1. SVN Switch
  2. 什么是 ANSI C 和 GNU C
  3. 2019年5月21号总结
  4. Unable to save settings: Failed to save settings. Please restart IntelliJ IDEA
  5. 【转载】C/C++中long long与__int64的区别
  6. Solr嵌套子文档的弊端以及一种替代方式
  7. 从tabBarController的一个item上的控制器跳转到另一个item上的控制器
  8. javaScript Code 用javascript确定每月第二个星期五
  9. Windows Azure开发者任务之五:配置虚拟机的“规模”
  10. Delphi - 对象构造浅析后续