RandomForestRegressor中文叫做隨機(jī)森林回歸模型咐扭,是一種常用的集成模型沪斟。
2018年8月27日筆記
sklearn官方英文用戶使用指南:https://sklearn.org/user_guide.html
sklearn翻譯中文用戶使用指南:http://sklearn.apachecn.org/cn/0.19.0/user_guide.html
本文使用的數(shù)據(jù)集是波士頓房價(jià)數(shù)據(jù)集皮胡,可以使用sklearn,datasets庫中的load_boston方法直接獲取數(shù)據(jù)叉信。
0.打開jupyter notebook
不知道怎么打開jupyter notebook的朋友請(qǐng)查看我的入門指南文章:http://www.reibang.com/p/bb0812a70246
1.準(zhǔn)備數(shù)據(jù)
閱讀此篇文章的基礎(chǔ)是已經(jīng)閱讀了作者的上一篇文章《基于LinearRegression的波士頓房價(jià)預(yù)測(cè)》米辐。
文章鏈接:http://www.reibang.com/p/f828eae005a1
加載數(shù)據(jù)集中的預(yù)測(cè)目標(biāo)值栓始。
from sklearn.datasets import load_boston
y = load_boston().target
如果閱讀過上一篇文章务冕,讀者應(yīng)該知道特征提取后的數(shù)據(jù)處理主要是對(duì)數(shù)據(jù)進(jìn)行分箱,從而產(chǎn)生新的字段幻赚。
將數(shù)據(jù)處理的過程封裝成函數(shù)禀忆,代碼如下:
def dataProcessing(df):
field_cut = {
'CRIM' : [0,10,20, 100],
'ZN' : [-1, 5, 18, 20, 40, 80, 86, 100],
'INDUS' : [-1, 7, 15, 23, 40],
'NOX' : [0, 0.51, 0.6, 0.7, 0.8, 1],
'RM' : [0, 4, 5, 6, 7, 8, 9],
'AGE' : [0, 60, 80, 100],
'DIS' : [0, 2, 6, 14],
'RAD' : [0, 5, 10, 25],
'TAX' : [0, 200, 400, 500, 800],
'PTRATIO' : [0, 14, 20, 23],
'B' : [0, 100, 350, 450],
'LSTAT' : [0, 5, 10, 20, 40]
}
df = df[load_boston().feature_names].copy()
cut_df = pd.DataFrame()
for field in field_cut.keys():
cut_series = pd.cut(df[field], field_cut[field], right=True)
onehot_df = pd.get_dummies(cut_series, prefix=field)
cut_df = pd.concat([cut_df, onehot_df], axis=1)
new_df = pd.concat([df, cut_df], axis=1)
return new_df
調(diào)用函數(shù)dataProcessing形成新的特征矩陣,代碼如下:
import pandas as pd
df = pd.DataFrame(load_boston().data, columns=load_boston().feature_names)
new_df = dataProcessing(df)
print(new_df.columns)
new_df.head()
上面一段代碼的運(yùn)行結(jié)果如下圖所示:
將特征處理后的特征矩陣賦值給變量X落恼,代碼如下:
X = new_df.values
2.清除異常值
波士頓房價(jià)預(yù)測(cè)是kaggle網(wǎng)站上2016年的比賽箩退。
網(wǎng)上有資料顯示有部分預(yù)測(cè)目標(biāo)異常值為50,所以我們刪除具有此異常值的樣本佳谦。
代碼如下:
X = new_df.values
y = load_boston().target
print(X.shape)
X = X[y!=50]
y = y[y!=50]
print(X.shape)
上面一段代碼的運(yùn)行結(jié)果如下圖所示:
從上圖中可以看出戴涝,特征矩陣X的行數(shù)由506變成了490。
3.決策樹回歸模型
使用決策樹回歸模型做回歸預(yù)測(cè)钻蔑,并使用交叉驗(yàn)證查看模型得分啥刻。
調(diào)用sklearn.tree庫的DecisionTreeRegressor方法實(shí)例化模型對(duì)象。
調(diào)用sklearn.model_selection庫的KFold方法實(shí)例化交叉驗(yàn)證對(duì)象矢棚。
調(diào)用sklearn.model_selection庫的cross_val_score方法做交叉驗(yàn)證郑什。
cross_val_score方法需要4個(gè)參數(shù),第1個(gè)參數(shù)是模型對(duì)象蒲肋,第2個(gè)參數(shù)是特征矩陣X蘑拯,第3個(gè)參數(shù)是預(yù)測(cè)目標(biāo)值y钝满,第4個(gè)關(guān)鍵字參數(shù)cv可以為整數(shù)或者交叉驗(yàn)證對(duì)象,此處因?yàn)闃颖緮?shù)只有506個(gè)申窘,所以得指定交叉驗(yàn)證對(duì)象弯蚜,而且實(shí)例化交叉驗(yàn)證對(duì)象的時(shí)候,必須設(shè)置關(guān)鍵字參數(shù)shuffle=True剃法,如果不進(jìn)行設(shè)置碎捺,會(huì)發(fā)生嚴(yán)重的錯(cuò)誤,讀者可以自己嘗試一下贷洲。
從官方文檔查看cross_val_score方法如何使用的鏈接:http://sklearn.apachecn.org/cn/0.19.0/modules/generated/sklearn.model_selection.cross_val_score.html#sklearn.model_selection.cross_val_score
調(diào)用決策樹回歸模型的代碼如下:
from sklearn.ensemble import RandomForestRegressor
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
randomForest_model = RandomForestRegressor()
kf = KFold(n_splits=5, shuffle=True)
score_ndarray = cross_val_score(randomForest_model, X, y, cv=kf)
print(score_ndarray)
print(score_ndarray.mean())
上面一段代碼的運(yùn)行結(jié)果如下:
[0.72204027 0.74381333 0.78099897 0.74281036 0.71886066]
0.741704717235011
4.隨機(jī)森林回歸模型
使用隨機(jī)森林回歸模型做回歸預(yù)測(cè)收厨,并使用交叉驗(yàn)證查看模型得分。
調(diào)用sklearn.ensemble庫的RandonForestRegressor方法實(shí)例化模型對(duì)象优构。
調(diào)用sklearn.model_selection庫的KFold方法實(shí)例化交叉驗(yàn)證對(duì)象诵叁。
調(diào)用sklearn.model_selection庫的cross_val_score方法做交叉驗(yàn)證。
隨機(jī)森林回歸模型的代碼如下:
from sklearn.ensemble import RandomForestRegressor
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
randomForest_model = RandomForestRegressor()
kf = KFold(n_splits=5, shuffle=True)
score_ndarray = cross_val_score(randomForest_model, X, y, cv=kf)
print(score_ndarray)
print(score_ndarray.mean())
上面一段代碼的運(yùn)行結(jié)果如下:
[0.86489282 0.8010495 0.85862078 0.85851694 0.86895527]
0.8504070609409359
5.結(jié)論
隨機(jī)森林是多個(gè)決策樹融合的集成模型钦椭,按照常理肯定會(huì)比單個(gè)決策樹效果好拧额。
使用隨機(jī)森林回歸模型可以取得較好的回歸效果,比使用單個(gè)決策樹回歸模型提升了11%左右的準(zhǔn)確率彪腔。