集成学习Bagging并行策略之随机森林+树模型特征提取!

第一部分:基础知识了解

集成学习Bagging中其实内置使用的分类器就是决策树 base_estimator=DecisionTreeClassifier(),我们下面通过对比单纯的Bagging和Bagging引入随机森林的效果之间的对比。

第二部分:代码实现(集成学习)

(1)导包

#第一部分:导包
import numpy as np
import matplotlib.pyplot as plt

(2)创建数据集

#第二部分:创建数据集
from sklearn.datasets import make_moons
x, y = make_moons(
    n_samples=1000,
    noise=0.4,
    random_state=20
)
plt.scatter(x[:, 0], x[:, 1], c=y, s=10)
plt.show()

(3)使用bagging并行训练

#第三部分:使用bagging并行训练
from sklearn.ensemble import BaggingClassifier
from sklearn.tree import DecisionTreeClassifier

bagging = BaggingClassifier(
    base_estimator=DecisionTreeClassifier(),
    n_estimators=100,
    bootstrap=True,
    max_samples=500,
    oob_score=True,
    n_jobs=-1,
    random_state=20
)
bagging.fit(x, y)
print(bagging.oob_score_)

(4)使用bagging+随机森林的策略

#第三部分:使用bagging+随机森林并行训练
from sklearn.ensemble import RandomForestClassifier
rf_clf = RandomForestClassifier(
    n_estimators=100,
    max_samples=500,
    max_leaf_nodes=16,
    oob_score=True,
    n_jobs=-1,
    random_state=20
)
rf_clf.fit(x, y)
print(rf_clf.oob_score_)

第三部分:随机森林之树模型特征提取排序

我们以鸢尾花数据集为例,这个数据集里面刚好有4个特征属性值,我们先用随机森林实现分类效果,然后再通过使用树模型特征选取的方法来输出这四个特征的重要性排名:

(1)导包

#第一部分:导包
import numpy as np
from matplotlib import pyplot as plt
from sklearn import datasets
from sklearn.ensemble import RandomForestClassifier

(2)获取数据集

#第二部分:创建数据集
iris = datasets.load_iris()
data_X = iris.data
data_y = iris.target

(3)使用随机森林训练模型

#第三部分:创建随机森林
rf_clf = RandomForestClassifier(
    n_estimators=100,
    max_leaf_nodes=16,
    oob_score=True,
    n_jobs=-1,
    random_state=20
)

(4)输出特征重要性排序

#第四部分:进行树模型特征重要性排序
rf_clf.fit(data_X, data_y)
print(rf_clf.feature_importances_)

(5)可视化展示重要性特征排序

#第五部分:可视化展示模型特征重要性
labels = np.array(iris.feature_names)
importances = rf_clf.feature_importances_
indices = np.argsort(importances)[::-1]

plt.bar(range(data_X.shape[1]), importances[indices], color='lightblue', align='center')
plt.xticks(range(data_X.shape[1]), labels[indices], rotation=70)

plt.xlim([-1, data_X.shape[1]])
plt.tight_layout()
plt.show()

(6)完整pycharm代码汇总

#第一部分:导包
import numpy as np
from matplotlib import pyplot as plt
from sklearn import datasets
from sklearn.ensemble import RandomForestClassifier
#第二部分:创建数据集
iris = datasets.load_iris()
data_X = iris.data
data_y = iris.target
#第三部分:创建随机森林
rf_clf = RandomForestClassifier(
    n_estimators=100,
    max_leaf_nodes=16,
    oob_score=True,
    n_jobs=-1,
    random_state=20
)
#第四部分:进行树模型特征重要性排序
rf_clf.fit(data_X, data_y)
print(rf_clf.feature_importances_)
#第五部分:可视化展示模型特征重要性
labels = np.array(iris.feature_names)
importances = rf_clf.feature_importances_
indices = np.argsort(importances)[::-1]

plt.bar(range(data_X.shape[1]), importances[indices], color='lightblue', align='center')
plt.xticks(range(data_X.shape[1]), labels[indices], rotation=70)

plt.xlim([-1, data_X.shape[1]])
plt.tight_layout()
plt.show()

第四部分:随机森林之Extra-trees

(1)基本含义

它是随机森林的一个扩展变体;

使用随机的特征和随机的阈值进行节点划分;

进一步提高模型的随机性;

同时,它的训练效果更快!

①核心代码实现

#第三部分:使用bagging+随机森林并行训练+extra-trees
from sklearn.ensemble import ExtraTreesClassifier

et_clf = ExtraTreesClassifier(
    n_estimators=100,
    max_samples=500,
    bootstrap=True,
    oob_score=True,
    n_jobs=-1,
    random_state=20
)
et_clf.fit(x, y)
print(et_clf.oob_score_)

②完整代码实现

#第一部分:导包
import numpy as np
import matplotlib.pyplot as plt
#第二部分:创建数据集
from sklearn.datasets import make_moons
x, y = make_moons(
    n_samples=1000,
    noise=0.4,
    random_state=20
)
plt.scatter(x[:, 0], x[:, 1], c=y, s=10)
plt.show()
#第三部分:使用bagging+随机森林并行训练+extra-trees
from sklearn.ensemble import ExtraTreesClassifier

et_clf = ExtraTreesClassifier(
    n_estimators=100,
    max_samples=500,
    bootstrap=True,
    oob_score=True,
    n_jobs=-1,
    random_state=20
)
et_clf.fit(x, y)
print(et_clf.oob_score_)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

还不秃顶的计科生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值