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

【火炉炼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著,陶俊杰,陈小莉译

原文地址:https://www.cnblogs.com/RayDean/p/9764648.html

时间: 2024-10-09 23:17:15

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

【火炉炼AI】机器学习017-使用GridSearch搜索最佳参数组合

[火炉炼AI]机器学习017-使用GridSearch搜索最佳参数组合 (本文所使用的Python库和版本号: Python 3.5, Numpy 1.14, scikit-learn 0.19, matplotlib 2.2 ) 在前面的文章([火炉炼AI]机器学习012-用随机森林构建汽车评估模型及模型的优化提升方法),我们使用了验证曲线来优化模型的超参数,但是使用验证曲线难以同时优化多个参数的取值,只能一个参数一个参数的优化,从而获取每个参数的最优值,但是有时候,一个非常优秀的模型,可能A

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

[火炉炼AI]机器学习006-用决策树回归器构建房价评估模型 (本文所使用的Python库和版本号: Python 3.5, Numpy 1.14, scikit-learn 0.19, matplotlib 2.2 ) 最近几十年,房价一直是中国老百姓心中永远的痛,有人说,中国房价就像女人的无肩带文胸,一半人在疑惑:是什么支撑了它?另一半人在等待:什么时候掉下去? 而女人,永不可能让它掉下来.就算快掉下来了,提一提还是又上去了..... 虽然我们不能预测中国房价什么时候崩盘,但是却可以用机器学

【火炉炼AI】机器学习019-项目案例:使用SVM回归器估算交通流量

[火炉炼AI]机器学习019-项目案例:使用SVM回归器估算交通流量 (本文所使用的Python库和版本号: Python 3.5, Numpy 1.14, scikit-learn 0.19, matplotlib 2.2 ) 我们都知道,SVM是一个很好地分类器,不仅适用于线性分类模型,而且还适用于非线性模型,但是,在另一方面,SVM不仅可以用于解决分类问题,还可以用于解决回归问题. 本项目打算使用SVM回归器来估算交通流量,所使用的方法和过程与我的上一篇文章[火炉炼AI]机器学习018-项

【火炉炼AI】机器学习018-项目案例:根据大楼进出人数预测是否举办活动

[火炉炼AI]机器学习018-项目案例:根据大楼进出人数预测是否举办活动 (本文所使用的Python库和版本号: Python 3.5, Numpy 1.14, scikit-learn 0.19, matplotlib 2.2 ) 我们经常看到办公大楼中人来人往,进进出出,在平时没有什么活动的时候,进出大楼的人数会非常少,而一旦举办有大型商业活动,则人山人海,熙熙攘攘,所以很明显,大楼进出的人数和大楼是否举办活动有很明显的关联,那么,是否可以构建一个模型,通过大楼进出人数来预测该大楼是否在举办

【火炉炼AI】机器学习042-NLP文本的主题建模

[火炉炼AI]机器学习042-NLP文本的主题建模 (本文所使用的Python库和版本号: Python 3.6, Numpy 1.14, scikit-learn 0.19, matplotlib 2.2, NLTK 3.3) 文本的主题建模时用NLP来识别文本文档中隐藏的某种模式的过程,可以发现该文档的隐藏主题,以便对文档进行分析.主题建模的实现过程是,识别出某文本文档中最有意义,最能表征主题的词来实现主题分类,即寻找文本文档中的关键词,通过关键词就可以识别出某文档的隐藏主题. 1. 准备数

【火炉炼AI】机器学习046-图像边缘的检测方法

[火炉炼AI]机器学习046-图像边缘的检测方法 (本文所使用的Python库和版本号: Python 3.6, Numpy 1.14, scikit-learn 0.19, matplotlib 2.2 ) 图像中各种形状的检测时计算机视觉领域中非常常见的技术之一,特别是图像中直线的检测,圆的检测,图像边缘的检测等,下面我们来研究一下如何快速检测图像边缘. 边缘是不同区域的分界线,是周围(局部)像素有显著变化的像素的集合,有幅值与方向两个属性.这个不是绝对的定义,主要记住边缘是局部特征以及周围

【火炉炼AI】机器学习048-Harris检测图像角点

[火炉炼AI]机器学习048-Harris检测图像角点 (本文所使用的Python库和版本号: Python 3.6, Numpy 1.14, scikit-learn 0.19, matplotlib 2.2 ) 角点检测算法大致有三类:基于灰度图像的角点检测,基于二值图像的角点检测,基于轮廓曲线的角点检测.基于灰度图像的角点检测又可分为基于梯度.基于模板和基于模板梯度组合3类方法,其中基于模板的方法主要考虑像素领域点的灰度变化,即图像亮度的变化,将与邻点亮度对比足够大的点定义为角点.常见的基

【火炉炼AI】机器学习050-提取图像的Star特征

[火炉炼AI]机器学习050-提取图像的Star特征 (本文所使用的Python库和版本号: Python 3.6, Numpy 1.14, scikit-learn 0.19, matplotlib 2.2 ) 对于图像的特征点,前面我们讨论过边缘检测方法,Harris角点检测算法等,这些检测算法检测的都是图像的轮廓边缘,而不是内部细节,如果要进一步提取图像内部细节方面的特征,需要用到SIFT特征提取器和Star特征提取器.上一篇我们讲解了SIFT特征提取器,下面我们来介绍Star特征提取器.

【火炉炼AI】深度学习005-简单几行Keras代码解决二分类问题

[火炉炼AI]深度学习005-简单几行Keras代码解决二分类问题 (本文所使用的Python库和版本号: Python 3.6, Numpy 1.14, scikit-learn 0.19, matplotlib 2.2, Keras 2.1.6, Tensorflow 1.9.0) 很多文章和教材都是用MNIST数据集作为深度学习届的"Hello World"程序,但是这个数据集有一个很大的特点:它是一个典型的多分类问题(一共有10个分类),在我们刚刚开始接触深度学习时,我倒是觉得