【火爐煉AI】機(jī)器學(xué)習(xí)007-用隨機(jī)森林構(gòu)建共享單車需求預(yù)測模型

【火爐煉AI】機(jī)器學(xué)習(xí)007-用隨機(jī)森林構(gòu)建共享單車需求預(yù)測模型

(本文所使用的Python庫和版本號(hào): Python 3.5, Numpy 1.14, scikit-learn 0.19, matplotlib 2.2 )

共享單車是最近幾年才發(fā)展起來的一種便民交通工具,基本上是我等屌絲上班,下班,相親历谍,泡妞必備神器。本項(xiàng)目擬使用隨機(jī)森林回歸器構(gòu)建共享單車需求預(yù)測模型涯雅,從而查看各種不同的條件下景埃,共享單車的需求量跪帝。


1. 準(zhǔn)備數(shù)據(jù)集

本次使用的數(shù)據(jù)集來源于加利福尼亞大學(xué)歐文分校(UCI)大學(xué)的公開數(shù)據(jù)集:https://archive.ics.uci.edu/ml/datasets/Bike+Sharing+Dataset描函,關(guān)于本次數(shù)據(jù)集的各種信息可以參考該網(wǎng)站崎苗,同時(shí)也可以直接從該網(wǎng)站下載和使用數(shù)據(jù)集狐粱。本次共享單車數(shù)據(jù)集包含有兩個(gè)文件,一個(gè)是按天來統(tǒng)計(jì)的共享單車使用量數(shù)據(jù)胆数,另一個(gè)是按照小時(shí)數(shù)來統(tǒng)計(jì)的使用量肌蜻。

說句題外話,這個(gè)共享單車數(shù)據(jù)集是在2011年至2012年間收集的幅慌,此處的共享單車是采用固定樁形式的單車宋欺,類似于中國的永安行轰豆,并不是我們目前所看到的滿大街的小黃車胰伍,小藍(lán)車,摩拜之類酸休。

下載后骂租,將數(shù)據(jù)集解壓到D:\PyProjects\DataSet\SharingBikes中。本數(shù)據(jù)集總共有17389個(gè)樣本斑司,每個(gè)樣本有16列渗饮,其中,前兩列是樣本序號(hào)和日期宿刮,可以不用考慮互站,最后三列數(shù)據(jù)是不同類型的輸出結(jié)果,最后一列是第十四列和第十五列的和僵缺,因此本模型中不考慮第十四列和第十五列胡桃。

image

本數(shù)據(jù)集16列對(duì)應(yīng)的信息分別為:

image

如下為分析數(shù)據(jù)集的主要代碼,此處我沒有深入研究數(shù)據(jù)集各個(gè)特征列之間的關(guān)系磕潮。

# 首先分析數(shù)據(jù)集
dataset_path='D:\PyProjects\DataSet\SharingBikes/day.csv' # 首先只分析day 數(shù)據(jù)
# 首先加載數(shù)據(jù)集
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,需要進(jìn)行轉(zhuǎn)換
# print(df.columns)

# 分隔數(shù)據(jù)集
dataset=df.as_matrix() # 將pandas轉(zhuǎn)為np.ndarray

# 將整個(gè)數(shù)據(jù)集分隔成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

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

########################小**********結(jié)###############################

1自脯,從打印的結(jié)果可以看出之景,這個(gè)數(shù)據(jù)集中沒有缺失值,且每一列的數(shù)據(jù)特征都是一致的膏潮,故而不需要再額外做這些處理锻狗。

2,數(shù)據(jù)集中season焕参, yr等有7列是int64類型屋谭,代表這些數(shù)據(jù)需要重新轉(zhuǎn)換為獨(dú)熱編碼格式,比如對(duì)于season中龟糕,1=春桐磁,2=夏,3=秋讲岁,4=冬我擂,需要改成獨(dú)熱編碼形成的稀疏矩陣衬以。

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


2. 構(gòu)建隨機(jī)森林回歸模型

在第一次嘗試時(shí),我沒有對(duì)原始數(shù)據(jù)進(jìn)行任何的特征分析校摩,也沒有對(duì)數(shù)據(jù)集進(jìn)行修改看峻,直接使用隨機(jī)森林回歸模型進(jìn)行擬合,看看結(jié)果怎么樣衙吩。

# 其次互妓,構(gòu)建隨機(jī)森林回歸器模型
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]) # 訓(xùn)練模型

