목표 : Brier Score Loss를 사용하여 GridSearchCV를 사용하여 랜덤 포레스트 알고리즘 훈련
문제 : make_scorer를 사용할 때 대상 "y"에 대한 확률 예측이 잘못된 차원입니다.
이 질문을 살펴본 후 제안 프록시 기능을 사용하여 brier score 손실로 훈련 된 GridSearchCV를 사용하고 있습니다. 다음은 설정의 예입니다.
from sklearn.model_selection import GridSearchCV
from sklearn.metrics import brier_score_loss,make_scorer
from sklearn.ensemble import RandomForestClassifier
import numpy as np
def ProbaScoreProxy(y_true, y_probs, class_idx, proxied_func, **kwargs):
return proxied_func(y_true, y_probs[:, class_idx], **kwargs)
brier_scorer = make_scorer(ProbaScoreProxy, greater_is_better=False, \
needs_proba=True, class_idx=1, proxied_func=brier_score_loss)
X = np.random.randn(100,2)
y = (X[:,0]>0).astype(int)
random_forest = RandomForestClassifier(n_estimators=10)
random_forest.fit(X,y)
probs = random_forest.predict_proba(X)
이제 probs
and y
를 brier_score_loss
또는 둘 중 하나에 직접 전달하면 ProbaScoreProxy
오류가 발생하지 않습니다.
ProbaScoreProxy(y,probs,1,brier_score_loss)
출력 :
0.0006
이제 통과 brier_scorer
:
brier_scorer(random_forest,X,y)
산출:
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-28-1474bb08e572> in <module>()
----> 1 brier_scorer(random_forest,X,y)
~/anaconda3/lib/python3.6/site-packages/sklearn/metrics/_scorer.py in __call__(self, estimator, X, y_true, sample_weight)
167 stacklevel=2)
168 return self._score(partial(_cached_call, None), estimator, X, y_true,
--> 169 sample_weight=sample_weight)
170
171 def _factory_args(self):
~/anaconda3/lib/python3.6/site-packages/sklearn/metrics/_scorer.py in _score(self, method_caller, clf, X, y, sample_weight)
258 **self._kwargs)
259 else:
--> 260 return self._sign * self._score_func(y, y_pred, **self._kwargs)
261
262 def _factory_args(self):
<ipython-input-25-5321477444e1> in ProbaScoreProxy(y_true, y_probs, class_idx, proxied_func, **kwargs)
5
6 def ProbaScoreProxy(y_true, y_probs, class_idx, proxied_func, **kwargs):
----> 7 return proxied_func(y_true, y_probs[:, class_idx], **kwargs)
8
9 brier_scorer = make_scorer(ProbaScoreProxy, greater_is_better=False, needs_proba=True, class_idx=1, proxied_func=brier_score_loss)
IndexError: too many indices for array
따라서 make_scorer
확률 입력의 차원을 변경하기 위해 어떤 일이 일어나고있는 것처럼 보이지만 문제가 무엇인지 알 수 없습니다.
버전 :-sklearn : '0.22.2.post1'-numpy : '1.18.1'
여기 y
에 올바른 차원 (1-d) 이 있으며 문제를 일으키는 차원 y_probs
이 전달되는 것을 둘러 보면 찾을 수 ProbaScoreProxy
있습니다.
마지막 질문에서 잘못 작성된 코드입니까? RF를 훈련시키기 위해 받아 들일 수 있는 make_score 객체를 갖는 궁극적 인 방법은 무엇입니까 GridSearchCV
?
목표 : Brier Score Loss를 사용하여 GridSearchCV를 사용하여 랜덤 포레스트 알고리즘 훈련
이 목표를 위해 매개 변수 의 문자열 값 'neg_brier_score'
을 직접 사용할 수 있습니다.GridSearchCV
scoring
예를 들면 :
gc = GridSearchCV(random_forest,
param_grid={"n_estimators":[5, 10]},
scoring="neg_brier_score")
gc.fit(X, y)
print(gc.scorer_)
# make_scorer(brier_score_loss, greater_is_better=False, needs_proba=True)
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다