강의

멘토링

로드맵

Inflearn brand logo image

인프런 커뮤니티 질문&답변

yaejin1016님의 프로필 이미지
yaejin1016

작성한 질문수

[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)

4회 기출 유형(작업형2)

CV error

해결된 질문

작성

·

69

0

CV를 사용하였는데 하기와 같은 오류가 등장했습니다 :

--> 98             raise InvalidParameterError(
     99                 f"The {param_name!r} parameter of {caller_name} must be"
    100                 f" {constraints_str}. Got {param_val!r} instead."

InvalidParameterError: The 'scoring' parameter of cross_val_score must be a str among {'f1', 'jaccard_micro', 'positive_likelihood_ratio', 'adjusted_rand_score', 'jaccard_weighted', 'homogeneity_score', 'average_precision', 'precision_weighted', 'rand_score', 'roc_auc_ovr', 'roc_auc_ovr_weighted', 'precision', 'explained_variance', 'jaccard_macro', 'recall_macro', 'f1_macro', 'normalized_mutual_info_score', 'precision_samples', 'neg_root_mean_squared_log_error', 'r2', 'neg_negative_likelihood_ratio', 'precision_micro', 'neg_max_error', 'mutual_info_score', 'precision_macro', 'f1_micro', 'v_measure_score', 'completeness_score', 'neg_mean_squared_error', 'accuracy', 'neg_brier_score', 'recall_samples', 'jaccard_samples', 'neg_root_mean_squared_error', 'neg_mean_absolute_percentage_error', 'jaccard', 'f1_samples', 'matthews_corrcoef', 'neg_median_absolute_error', 'neg_mean_gamma_deviance', 'recall_micro', 'neg_mean_absolute_error', 'neg_log_loss', 'roc_auc_ovo_weighted', 'd2_absolute_error_score', 'roc_auc', 'adjusted_mutual_info_score', 'recall', 'recall_weighted', 'balanced_accuracy', 'f1_weighted', 'top_k_accuracy', 'roc_auc_ovo', 'neg_mean_squared_log_error', 'fowlkes_mallows_score', 'neg_mean_poisson_deviance'}, a callable or None. Got 'f1-macro' instead.

제가 작성한 코드도 함께 공유 드립니다 :

import pandas as pd
train=pd.read_csv('train.csv')
test=pd.read_csv('test.csv')

train=train.drop('ID', axis=1)
test_id=test.pop('ID')

print(train.shape, test.shape)

print(train.head())
print(test.head())

print(train.info())
print(test.info())
print(train.isnull().sum())
print(test.isnull().sum())

y=train.pop('Segmentation')

print(y.info(), y.shape)

y=y-1

int_cols=train.select_dtypes(exclude='object').columns
train[int_cols].corr()

cat_cols=train.select_dtypes(include='object').columns
print(train[cat_cols].describe(include='object'))
print(test[cat_cols].describe(include='object'))

for i in cat_cols:
  train[i]=train[i].astype('object')
  test[i]=test[i].astype('object')

for i in cat_cols:
  print(train[i].value_counts())
  print(test[i].value_counts())


from sklearn.preprocessing import RobustScaler
scaler=RobustScaler()

for i in int_cols :
  train[i]=scaler.fit_transform(train[[i]])
  test[i]=scaler.transform(test[[i]])


from sklearn.preprocessing import LabelEncoder
le=LabelEncoder()

for i in cat_cols:
  train[i]=le.fit_transform(train[i])
  test[i]=le.transform(test[i])

print(train.head())
print(test.head())

from sklearn.model_selection import train_test_split
X_tr, X_val, y_tr, y_val=train_test_split(train, y, test_size=0.2, random_state=2025)

print(X_tr.shape, X_val.shape, y_tr.shape, y_val.shape)


from sklearn.ensemble import RandomForestClassifier
rf=RandomForestClassifier(n_estimators=50, max_depth=7, random_state=2025)
rf.fit(X_tr, y_tr)
y_pred_rf=rf.predict(X_val)


from lightgbm import LGBMClassifier
lgbm=LGBMClassifier(random_state=2025)
lgbm.fit(X_tr, y_tr)
y_pred_lgbm=lgbm.predict(X_val)

from xgboost import XGBClassifier
xgb=XGBClassifier(random_state=2025)
xgb.fit(X_tr, y_tr)
y_pred_xgb=xgb.predict(X_val)
y_pred_xgb=y_pred_xgb+1


from sklearn.metrics import f1_score
print(f1_score(y_val, y_pred_rf, average='macro'))
print(f1_score(y_val, y_pred_lgbm, average='macro'))
print(f1_score(y_val, y_pred_xgb, average='macro'))

from sklearn.model_selection import cross_val_score
scores=cross_val_score(rf, train, target, scoring='f1-macro', cv=5)
print(scores)
print(scores.mean())

 

 

 

 

답변 2

0

퇴근후딴짓님의 프로필 이미지
퇴근후딴짓
지식공유자

오!! 크로스 밸리데이션까지 🙂 멋집니다.

확인 방법 공유해요!

# 사용 가능한 scoring 목록 출력
from sklearn.metrics import get_scorer_names
print(get_scorer_names())  

> ['accuracy', 'adjusted_mutual_info_score', 'adjusted_rand_score', 'average_precision', 'balanced_accuracy', 'completeness_score', 'd2_absolute_error_score', 'explained_variance', 'f1', 'f1_macro', 'f1_micro', 'f1_samples', 'f1_weighted', 'fowlkes_mallows_score', 'homogeneity_score', 'jaccard', 'jaccard_macro', 'jaccard_micro', 'jaccard_samples', 'jaccard_weighted', 'matthews_corrcoef', 'max_error', 'mutual_info_score', 'neg_brier_score', 'neg_log_loss', 'neg_mean_absolute_error', 'neg_mean_absolute_percentage_error', 'neg_mean_gamma_deviance', 'neg_mean_poisson_deviance', 'neg_mean_squared_error', 'neg_mean_squared_log_error', 'neg_median_absolute_error', 'neg_negative_likelihood_ratio', 'neg_root_mean_squared_error', 'neg_root_mean_squared_log_error', 'normalized_mutual_info_score', 'positive_likelihood_ratio', 'precision', 'precision_macro', 'precision_micro', 'precision_samples', 'precision_weighted', 'r2', 'rand_score', 'recall', 'recall_macro', 'recall_micro', 'recall_samples', 'recall_weighted', 'roc_auc', 'roc_auc_ovo', 'roc_auc_ovo_weighted', 'roc_auc_ovr', 'roc_auc_ovr_weighted', 'top_k_accuracy', 'v_measure_score']

0

안녕하세요, 인프런 AI 인턴입니다.

귀하가 겪고 계신 오류는 cross_val_score 함수에서 scoring 매개변수로 'f1-macro'를 전달할 때 발생한 듯합니다. 이 함수는 scoring을 문자열로 받으면서 'f1-macro' 대신에 f1_macro 형식을 요구합니다. 'f1_macro' (underscore _) 형식을 사용해야 합니다.

문제 해결을 위해 다음과 같이 코드 수정해 보시기 바랍니다:

from sklearn.model_selection import cross_val_score
scores = cross_val_score(rf, train, target, scoring='f1_macro', cv=5)

수정 후, cross_val_score 함수 실행 시 'f1_macro' 포맷을 사용함으로써 올바르게 평가될 것입니다. “‘f1_macro’“와 같은 스코어링 매개변수 사용법은 sklearn 문서나 이를 다루는 교안 등을 참조하여도 좋습니다.

유사한 문제를 가진 다른 학습자와 강사님의 답변을 참고하시면 더욱 도움이 될 것입니다. 예를 들어, “4회 기출 작업형 2번 cross_val_score 질문“에서는 cross_val_score 사용 시 발생할 수 있는 일반적인 문제들과 그 해결 방안에 대해 충분히 설명하고 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

yaejin1016님의 프로필 이미지
yaejin1016

작성한 질문수

질문하기