# 使用測試集來評(píng)價(jià)該回歸模型
predict_test_y=rf_regressor.predict(test_set[:,:-1])

import sklearn.metrics as metrics
print('隨機(jī)森林回歸模型的評(píng)測結(jié)果----->>>')
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)))

-------------------------------------輸---------出--------------------------------

隨機(jī)森林回歸模型的評(píng)測結(jié)果----->>>
均方誤差MSE:291769.31
解釋方差分:0.92
R平方得分:0.92

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

然后采用(【火爐煉AI】機(jī)器學(xué)習(xí)006-用決策樹回歸器構(gòu)建房價(jià)評(píng)估模型)的方式繪制相對(duì)重要性直方圖,結(jié)果如下:

image

########################小**********結(jié)###############################

1坤塞,在沒有對(duì)數(shù)據(jù)集進(jìn)行任何處理的情況下冯勉,采用默認(rèn)的隨機(jī)森林回歸器得到的模型在測試集上的MSE非常大,解釋方差分和R2都是0.93摹芙,表明模擬的還可以灼狰。

2,從相對(duì)重要性圖中可以看出浮禾,溫度對(duì)共享單車的使用影響最大交胚,這個(gè)可以理解,比如冬天太冷盈电,夏天太熱時(shí)蝴簇,騎小黃車的人就顯著減少。但圖中顯示年份(yr)是第二個(gè)重要因素匆帚,這個(gè)估計(jì)是因?yàn)槟攴葜挥?011和2012兩年所致熬词,要想得到更加可信的結(jié)果,還需要更多年份的數(shù)據(jù)卷扮。

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


注:本部分代碼已經(jīng)全部上傳到(我的github)上荡澎,歡迎下載。

參考資料:

1, Python機(jī)器學(xué)習(xí)經(jīng)典實(shí)例晤锹,Prateek Joshi著摩幔,陶俊杰,陳小莉譯

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末鞭铆,一起剝皮案震驚了整個(gè)濱河市或衡,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌车遂,老刑警劉巖封断,帶你破解...
    沈念sama閱讀 221,888評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異舶担,居然都是意外死亡坡疼,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,677評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門衣陶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來柄瑰,“玉大人闸氮,你說我怎么就攤上這事〗陶矗” “怎么了蒲跨?”我有些...
    開封第一講書人閱讀 168,386評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長授翻。 經(jīng)常有香客問我或悲,道長,這世上最難降的妖魔是什么堪唐? 我笑而不...
    開封第一講書人閱讀 59,726評(píng)論 1 297
  • 正文 為了忘掉前任巡语,我火速辦了婚禮,結(jié)果婚禮上羔杨,老公的妹妹穿的比我還像新娘捌臊。我一直安慰自己杨蛋,他們只是感情好兜材,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,729評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著逞力,像睡著了一般曙寡。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上寇荧,一...
    開封第一講書人閱讀 52,337評(píng)論 1 310
  • 那天举庶,我揣著相機(jī)與錄音,去河邊找鬼揩抡。 笑死户侥,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的峦嗤。 我是一名探鬼主播蕊唐,決...
    沈念sama閱讀 40,902評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼烁设!你這毒婦竟也來了替梨?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,807評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤装黑,失蹤者是張志新(化名)和其女友劉穎副瀑,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體恋谭,經(jīng)...
    沈念sama閱讀 46,349評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡糠睡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,439評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了疚颊。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片狈孔。...
    茶點(diǎn)故事閱讀 40,567評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡滞谢,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出除抛,到底是詐尸還是另有隱情狮杨,我是刑警寧澤,帶...
    沈念sama閱讀 36,242評(píng)論 5 350
  • 正文 年R本政府宣布到忽,位于F島的核電站橄教,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏喘漏。R本人自食惡果不足惜护蝶,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,933評(píng)論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望翩迈。 院中可真熱鬧持灰,春花似錦、人聲如沸负饲。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,420評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽返十。三九已至妥泉,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間洞坑,已是汗流浹背盲链。 一陣腳步聲響...
    開封第一講書人閱讀 33,531評(píng)論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留迟杂,地道東北人刽沾。 一個(gè)月前我還...
    沈念sama閱讀 48,995評(píng)論 3 377
  • 正文 我出身青樓,卻偏偏與公主長得像排拷,于是被迫代替她去往敵國和親侧漓。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,585評(píng)論 2 359