Search
Duplicate
⚙️

cross_val_score에서 custom scoring function 사용하기

scikit-learn의 sklearn.metrics.model_selection 메서드는 기본적으로 해당 모델의 default scoring function을 사용하여 성능을 측정한다.
간혹 스스로 scoring function을 만들어서 cross-validation score를 측정하고 싶은 경우가 있는데, 이 경우에는 scoring 파라미터에 아래 조건을 만족하는 함수를 넘겨주면 된다.

scoring 함수 만들기

scoring 함수의 조건은 아래와 같다. 간단하다.
1.
fn(estimator, X, y) 형태의 signature를 가진다.
2.
Scalar value 하나를 리턴한다.

예시

Symmetric mean absolute percentage error (SMAPE)를 scoring에 사용하고 싶다면, 아래와 같이 scoring function을 정의 후 넘겨주면 된다.
def smape(target, pred): mask = (target != 0)| (pred != 0) t, p = target[mask], pred[mask] return 200 / len(t) * (np.abs(t - p) / (np.abs(t) + np.abs(p))).sum() def smape_score(estimator, X, y): y_hat = estimator.predict(X) return smape(y, y_hat) from sklearn.model_selection import cross_val_score from sklearn.ensemble import RandomForestRegressor # # Assume X and y are somehow defined here. # model = RandomForestRegressor() cross_val_score(model, X, y, scoring=smape_score) # Pass scoring funciton itself.
Python
복사