cleanUrl: "using-custom-scoring-function-in-cross-val-score"
description: "Scikit-learn의 cross_val_score 메서드에서 custom scoring function을 사용하는 방법에 대해 알아봅니다."
- scikit-learn의
sklearn.metrics.model_selection
메서드는 기본적으로 해당 모델의 default scoring function을 사용하여 성능을 측정한다.
- 간혹 스스로 scoring function을 만들어서 cross-validation score를 측정하고 싶은 경우가 있는데, 이 경우에는
scoring
파라미터에 아래 조건을 만족하는 함수를 넘겨주면 된다.
scoring
함수 만들기
- scoring 함수의 조건은 아래와 같다. 간단하다.
fn(estimator, X, y)
형태의 signature를 가진다.
- 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.