'super' object has no attribute 'sklearn_tags' エラーの解決法
問題の説明
Scikit-learnのRandomizedSearchCV
を使用してXGBRegressor
のハイパーパラメータチューニングを実行する際、以下のエラーが発生する場合があります:
python
AttributeError: 'super' object has no attribute '__sklearn_tags__'
この問題は主に以下の環境で発生します:
- Python 3.12
- Scikit-learn(sklearn)とXGBoostの最新バージョン
RandomizedSearchCV.fit()
メソッドの実行時
原因の分析
このエラーの根本原因は、Scikit-learn 1.6.0で導入されたAPI変更とXGBoostの対応遅延にあります:
- Scikit-learn 1.6.0 で
__sklearn_tags__
属性が追加された - XGBoost側でこの変更に対応していないバージョン(2.1.4未満)を使用している
- 互換性のないバージョン組み合わせで実行すると属性参照エラーが発生
実際のエラー発生箇所はScikit-learn内部のBaseEnsemble
クラスで、XGBoostオブジェクトが期待される属性を持っていないために発生します。
解決方法
推奨解決策: XGBoostのバージョンアップデート(根本的解決)
XGBoost 2.1.4以降にはこの問題の修正が含まれています:
bash
pip install "xgboost>=2.1.4" --upgrade
公式修正PR#11021で互換性が確保され、scikit-learn 1.6.x以降と正しく連携します。
代替解決策1: Scikit-learnのバージョンダウングレード
XGBoostの更新が困難な場合、Scikit-learnを1.5.x以下にダウングレード:
bash
pip uninstall scikit-learn
pip install "scikit-learn==1.5.2"
注意
長期サポート観点では非推奨:
- scikit-learn 1.5系はセキュリティ更新終了の可能性
- 新機能や最適化が利用できない
代替解決策2: Scikit-learn 1.6.1以上での警告許容
scikit-learn 1.6.1ではエラーから警告に変更されました:
bash
pip install "scikit-learn>=1.6.1,<1.7"
特性
- エラー発生せず処理が継続
- 代わりに
DeprecationWarning
が出力
python
DeprecationWarning: `__sklearn_tags__` is deprecated in version 1.6
非推奨: 外部ライブラリへの置き換え
XGBoost/scikit-learnの更新が不可能な特殊ケースでのみ:
python
# keras_tunerの使用例(scikit-learn代替ではない)
from keras_tuner import RandomSearch
tuner = RandomSearch(
hypermodel=create_model,
objective="val_loss",
max_trials=10,
directory="tuning_dir"
)
tuner.search(x_train, y_train, epochs=5, validation_data=(x_val, y_val))
根本原因の技術的背景
バージョン互換性マトリックス
XGBoost バージョン | scikit-learn バージョン | 互換性 |
---|---|---|
< 2.1.4 | ≥ 1.6.0 | ❌ エラー発生 |
≥ 2.1.4 | ≥ 1.6.0 | ✅ 問題なし |
任意 | < 1.6.0 | ✅ 問題なし |
__sklearn_tags__
とは
scikit-learn 1.6.0で導入された内部管理用属性:
- アルゴリズムの特性(例:
"requires_y"
,"non_deterministic"
)をメタデータ化 - 共通インターフェースを通じた一括処理を実現するために追加
- 下位互換性の考慮不足が原因で外部ライブラリに影響
恒久的な解決に向けて
- XGBoost 2.1.4+への更新が最適解
- プロジェクトの
requirements.txt
でバージョン固定:txtscikit-learn>=1.6.1,<1.7 xgboost>=2.1.4
- Scikit-learn v1.7以降では再びエラーになる可能性が高いため、バージョン推移を注視