ボストンの住宅価格予測 scikit-learn

ボストンの住宅価格予測

回帰問題の例として、ボストンの住宅価格データセットを使用して、部屋の数(RM)から住宅価格(MEDV)を予測する問題を考えてみましょう。

このデータセットは、scikit-learnライブラリに含まれています。

まず、必要なライブラリをインポートします。

1
2
3
4
import matplotlib.pyplot as plt
import numpy as np
from sklearn import datasets, linear_model
from sklearn.metrics import mean_squared_error, r2_score

次に、データセットをロードします。

1
boston = datasets.load_boston()

部屋の数(RM)を特徴量として、住宅価格(MEDV)をターゲットとします。

1
2
X = boston.data[:, np.newaxis, 5]  # RM
y = boston.target # MEDV

データを訓練セットとテストセットに分割します。

1
2
3
4
X_train = X[:-20]
X_test = X[-20:]
y_train = y[:-20]
y_test = y[-20:]

線形回帰モデルを作成し、訓練データで訓練します。

1
2
regr = linear_model.LinearRegression()
regr.fit(X_train, y_train)

テストデータを使って予測を行います。

1
y_pred = regr.predict(X_test)

結果を表示します。

1
2
3
4
5
print('Coefficients: \n', regr.coef_)
print('Mean squared error: %.2f'
% mean_squared_error(y_test, y_pred))
print('Coefficient of determination: %.2f'
% r2_score(y_test, y_pred))

最後に、結果をグラフ化します。

1
2
3
4
5
6
plt.scatter(X_test, y_test,  color='black')
plt.plot(X_test, y_pred, color='blue', linewidth=3)
plt.xlabel('Number of Rooms (RM)')
plt.ylabel('Median value of owner-occupied homes in $1000s (MEDV)')
plt.title('Linear Regression on Boston Housing Data')
plt.show()

このコードは、部屋の数から住宅価格を予測する線形回帰モデルを訓練し、その性能を評価し、結果をグラフ化します。

[実行結果]

ボストンの住宅価格の回帰の結果を評価するために、いくつかの指標が表示されました。

以下にそれぞれの指標の説明をします。

1. Coefficients: [9.126359]
これは、回帰モデルにおける説明変数(住宅価格を予測するための特徴量)の係数です。
単回帰の場合、この値は単一の特徴量の重みを示します。この場合、係数が9.126359と表示されています。

2. Mean squared error: 18.73
平均二乗誤差(Mean Squared Error, MSE)は、予測値と実際の値の間の差の二乗の平均です。
この値が小さいほど、モデルの予測が正確であることを示します。
この場合、MSEは18.73と表示されています。

3. Coefficient of determination: 0.20
決定係数(Coefficient of Determination)は、回帰モデルの予測の精度を示す指標です。
予測の精度は、実際の値の変動のうち、モデルがどれだけ説明できるかを表します。
決定係数の値は0から1の範囲であり、1に近いほど予測が正確です。
この場合、決定係数は0.20と表示されています。

この結果を解釈すると、係数は9.126359となっており、これは住宅価格の予測において重要な特徴量が1単位増加するごとに価格が約9.126359単位上昇することを示しています。

しかし、MSEが18.73となっているため、予測の誤差が比較的大きいことが分かります。

また、決定係数が0.20となっているため、このモデルは住宅価格の変動の約20%を説明できることを示しています。

ただし、この決定係数は予測の精度が低いことを意味しており、他の要素や特徴量がモデルに追加される必要があるかもしれません。