《scikit-learn》随机森林之分类树

至于集成学习方法,我们之前学习了很多的基本理论知识,现在我们进入实战环节。

集成学习包含bagging的随机森林,包括boosting的Adaboost,GBDT,Xgboost等。

bagging方式下,单个学习器之间完全没有联系,都是独立的。
Boosting方式下,则是在前一个学习器的基础上进一步优化。

今天我们先来看看最常见的随机森林中的分类树的用法吧
代码如下,我们把单个决策树和随机森林放在一起运行比较。

from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_wine
from sklearn.model_selection import train_test_split, cross_val_score
import matplotlib.pyplot as plt

# 分类问题举例,加载自带的红酒数据集
wine = load_wine()  # 178个数据,13个属性,三个分类种类。
print(wine.data.shape)
print(wine.target.shape)
print(wine.target_names)  # 所有类别标签地名称
print(wine.feature_names)  # 所有特征属性的名称

# 把红酒数据进行切分,切分成训练集和测试集合,切分比例一般是7:3
data_train, data_test, target_train, target_test = train_test_split(wine.data, wine.target, test_size=0.3)
print(data_train.shape)
print(target_train.shape)
print(data_test.shape)
print(target_test.shape)

# =========================第一组测试:划分训练集和测试集的验证
# 先实例化一颗决策树
clf = DecisionTreeClassifier(criterion='gini', random_state=10)
clf = clf.fit(data_train, target_train)
score = clf.score(data_test, target_test)
print('Signle Tree Score:{}'.format(score))

# 先实例化一个随机森林
tfc = RandomForestClassifier(criterion='gini', random_state=10, n_estimators=10)
tfc = tfc.fit(data_train, target_train)
score = tfc.score(data_test, target_test)
print('Random Forest Score:{}'.format(score))  # 一般性情况下,会比决策树大一些,或者相等.

看到这里,我们看到,代码流程是一样的。很简单就可以用起来了哈。
但是从效果来看呢,我们会发现,经过反复多次运行,发现随机森林的效果似乎要优于单个决策树,大部分情况下都是比决策树要高的。

为了进一步查看,我们使用交叉验证来测试

# ========================第二组测试:进行交叉验证
# 先实例化一颗决策树
clf = DecisionTreeClassifier(criterion='gini', random_state=10)
score_clf = cross_val_score(clf, wine.data, wine.target, cv=10)
print('Signle Tree Mean Score:{}'.format(score_clf.mean()))

# 先实例化一个随机森林
tfc = RandomForestClassifier(criterion='gini', random_state=10, n_estimators=10)
score_rfc = cross_val_score(tfc, wine.data, wine.target, cv=10)
print('Random Forest Mean Score:{}'.format(score_rfc.mean()))  # 一般性情况下,会比决策树大一些,或者相等.

# 画图画出来展示下
plt.plot(range(1, 11), score_clf, label="DecisionTree")
plt.plot(range(1, 11), score_rfc, label="RandomForest")
plt.legend()  # 显示图例
plt.show()

效果如下:
在这里插入图片描述

如果还觉得不够,那么我们继续多次交叉验证,看看平均水平。

# ========================第三组测试:类似地利用学习曲线来选择某个参数,我们不选择参数,进行十次交叉验证看看效果
# 先实例化一个随机森林
scores_clf = []
scores_rfc = []
for i in range(1, 11):
    clf = DecisionTreeClassifier(criterion='gini')
    score_clf = cross_val_score(clf, wine.data, wine.target, cv=10).mean()
    scores_clf.append(score_clf)

    rfc = RandomForestClassifier(criterion='gini', n_estimators=10)
    score_tfc = cross_val_score(rfc, wine.data, wine.target, cv=10).mean()
    scores_rfc.append(score_tfc)

# 画图画出来展示下
plt.plot(range(1, 11), scores_clf, label="DecisionTree")
plt.plot(range(1, 11), scores_rfc, label="RandomForest")
plt.legend()  # 显示图例
plt.show()

效果如下:
在这里插入图片描述

总体看来,随机森林的在不经过参数调节的情况下,确实在平均水平上是比单个决策树要好的。

接下来我们看一下这个参数
采用学习曲线的方式来选择一个合适的参数

# ========================第四组测试:类似地利用学习曲线来选择某个参数,调节 n_estimators 参数
# 先实例化一个随机森林
scores_rfc = []
for i in range(1, 201):
    rfc = RandomForestClassifier(criterion='gini', n_estimators=i)
    score_tfc = cross_val_score(rfc, wine.data, wine.target, cv=10).mean()
    scores_rfc.append(score_tfc)

# 画图画出来展示下
plt.plot(range(1, 201), scores_rfc, label="RandomForest")
plt.legend()  # 显示图例
plt.show()

效果如下:
在这里插入图片描述

接着我们看看效果,发现随着学习器个数的增加,一开始效果是提升的,但是到了后面效果提升的效果就有了一个波动,稳定在某个值,因此,我们需要选择一个合适的学习器个数。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
随机森林(Random Forest)是一种集成学习(Ensemble Learning)方法,它通过构建多个决策来进行分类或回归。scikit-learn是一个流行的Python机器学习库,提供了实现随机森林算法的工具。 在scikit-learn中,可以使用ensemble模块中的RandomForestClassifier进行分类问题,或者使用RandomForestRegressor进行回归问题。随机森林通过随机选择特征子集和样本子集来构建多个决策,然后通过投票或平均的方式来得到最终的预测结果。 使用scikit-learn中的随机森林算法,需要先导入相关的类和函数,然后创建一个随机森林模型对象,并对其进行训练和预测。例如,下面是一个使用随机森林分类器进行分类的示例代码: ```python from sklearn.ensemble import RandomForestClassifier from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split # 加载数据集 data = load_iris() X = data.data y = data.target # 划分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # 创建随机森林分类器 rf = RandomForestClassifier(n_estimators=100) # 训练模型 rf.fit(X_train, y_train) # 预测 predictions = rf.predict(X_test) ``` 这只是一个简单的示例,你可以根据自己的需求进行参数调整和功能扩展。随机森林在处理各种机器学习问题时具有较好的性能和鲁棒性,你可以进一步了解scikit-learn文档中关于RandomForestClassifier和RandomForestRegressor的详细用法和参数设置。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值