from sklearn.ensemble import AdaBoostClassifier, BaggingClassifier, RandomForestClassifierimport numpy as npimport randomfrom sklearn.svm import SVCX=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结合使用。通常,根据scikit-learn文档的描述,max_samples
参数应限制每个估计器使用的样本最大数量。然而,我发现每个估计器(n_estimators=5)都使用了整个数据集!这是一个bug吗?
回答:
svm.estimators_samples_[0]
将返回一个与数据长度相等的数组。这个数组填充了布尔值,这些值为True
的对应于在估计器中使用的那些数据点(以索引值表示)。
from sklearn.ensemble import AdaBoostClassifier, BaggingClassifier, RandomForestClassifierimport numpy as npimport randomfrom sklearn.svm import SVCX=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