🐷

from sklearn.datasets import load_bostonが使えない

に公開

背景

scikit-learn のバージョン1.2以降では、load_boston() が削除されました。

ImportError:
`load_boston` has been removed from scikit-learn since version 1.2.

これは、ボストン住宅価格データセットに倫理的な問題があったため、公式に廃止されました。
https://scikit-learn.org/1.0/modules/generated/sklearn.datasets.load_boston.html

解決策

1. 代替関数 load_boston() を自作する

load_boston() を使えれば問題がないので、同じデータを取得できる関数を自作 すれば解決できます。

以下の関数を定義することで、load_boston() の代わりに同じデータを取得できます。

import pandas as pd
import numpy as np
from sklearn.utils import Bunch

def load_boston():
    """ボストン住宅価格データセットを読み込む"""
    data_url = "http://lib.stat.cmu.edu/datasets/boston"

    raw_df = pd.read_csv(data_url, sep="\s+", skiprows=22, header=None)
    data = np.hstack([raw_df.values[::2, :], raw_df.values[1::2, :2]])
    
    target = raw_df.values[1::2, 2]
    feature_names = [
        "CRIM", "ZN", "INDUS", "CHAS", "NOX", "RM", "AGE", "DIS", "RAD",
        "TAX", "PTRATIO", "B", "LSTAT"
    ]

    return Bunch(data=data, target=target, feature_names=feature_names)

2. 使い方

関数を定義した後、以下のように load_boston() を呼び出すことで、元の load_boston() と同様のデータを取得できます。

# ボストン住宅価格データセットをロード
boston = load_boston()

# データの確認
print("データの形状:", boston.data.shape)
print("ターゲットの形状:", boston.target.shape)
print("特徴量名:", boston.feature_names)

これで、scikit-learn 1.2以降でも load_boston() の機能を再現できる ようになります。

まとめ

  • scikit-learn 1.2 以降、load_boston() は削除された。
  • 代わりに、Bunch を使って load_boston() を自作 すれば同じ結果を得られる。

これで、scikit-learn のバージョンに関わらず load_boston() を使えるようになります。

Discussion