我正在使用带有深度-1决策树的BaggingClassifier来尝试将我的数据分割成分类器可能更好的子集。如何查看包装过程选择的数据子集?下面是我使用的运行行:
clf = BaggingClassifier(DecisionTreeClassifier(max_depth=1),n_estimators=2000)发布于 2017-06-22 06:54:57
正如您可能已经知道的,BaggingClassifier可以通过随机化特性和/或来自列车数据的随机样本对子集进行随机化。
假设我有36个样本和2个特性存储在X变量中,36个目标二进制样本存储在y变量中。我试图处理分类问题,就像您通过BaggingClassifier所做的那样。
clf = BaggingClassifier(base_estimator=DecisionTreeClassifier(max_depth=1),
n_etimators=1) # for simplicity
clf.fit(X, y)它将返回以下内容:
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个数组。
最后,如何实际看到选择了哪些样本?换句话说,如何转换这个布尔掩码?守则如下:
mask = np.array(clf.estimators_samples_).ravel()
X[mask, :]就这样!请注意,如果您有2000种估计量,并且想要检查选择了哪些样本来适合(例如,第1000位DecisionTreeClassifier ),您可以键入类似这样的内容:
mask = np.array(clf.estimators_samples_[999].ravel()
X[mask, :]代码X[mask, :]只选择那些满足掩码变量中的True条件的样本( NumPy数组的行)。如果你天生就有潘达斯DataFrame,你就把X[mask, :]改成X.ix[mask, :]。我希望你现在明白了!谢谢!
E.
附注:
演示引导程序工作方式的示例。
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_[数组(真、真、假、假、真、假、假、真、真、假、真、真、假、假、真、假、假、真、真 其中一些人被退学了
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)] 他们都是被选中的
因此,正如您所看到的,您可以按比例改变样本和特性,或者删除其中的一些。
https://stackoverflow.com/questions/44683253
复制相似问题