Skip to content

'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の対応遅延にあります:

  1. Scikit-learn 1.6.0 で__sklearn_tags__属性が追加された
  2. XGBoost側でこの変更に対応していないバージョン(2.1.4未満)を使用している
  3. 互換性のないバージョン組み合わせで実行すると属性参照エラーが発生

実際のエラー発生箇所は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")をメタデータ化
  • 共通インターフェースを通じた一括処理を実現するために追加
  • 下位互換性の考慮不足が原因で外部ライブラリに影響

恒久的な解決に向けて

  1. XGBoost 2.1.4+への更新が最適解
  2. プロジェクトのrequirements.txtでバージョン固定:
    txt
    scikit-learn>=1.6.1,<1.7
    xgboost>=2.1.4
  3. Scikit-learn v1.7以降では再びエラーになる可能性が高いため、バージョン推移を注視

関連リンク