第一部分:基础知识了解
集成学习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_)