LightGBM 지원 Metric
https://lightgbm.readthedocs.io/en/latest/Parameters.html?highlight=metric#metric
자주 사용되는 Metric 예시
- 'l1': absolute loss
- aliases: mean_absolute_error, mae, regression_l1
- 'l2': square loss
- aliases: mean_squared_error, mse, regression_l2, regression
- 'rmse': root square loss
- aliases: root_mean_squared_error, l2_root
- 'auc': area under the ROC curve
사용 방법
선언한 모델 메소드 fit()을 실행할 때,
eval_set과
eval_metric을 지정해주면 됩니다.
eval_set 지정 방법
리스트안에 x, y 값을 튜플로 묶어 담아두면 됩니다. 밑의 코드를 보면 이해가 빠릅니다.
eval_metric 지정 방법
위에서 알아본, LightGBM 메트릭의 이름('l1', 'l2', 'rmse', 'auc' 등)을 써주면 됩니다. 밑의 코드를 보면 이해가 빠릅니다.
x = data.drop(['target'], axis=1)
y = data['target']
train_x, test_x, train_y, test_y = train_test_split(x, y, test_size=0.2, random_state=32)
model = lgbm.LGBMRegressor(random_state=32)
model.fit(
train_x,
train_y,
eval_set=[(train_x, train_y),(test_x, test_y)],
eval_metric='rmse'
)
pred = model.predict(test_x)
추가 팁: Custom Metric 사용하기
Custom Metric 정의하기
1. y_true, y_pred(실제값, 예측값)을 받는 함수를 정의합니다.
2. 리턴해줘야 하는 값
- Metric 이름 (string)
- Metric (Numpy function)
- Metric 값이 높으면 좋은지? (True or False)
예를 들어 설명하면, (아래 코드와 함께 보세요!)
RMSE를 Custome Metric으로 정의하자고 합시다.
1. RMSE의 이름을 정합니다. 'custom_RMSE'라고 이름을 짓겠습니다. (사용자 마음대로 정하면 됩니다.)
2. Metric을 정의합니다. 아래 Numpy 식과 같이 정의합니다.
3. RMSE는 낮을수록 좋기 때문에 False를 지정합니다.
위 3가지 값을 튜플로 묶어 return 하면 됩니다.
추가적으로 Acc를 통해 설명드리면,
1. 이름을 짓는다: 'acc' 라고 이름을 지어보겠습니다.
2. Metric을 정의합니다. 아래 Numpy 식과 같이 정의하겠습니다.
3. Acc는 높을수록 좋기 때문에 True를 지정합니다.
위 3가지 값을 튜플로 묶어 return 하면 됩니다.
def custom_rmse(y_true, y_pred):
# metric 이름, metric, metric 값이 높을수록 좋은지?
return ('custom_RMSE', np.sqrt(np.mean(np.power(y_pred - y_true, 2))), False)
def custom_acc(y_true, y_pred):
# metric 이름, metric, metric 값이 높을수록 좋은지?
return ('acc', np.mean(y_pred == y_true), True)
Custom Metric을 정의 후, 사용하기 위해서는
model.fit()에서 eval_metric에 함수명을 입력해주면 작동합니다.
x = data.drop(['target'], axis=1)
y = data['target']
train_x, test_x, train_y, test_y = train_test_split(x, y, test_size=0.2, random_state=32)
model = lgbm.LGBMRegressor(random_state=32)
model.fit(
train_x,
train_y,
eval_set=[(train_x, train_y),(test_x, test_y)],
eval_metric= custom_rmse
)
pred = model.predict(test_x)
XGBoost Metric 확인을 알아보고 싶다면 아래 글을 참고하세요!
https://deep-deep-deep.tistory.com/160