1

모든 클래스에서 주어진 샘플의 예측 점수/확률을 검색하고 싶습니다. sklearn의 RandomForestClassifier를 사용하고 있습니다. 내 코드는 .predict()을 사용하고 있으면 정상적으로 실행됩니다. 그러나 나는 확률을 보여주기 위해 .predict_proba(X)을 사용하고 있으며 항상 동일한 값을 반환합니다. 심지어 X이 변경 될 때도 마찬가지입니다. 왜 그런가, 어떻게 고쳐야 하는가?RandomForestClassifier (sklearn)의 predict_proba (X)가 정적 인 것처럼 보입니까?

내가 관련된 부분에 내 코드를 분해하고 있습니다 :

# ... code ... feature generation/gets the feature data 
if rf is None: 
    rf = RandomForestClassifier(n_estimators=80) 
    rf.fit(featureData, classes) 
else: 
    prediction = rf.predict(featureData) # gets the right class/always different 
    proba = rf.predict_proba(featureData) 
    print proba # this prints always the same values for all my 40 classes 

흥미롭게 max(proba) 클래스를 검색하는 바로 그 첫 번째 실행에서 .predict() 돌아갑니다. .predict()이 예상대로 작동하기 때문에 오류가 sklearn 측에 있다고 생각합니다. 즉, 설정해야 할 플래그가 있다고 생각합니다.

누구에게 아이디어가 있습니까?

답변

1

나는 항상 동일한 인수를 predict_proba에 전달하고 있다고 생각합니다.

from sklearn import datasets 
from sklearn.ensemble import RandomForestClassifier 
iris = datasets.load_iris() 
X = iris.data 
y = iris.target 
rf = RandomForestClassifier(n_estimators=80) 
rf.fit(X, y) 

나는 방법 predictpredict_proba, 다른 인수 클래스와 클래스 로그 확률 예측 전화

이 하나가 합리적으로 수 또한 다른 다음은 홍채 데이터 세트에서 나무의 숲을 구축하려면 코드입니다 배고 있다.

샘플 실행 :

In [82]: a, b = X[:3], X[-3:] 

In [83]: a 
Out[83]: 
array([[ 5.1, 3.5, 1.4, 0.2], 
     [ 4.9, 3. , 1.4, 0.2], 
     [ 4.7, 3.2, 1.3, 0.2]]) 

In [84]: b 
Out[84]: 
array([[ 6.5, 3. , 5.2, 2. ], 
     [ 6.2, 3.4, 5.4, 2.3], 
     [ 5.9, 3. , 5.1, 1.8]]) 

In [85]: rf.predict(a) 
Out[85]: array([0, 0, 0]) 

In [86]: rf.predict(b) 
Out[86]: array([2, 2, 2]) 

In [87]: rf.predict_proba(a) 
Out[87]: 
array([[ 1., 0., 0.], 
     [ 1., 0., 0.], 
     [ 1., 0., 0.]]) 

In [88]: rf.predict_proba(b) 
Out[88]: 
array([[ 0. , 0. , 1. ], 
     [ 0. , 0.0125, 0.9875], 
     [ 0. , 0.0375, 0.9625]]) 
+0

덕분에 당신의 시간을 X''에 대한로드 오류의 일종이 있었다. 그러나 나는 왜'predict()'가 효과가 있는지 궁금해하고있다. 저에게 많은 도움을 주셔서 감사합니다. – user3085931