随機森林
: 多顆 決策樹的內建學習方法。
随機森林
內建學習方法
:
建立多個模型來解決一個問題。模型之間獨立學習和獨立預測。
最後的預測結果按照大多數合并為一個最終預測結果,這個最終的預測結果好于單個模型的預測。
随機森林
=随機,多次的建立決策樹
建立決策樹的過程如下:
有N個樣本,M個特征
每次從樣本集合裡随機選1個樣本,重複N次。 抽樣有放回。(會出現重複抽取到樣本)
随機在M個特征裡面,選出m個特征(m<<M)
(樹之間的樣本集合,特征都是不同的)
核心思想:随機有放回的抽樣!!bootstrap
如果你訓練了150個樹, 其中有104個樹的結果是True, 46顆樹的結果是False, 那麼最終結果會是True.
api :
from sklearn.ensemble import RandomForestClassifier
RandomForestClassifier(n_estimators=122,criterion=“gini”,max_depth=22,max_features=“auto”,bootstrapestimators=True)
決策樹個數,基尼系數,最大樹深度,最大選擇特征的數量,是否有放回
案例 :網格調優,預測泰坦尼克号生存。
from sklearn.model_selection import GridSearchCV
from sklearn.feature_extraction import DictVectorizer
import pandas as pd
from sklearn.ensemble import RandomForestClassifier
def randomforest():
data = pd.read_csv('../taitanlike.txt')
# print(data.info())
data['age'] = data['age'].fillna(data['age'].mean())
x = data[['pclass','age','sex']]
y = data['survived']
print(x)
# 特征工程
x = x.to_dict(orient='records')
dv = DictVectorizer(sparse=False)
x = dv.fit_transform(x)
x_train, x_test, y_train, y_test = train_test_split(x, y, train_size=0.8)
# 訓練模型
rfc = RandomForestClassifier()
para ={'n_estimators':[88,99,100,111,122,120],'max_depth':[8,9,10,13,14]}
gscv = GridSearchCV(rfc,param_grid=para,cv=2)
gscv.fit(x_train,y_train)
predict = gscv.predict(x_test)
score = gscv.score(x_test,y_test)
print(predict)
print(score)
print(gscv.best_params_)
randomforest()
0 1 0 0 1 0 1 0 0 0 0 1 0 0 0 0 0 1 0 1 0 1 0 0 1 0 0 0 0 1 0 0 0 0 0 0 1
1 1 1 0]
0.8288973384030418
{'max_depth': 8, 'n_estimators': 120}
最佳 8層, 120個決策樹