Python sklearn 随机森林(一)

1. 集成学习

集成学习的目标:通过考虑多个评估器的建模结果,汇总后得到一个综合的结果,以此来获得比单个模型更好的回归或分类表现。

集成学习的分类:装袋法(Bagging)、提升法(Boosting)、Stacking.

  • 装袋法的核心思想是构建多个相互独立的分类器,然后对多个分类器的表现进行平行或多数表决原则来决定集成评估器的结果。典型的代表是Randon Forest.
  • 提升法中,基评估器是相关的,模型是有顺序的,核心思想是结合弱评估器的力量一一对难以评估的样本进行预测,代表模型有Adaboost和梯度提升树。

2. sklearn 模块中的集成算法模块 ensemble

与随机森林相关的:

  • ensemble.RandomForestClassifier
  • ensemble.RandomForestRegressor

3. RandomForestClassifier

  • 比较DecisionTreeClassifier和RandomForest
  • n_estimators的学习曲线
from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import load_wine
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import cross_val_score
import matplotlib.pyplot as plt

wine = load_wine()
rfc = RandomForestClassifier(n_estimators=25)
rfc_s = cross_val_score(rfc, wine.data, wine.target, cv=10)

clf = DecisionTreeClassifier()
clf_s = cross_val_score(clf, wine.data, wine.target, cv=10)

plt.plot(range(1, 11), rfc_s, label="Random Forest")
plt.plot(range(1, 11), clf_s, label="Decision Tree")
plt.legend()
plt.show()

# n_estimators学习曲线
result = []
for i in range(200):
    rfc = RandomForestClassifier(n_estimators=i+1, n_jobs=-1)
    # 十折交叉验证,每次求均值
    rfc_s = cross_val_score(rfc,wine.data, wine.target, cv=10).mean()
    result.append(rfc_s)

# 输出最高精的值,以及最高精度时树颗数
print(max(result), result.index(max(result))+1)

plt.plot(range(1, 201), result, label="Random Forest")
plt.legend()   # 显示图例
plt.show()

Python sklearn 随机森林(一)_第1张图片Python sklearn 随机森林(一)_第2张图片

 

 4. 为什么RandomForest比DecisionTree好

假设RandomForest的参数n_estimators=15,根据少数服从多数的原则,至少要有8棵树分类正确,随机森林的结果才会正确。单独一颗决策树在红酒数据集的分类正确率大约为85%,那么随机森林的分类错误率可以计算为:

import numpy as np
from scipy.special import comb
error_rate = np.array([comb(15, i)*(0.15**i)*((1-0.15)**(15-i)) for i in range(8, 16)]).sum()
print(error_rate)

输出结果为: 0.0006096068076879993,分类错误率非常低。

随机森林中也有random_state参数,控制的是生成森林的模式,而非像决策树中一样控制生成树。

注:学习内容自菜菜的sklearn课堂

你可能感兴趣的:(PYTHON学习)