首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >滑雪板中的决策桩套袋:如何查看结果?

滑雪板中的决策桩套袋:如何查看结果?
EN

Stack Overflow用户
提问于 2017-06-21 18:05:36
回答 1查看 1.1K关注 0票数 0

我正在使用带有深度-1决策树的BaggingClassifier来尝试将我的数据分割成分类器可能更好的子集。如何查看包装过程选择的数据子集?下面是我使用的运行行:

代码语言:javascript
复制
clf = BaggingClassifier(DecisionTreeClassifier(max_depth=1),n_estimators=2000)
EN

回答 1

Stack Overflow用户

发布于 2017-06-22 06:54:57

正如您可能已经知道的,BaggingClassifier可以通过随机化特性和/或来自列车数据的随机样本对子集进行随机化。

假设我有36个样本和2个特性存储在X变量中,36个目标二进制样本存储在y变量中。我试图处理分类问题,就像您通过BaggingClassifier所做的那样。

代码语言:javascript
复制
clf = BaggingClassifier(base_estimator=DecisionTreeClassifier(max_depth=1),
                        n_etimators=1)  # for simplicity
clf.fit(X, y)

它将返回以下内容:

代码语言:javascript
复制
BaggingClassifier(base_estimator=DecisionTreeClassifier(class_weight=None, criterion='gini', max_depth=1,
        max_features=None, max_leaf_nodes=None,
        min_impurity_split=1e-07, min_samples_leaf=1,
        min_samples_split=2, min_weight_fraction_leaf=0.0,
        presort=False, random_state=None, splitter='best'),
        bootstrap=True, bootstrap_features=False, max_features=1.0,
        max_samples=1.0, n_estimators=1, n_jobs=1, oob_score=False,
        random_state=None, verbose=0, warm_start=False)

正如sklearn文档声明的那样,子数据设置的关键参数是max_samples和max_features,随机化的参数是引导和bootstrap_features。

前两个参数(如果定义为浮点数)范围为0。对于1.,是X传输到base_estimator的样本和特性的比例(在您的例子中是DecisitonTreeClassifier)。

第二两个参数作为由上述前两个参数获得的两个样本和特征的随机因子(或退出因子)。默认情况下,引导是True,这意味着它从max_samples中预定义的比例中随机选择样本。最后,我提供了一个例子,让你了解这个过程。

因此,默认情况下,您的分类器从X获取每个示例和每个特性,并且只删除样本(因为您没有更改分类器中的参数)。在安装好分类器之后,您可以通过键入clf.estimators_features_来检查所选的特征。对我来说,为了简单起见,它从X数据中打印了两个特性,它们由1 DecisionTreeClassifier安装,而不是像我在n_estimators中所说的那样。

[数组(0,1)] 如您所见,它选择了每个特性,因为max_features是1,而bootstrap_features是False

好的,那么传送给那个DecisionTreeClassifier的样本是什么?您可以通过输入clf.estimators_samples_来验证这一点,它将返回如下内容:

[数组(真、真、假、真、真、假、真、假、真、真、假、假、真、假、假、真、假、真、真、假、假、真、真

您看,它是X在DecisionTreeClassifer在BaggingClassifier中的拟合过程中传输的样本的布尔掩码。如果n_estimators等于2000年,那么只要引导集为True,就会有带有随机样本的2000个数组。

最后,如何实际看到选择了哪些样本?换句话说,如何转换这个布尔掩码?守则如下:

代码语言:javascript
复制
mask = np.array(clf.estimators_samples_).ravel()
X[mask, :]

就这样!请注意,如果您有2000种估计量,并且想要检查选择了哪些样本来适合(例如,第1000位DecisionTreeClassifier ),您可以键入类似这样的内容:

代码语言:javascript
复制
mask = np.array(clf.estimators_samples_[999].ravel()
X[mask, :]

代码X[mask, :]只选择那些满足掩码变量中的True条件的样本( NumPy数组的行)。如果你天生就有潘达斯DataFrame,你就把X[mask, :]改成X.ix[mask, :]。我希望你现在明白了!谢谢!

E.

附注:

演示引导程序工作方式的示例。

代码语言:javascript
复制
clf = BaggingClassifier(base_estimator=DecisionTreeClassifier(max_depth=1), n_estimators=1, bootstrap=True)
clf.fit(np.array(x.values),np.array(Y.values))
clf.estimators_samples_

[数组(真、真、假、假、真、假、假、真、真、假、真、真、假、假、真、假、假、真、真 其中一些人被退学了

代码语言:javascript
复制
clf = BaggingClassifier(base_estimator=DecisionTreeClassifier(max_depth=1), n_estimators=1, bootstrap=False)
clf.fit(np.array(x.values),np.array(Y.values))
clf.estimators_samples_

[数组( True,dtype=bool)] 他们都是被选中的

因此,正如您所看到的,您可以按比例改变样本和特性,或者删除其中的一些。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44683253

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档