해결된 질문
작성
·
588
0
4장 신규추가된 feature selection 강의에서 1번째 코드에서 다음과 같은 오류가 뜨는데요...
제 사이킷런 버전은 1.2.2 입니다.
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
Cell In[6], line 25
23 plt.xlabel("Number of features selected")
24 plt.ylabel("Cross validation score (nb of correct classifications)")
---> 25 plt.plot(range(1, len(rfecv.grid_scores_) + 1), rfecv.grid_scores_)
26 plt.show()
AttributeError: 'RFECV' object has no attribute 'grid_scores_'
혹시 가능한 명령어가 뭐가 있는지 검색해 보았는데, 아래와 같이 뜹니다.
대체될 수 있는 명령어가 뭐가 있을까요?
[x for x in dir(rfecv) if not x.startswith('_')]
[11]:
['classes_',
'cv',
'cv_results_',
'decision_function',
'estimator',
'estimator_',
'fit',
'fit_transform',
'get_feature_names_out',
'get_params',
'get_support',
'importance_getter',
'inverse_transform',
'min_features_to_select',
'n_features_',
'n_features_in_',
'n_jobs',
'predict',
'predict_log_proba',
'predict_proba',
'ranking_',
'score',
'scoring',
'set_output',
'set_params',
'step',
'support_',
'transform',
'verbose']
답변 1
1
안녕하십니까,
RFECV의 grid_scores_가 1.2 부터는 더 이상 지원되지 않는 군요.
대신 cv_results_ 를 이용하시면 됩니다. 위 코드는 아래와 같이 변경되면 될 것 같습니다.
plt.plot(range(1, len(rfecv.cv_results_['mean_test_score']) + 1), rfecv.cv_results_['split0_test_score']) plt.plot(range(1, len(rfecv.cv_results_['mean_test_score']) + 1), rfecv.cv_results_['split1_test_score'])
cv_results_는 딕셔너리이고 key값으로 'mean_test_score', std_test_score' 그리고 cv설정 개수에 따라 split_x_test_score 를 가지게 됩니다. 이 중 split_0_test_score와 split_1_test_score를 이용하면 됩니다.
감사합니다.