2

スタッキング推定器(sklearn.ensembleライブラリのStackingClassifierオブジェクト)のハイパーパラメータを調整するためのグリッド検索を行っています。ML 用の scikit ライブラリと RandomizedSearchCV 関数を利用しています。これに加えて、調整するスタックのベース エスティメータはパイプライン (imblearn.pipeline ライブラリの Pipeline オブジェクト) であり、各パイプラインの最初のステップは mlxtend ライブラリの ColumnSelector オブジェクトです。グリッド検索は、変数の組み合わせの長いリストを調べることを目的としているため、グリッドのパラメーターの分布は、ColumnSelector オブジェクトのパラメーター「cols」のみを調べます。このコードを初めて実行したとき、すべてがうまく機能していましたが、プロジェクトを脇に置き、数日後に戻ってきて、もう機能していないことがわかりました。コード内のすべては、私が残したものと同じです。

AttributeError: 'ColumnSelector' オブジェクトに属性 'n_features_in_' がありません

何が身に着けているのかわかりません。Anaconda、mlxtend、imblearnをアンインストールし、最近のバージョンで再インストールするなど、多くのことを試しましたが、同じエラーが叫び続けます。Googleで検索しましたが、これに関する情報はないようです。

この問題で私を助けてもらえますか?

前もって感謝します。


補遺: scikit のバージョンは 0.23.1、mlxtend のバージョンは 0.17.3、imbalanced-learn のバージョンは 0.7.0 です。

完全なトレースバックは以下のとおりです。オブジェクト gr2 は、スタック分類子を調整するための RandomizedSearchCV オブジェクトに対応しています。mlxtend の StackingClassifier オブジェクトを使用するとすべて正常に動作しますが、このオブジェクトにはパラメーター cv がありません。これには sklearn.ensemble の StackingClassifier があり、パフォーマンスを向上させるために必要です。 (すべてが正常に機能していたときに以前に持っていた)。

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-94-9d8f412d45a3> in <module>
----> 1 gr2.fit(x_train,y_train)

~\anaconda3\lib\site-packages\sklearn\utils\validation.py in inner_f(*args, **kwargs)
     71                           FutureWarning)
     72         kwargs.update({k: arg for k, arg in zip(sig.parameters, args)})
---> 73         return f(**kwargs)
     74     return inner_f
     75 

~\anaconda3\lib\site-packages\sklearn\model_selection\_search.py in fit(self, X, y, groups, **fit_params)
    763             refit_start_time = time.time()
    764             if y is not None:
--> 765                 self.best_estimator_.fit(X, y, **fit_params)
    766             else:
    767                 self.best_estimator_.fit(X, **fit_params)

~\anaconda3\lib\site-packages\sklearn\ensemble\_stacking.py in fit(self, X, y, sample_weight)
    423         self._le = LabelEncoder().fit(y)
    424         self.classes_ = self._le.classes_
--> 425         return super().fit(X, self._le.transform(y), sample_weight)
    426 
    427     @if_delegate_has_method(delegate='final_estimator_')

~\anaconda3\lib\site-packages\sklearn\ensemble\_stacking.py in fit(self, X, y, sample_weight)
    147             for est in all_estimators if est != 'drop'
    148         )
--> 149         self.n_features_in_ = self.estimators_[0].n_features_in_
    150 
    151         self.named_estimators_ = Bunch()

~\anaconda3\lib\site-packages\sklearn\pipeline.py in n_features_in_(self)
    623     def n_features_in_(self):
    624         # delegate to first step (which will call _check_is_fitted)
--> 625         return self.steps[0][1].n_features_in_
    626 
    627     def _sk_visual_block_(self):

AttributeError: 'ColumnSelector' object has no attribute 'n_features_in_'
4

1 に答える 1