0
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. 

이 코드에서는 SVM과 함께 BaggingClassifier를 적용하려고합니다. 일반적으로 sckitlearn의 문서에서 설명한대로 max_samples은 각 견적서에 사용할 최대 샘플 수를 수정합니다. 그러나 각 견적가 (n_estimators = 5)가 모든 데이터 집합을 사용한다고 말합니다. 그게 버그 야?BaggingClassifier는 매번 모든 데이터 집합을 가져옵니다.

답변

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