BaggingClassifier每次都会获取所有数据集

时间:2017-12-21 17:28:57

标签: machine-learning scikit-learn classification svm python-3.5

from sklearn.ensemble import AdaBoostClassifier, BaggingClassifier, RandomForestClassifier
import numpy as np
import random
from sklearn.svm import SVC

X=np.random.rand(1000,2)
Y=[random.randint(0,1) for x in range(0,1000)]

svm=BaggingClassifier(SVC(kernel='rbf', random_state=123, gamma=.000001, C=100000, class_weight='balanced'), max_samples=1/5.0, n_estimators=5, n_jobs=-1,random_state=123)

classfier=svm.fit(X,Y)

print(len(svm.estimators_samples_))
print(len(svm.estimators_samples_[0]))# here I expect 0.05*400 samples. but the result is 1000.

在这段代码中,我尝试将BaggingClassifier应用于SVM。通常如sckitlearn文档中所述,max_samples修复了每个估算器使用的最大样本数。但是,我注意到每个估算器(n_estimators = 5)都采用了所有的数据集!这是一个错误吗?

1 个答案:

答案 0 :(得分:1)

svm.estimators_samples_[0]将返回一个等于数据长度的数组。此数组使用布尔值填充,等于True的值是估算器中使用的数据点(就索引值而言)。

from sklearn.ensemble import AdaBoostClassifier, BaggingClassifier, RandomForestClassifier
import numpy as np
import random
from sklearn.svm import SVC

X=np.random.rand(1000,2)
Y=[random.randint(0,1) for x in range(0,1000)]

svm=BaggingClassifier(SVC(kernel='rbf', random_state=123, gamma=.000001, C=100000, class_weight='balanced'), max_samples=1/5.0, n_estimators=5, n_jobs=-1,random_state=123)

classfier=svm.fit(X,Y)

print(len([i for i in svm.estimators_samples_[0] if i == True]))

运行上面的代码我得到:

181