• 카테고리

    질문 & 답변
  • 세부 분야

    딥러닝 · 머신러닝

  • 해결 여부

    해결됨

4장 신규추가된 feature selection_basic에서 1째 코드에 에러 발생합니다.

23.05.05 14:02 작성 조회수 459

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를 이용하면 됩니다.

 

감사합니다.