在 BaggingClassifier 中绘制准确度历史

Posted

技术标签:

【中文标题】在 BaggingClassifier 中绘制准确度历史【英文标题】:Plotting history of accuracy in BaggingClassifier 【发布时间】:2019-09-04 21:38:27 【问题描述】:

我已经训练了一个简单的随机森林算法和 bagging 分类器 (n_estimators = 100)。是否可以绘制 bagging Classifier 的准确性历史?如何计算100个样本的方差?

我刚刚打印了两种算法的准确度值:

# DecisionTree
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.90)
clf2 = tree.DecisionTreeClassifier()
clf2.fit(X_tr, y_tr)
pred2 = clf2.predict(X_test)
acc2  = clf2.score(X_test, y_test)
acc2  # 0.6983930778739185

# Bagging
clf3 = BaggingClassifier(tree.DecisionTreeClassifier(),  max_samples=0.5, max_features=0.5, n_estimators=100,\
                         verbose=2)
clf3.fit(X_tr, y_tr)
pred3 = clf3.predict(X_test)
acc3=clf3.score(X_test,y_test)
acc3 # 0.911619283065513

【问题讨论】:

你能解释一下“准确性历史”是什么意思吗? Therorically bagging 训练多个模型,每个模型的准确度会根据 n_estimators 变化。我想得到这样的情节。 link 使用 load_digits。 【参考方案1】:

我认为您无法从适合的BaggingClassifier 获得此信息。但是你可以通过拟合不同的n_estimators来创建这样的情节:

import matplotlib.pyplot as plt

from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import BaggingClassifier

from sklearn import datasets
from sklearn.model_selection import train_test_split

iris = datasets.load_iris()
X, X_test, y, y_test = train_test_split(iris.data,
                                        iris.target,
                                        test_size=0.20)

estimators = list(range(1, 20))
accuracy = []

for n_estimators in estimators:
    clf = BaggingClassifier(DecisionTreeClassifier(max_depth=1),
                            max_samples=0.2,
                            n_estimators=n_estimators)
    clf.fit(X, y)
    acc = clf.score(X_test, y_test)
    accuracy.append(acc)

plt.plot(estimators, accuracy)
plt.xlabel("Number of estimators")
plt.ylabel("Accuracy")
plt.show()

(当然,鸢尾花数据集很容易只适合单个DecisionTreeClassifier,因此我在此示例中设置了max_depth=1。)

为了获得具有统计意义的结果,您应该为每个n_estimators 多次拟合BaggingClassifier,并取获得的准确度的平均值。

【讨论】:

感谢这对我有帮助。

以上是关于在 BaggingClassifier 中绘制准确度历史的主要内容,如果未能解决你的问题,请参考以下文章

使用 BaggingClassifier 时打印决策树和 feature_importance

sklearn 中 BaggingClassifier 的默认配置与硬投票的区别

对 BaggingClassifier 参数内的参数进行网格搜索

BaggingClassifier 和具有分类特征的 CatBoost 无法正常工作

将 sklearn 的 BaggingClassifier 与 GridSearchCV 一起使用时出现 ZeroDivisionError

scikit-learn 的 BaggingClassifier 和自定义基础估计器的问题:操作数不能一起广播?