天天看點

sklearn - 分類算法 -随機森林

随機森林

: 多顆 決策樹的內建學習方法。

內建學習方法

建立多個模型來解決一個問題。模型之間獨立學習和獨立預測。

最後的預測結果按照大多數合并為一個最終預測結果,這個最終的預測結果好于單個模型的預測。

随機森林

=随機,多次的建立決策樹

建立決策樹的過程如下:

有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個決策樹

繼續閱讀