隨機(jī)森林算法
隨機(jī)森林(Random Forest)算法 是一種 集成學(xué)習(xí)(Ensemble Learning)方法,它由多個(gè)決策樹組成,是一種分類、回歸和特征選擇的機(jī)器學(xué)習(xí)算法。
在隨機(jī)森林中,每個(gè)決策樹都是獨(dú)立地訓(xùn)練的,每棵樹的建立都是基于隨機(jī)選取的 特征子集 和隨機(jī)選取的 訓(xùn)練樣本集。
- 在分類問(wèn)題中,隨機(jī)森林采用投票的方式來(lái)決定最終分類結(jié)果;
- 在回歸問(wèn)題中,隨機(jī)森林采用平均值的方式來(lái)預(yù)測(cè)結(jié)果。
對(duì)于隨機(jī)森林算法,必須知道的幾個(gè)概念包括:
- 怎樣選取的特征子集以及訓(xùn)練樣本集;
- 我們很清楚決策樹如何對(duì)分類值做出分類處理,然而決策樹如何對(duì)連續(xù)值做出的分類處理?
對(duì)于第一個(gè)問(wèn)題,很好回答和理解,所謂特征子集以及訓(xùn)練樣本集,其實(shí)就是為了防止森林中所有的決策樹的訓(xùn)練集一樣,因?yàn)槿绻麤Q策樹的所有訓(xùn)練集一樣,那就沒有意義建造森林了。而抽取的方法有很多,最簡(jiǎn)單就像從口袋中抽球一樣,隨機(jī)抽出放回;將抽出的球構(gòu)成訓(xùn)練樣本集。
而對(duì)于第二個(gè)問(wèn)題,就需要深思熟慮一下,首先需要理解的是:
-
對(duì)于全都是數(shù)字的訓(xùn)練集數(shù)據(jù)特征值,決策樹在選取劃分特征時(shí)通常會(huì)采用方差(Variance)或均方差(Mean Squared Error)來(lái)衡量特征的重要性,以找到能夠最大化減少樣本方差劃分特征。
-
對(duì)于全都是分類的訓(xùn)練集數(shù)據(jù)特征,決策樹在選取劃分特征時(shí)通常會(huì)采用信息增益(Information Gain)來(lái)衡量特征的重要性,所謂最大信息增益,即最大化減少熵的選擇。
其次,對(duì)于連續(xù)型特征,如體重、身高等等,采用二分法進(jìn)行劃分。具體來(lái)說(shuō),通過(guò)在特征值中選擇一個(gè)分裂點(diǎn),即可以將整個(gè)特征值數(shù)組分為兩類的點(diǎn),通常分裂點(diǎn)的選擇有兩種策略:
- 選擇中位數(shù):一種常見的選擇分裂點(diǎn)的方法是選擇特征值的中位數(shù)作為分裂點(diǎn)。具體來(lái)說(shuō),可以按照該特征值從小到大進(jìn)行排序,然后選擇中間位置上的值作為分裂點(diǎn)。
- 選擇平均值:另一種選擇分裂點(diǎn)的方法是選擇特征值的平均值作為分裂點(diǎn)。具體來(lái)說(shuō),可以計(jì)算該特征值的平均值,并將其作為分裂點(diǎn)。
然后計(jì)算每個(gè)屬性分裂后的哪個(gè)的方差減少值最大,即選擇其作為分類選擇。
下述內(nèi)容將圍繞隨機(jī)森林算法實(shí)現(xiàn)一個(gè)著名的連續(xù)值分類問(wèn)題:即波士頓房?jī)r(jià)預(yù)測(cè)。而實(shí)現(xiàn)分類問(wèn)題,即通過(guò)隨機(jī)森林算法預(yù)測(cè)“鳶尾花”在【機(jī)器學(xué)習(xí)】P24 隨機(jī)森林算法(1) 實(shí)現(xiàn) “鳶尾花” 預(yù)測(cè) 中呈現(xiàn);
隨機(jī)森林算法實(shí)現(xiàn)波士頓房?jī)r(jià)預(yù)測(cè)
波士頓房?jī)r(jià)數(shù)據(jù)與特征:
波士頓房?jī)r(jià)數(shù)據(jù)集是一個(gè)經(jīng)典的回歸問(wèn)題數(shù)據(jù)集,包含了波士頓地區(qū)不同城鎮(zhèn)的房屋價(jià)格及其相關(guān)的屬性數(shù)據(jù)。該數(shù)據(jù)集共有506個(gè)樣本,每個(gè)樣本有13個(gè)屬性,分別是:
- CRIM:城鎮(zhèn)人均犯罪率
- ZN:占地面積超過(guò)2.5萬(wàn)平方英尺的住宅用地比例
- INDUS:城鎮(zhèn)中非零售營(yíng)業(yè)面積的比例
- CHAS:查爾斯河虛擬變量(如果是河流,則為1;否則為0)
- NOX:一氧化氮濃度(每千萬(wàn)分之一)
- RM:每個(gè)住宅的平均房間數(shù)
- AGE:1940年以前建造的自有住房的比例
- DIS:到波士頓五個(gè)就業(yè)中心的加權(quán)距離
- RAD:徑向公路的可達(dá)性指數(shù)
- TAX:每10,000美元的全值財(cái)產(chǎn)稅率
- PTRATIO:城鎮(zhèn)中的學(xué)生與教師比例
- B:黑人的比例(1000(Bk - 0.63)^ 2),其中Bk是城鎮(zhèn)中黑人的比例
- LSTAT:人口中地位低下者的比例
下面是通過(guò)pandas展示前十條數(shù)據(jù)的代碼示例:
import pandas as pd
# 加載波士頓房?jī)r(jià)數(shù)據(jù)集
from sklearn.datasets import load_boston
boston = load_boston()
df = pd.DataFrame(boston.data, columns=boston.feature_names)
df['PRICE'] = boston.target
df.insert(0, "Index", df.index+1)
print(df.head(10).to_string(index=False))
隨機(jī)森林預(yù)測(cè)波士頓房?jī)r(jià)的操作步驟:
- 首先導(dǎo)入了需要的庫(kù)和數(shù)據(jù)集;
- 然后將數(shù)據(jù)集拆分為訓(xùn)練集和測(cè)試集;
- 接下來(lái),創(chuàng)建一個(gè)包含10個(gè)決策樹的隨機(jī)森林分類器
n_estimators=10
,并使用訓(xùn)練集擬合模型; - 需要注意的是,因?yàn)椴ㄊ款D房?jī)r(jià)數(shù)據(jù)是一個(gè)線性回歸數(shù)據(jù),并非分類數(shù)據(jù),所以要使用
RandomForestRegressor
; - 然后使用測(cè)試集預(yù)測(cè)結(jié)果,并計(jì)算模型的均方誤差。
from sklearn.ensemble import RandomForestRegressor
from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
# 加載 boston 數(shù)據(jù)集
boston = load_boston()
X, y = boston.data, boston.target
# 將數(shù)據(jù)集拆分為訓(xùn)練集和測(cè)試集
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42)
# 創(chuàng)建隨機(jī)森林回歸器
rf = RandomForestRegressor(n_estimators=10, random_state=42)
# 使用訓(xùn)練集擬合模型
rf.fit(X_train, y_train)
# # # 獲取每個(gè)決策樹的預(yù)測(cè)結(jié)果
tree_predictions = []
for tree in rf.estimators_:
tree_predictions.append(tree.predict(X_test))
# 預(yù)測(cè)測(cè)試集
y_pred = rf.predict(X_test)
# # # 打印每個(gè)決策樹的前十個(gè)測(cè)試案例的預(yù)測(cè)結(jié)果
for i, tree_prediction in enumerate(tree_predictions):
print(f"Tree {i} predictions:", tree_prediction[:10])
# # # 打印隨機(jī)森林的前十個(gè)測(cè)試案例的預(yù)測(cè)結(jié)果
print("預(yù)測(cè)結(jié)果為:", y_pred[:10])
print("實(shí)際結(jié)果為:", y_test[:10])
# 計(jì)算模型的均方誤差
mse = mean_squared_error(y_test, y_pred)
print("MSE:", mse)
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-429345.html
當(dāng)然,最后可通過(guò)輸入十三個(gè)屬性來(lái)獲取預(yù)測(cè)的房?jī)r(jià):文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-429345.html
# 預(yù)測(cè)房?jī)r(jià)
new_data = [[0.03, 18, 2.31, 0, 0.54, 6.57, 89.8, 2.5052, 1, 296, 15.3, 394.72, 8.23]] # 新樣本的特征值
predicted_price = rf.predict(new_data)
print("Predicted price:", predicted_price)
到了這里,關(guān)于【機(jī)器學(xué)習(xí)】P25 隨機(jī)森林算法(2) 實(shí)現(xiàn) “波士頓房?jī)r(jià)” 預(yù)測(cè)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!