Machine Learning with Scikit-Learn and Tensorflow 7.5 随机森林

时间:2022-06-23 12:47:50

书籍信息
Hands-On Machine Learning with Scikit-Learn and Tensorflow
出版社: O’Reilly Media, Inc, USA
平装: 566页
语种: 英语
ISBN: 1491962291
条形码: 9781491962299
商品尺寸: 18 x 2.9 x 23.3 cm
ASIN: 1491962291

系列博文为书籍中文翻译
代码以及数据下载:https://github.com/ageron/handson-ml

随机森林是决策树的集成,通常根据bagging的思想训练(有时根据pasting的思想训练),max_samples通常是训练数据的规模。作为BaggingClassifier/BaggingRegressor的替代,我们可以使用更加方便高效的RandomForestClassifier/RandomForestRegressor。

from sklearn.ensemble import RandomForestClassifier
rnd_clf = RandomForestClassifier(n_estimators=500, max_leaf_nodes=16, n_jobs=-1, random_state=42)
rnd_clf.fit(X_train, y_train)
y_pred_rf = rnd_clf.predict(X_test)

RandomForestClassifier拥有DecisionTreeClassifier(控制决策树训练)和BaggingClassifier的大部分参数(控制模型集成)

注释:
缺失的参数包括splitter(强制random),presort(强制False),max_samples(强制1.0),base_estimator(强制DecisionTreeClassifier)

随机森林在训练决策树分裂结点时不是从所有特征中寻找最优的特征,而是从部分特征中寻找最优的特征。能够提升模型多样性,从而增加偏差,减少方差,通常,训练的效果能够得到提升。

下面的BaggingClassifier和上面的RandomForestClassifier类似。

bag_clf = BaggingClassifier(
        DecisionTreeClassifier(splitter="random", max_leaf_nodes=16, random_state=42),
        n_estimators=500, max_samples=1.0, bootstrap=True,
        n_jobs=-1, random_state=42
    )
bag_clf.fit(X_train, y_train)
y_pred = bag_clf.predict(X_test)
# almost identical predictions
# output
# 0.976