scikit-learnの回帰分析でマンション価格を予測する(結果を可視化)
scikit-learnの回帰分析でマンション価格を予測するで行った駅からの徒歩時間、広さ、築年数に対する、マンション価格の線形重回帰分析結果を可視化します。徒歩時間(or広さor築年数) vs マンション価格(実際の値and学習用データを用いた予測結果and予測用データを用いた予測結果)をモジュールmatplotlibでグラフ化します。
準備
学習用データ:海浜幕張駅の中古マンション38件の情報をインターネット上から入手、徒歩時間(分)、広さ(m2)、築年数(年)、マンション価格(万円)の順にデータを並べcsvファイルとし、ファイル名 'apartment.csv' でjupyter notebookファイル(.ipynb)と同じディレクトリに保存しました。
予測用データ:徒歩5分100平米築3年、徒歩10分80平米築10年、徒歩15分30平米築20年の3つの仮想物件の説明変数データを徒歩時間(分)、広さ(m2)、築年数(年)の順にデータを並べcsvファイルとし、ファイル名 'apartment_predict.csv' でjupyter notebookファイル(.ipynb)と同じディレクトリに保存しました。
環境
- windows10 home
- Anaconda 3/ jupyter notebook 5.6.0
- Python 3.7.0
- scikit-learn 0.19.2
- matplotlib 2.2.3
コード
学習用csvファイルを読み出し重回帰分析を実施、係数・切片・決定係数(R2)を表示します。説明変数(駅からの時間、面積、築年数)を横軸、マンション価格(実際の値、学習用データを用いた予測結果、予測用データを用いた予測結果)のグラフを表示します。
%matplotlib inline import matplotlib.pyplot as plt import numpy as np from sklearn import linear_model data = np.loadtxt('apartment.csv', delimiter=',',dtype=float) #学習用データのCSVファイル読み込み x1_x2_x3 = data[:, 0:3] # 説明変数(駅からの時間、面積、築年数) y = data[:, 3:4] # 目的変数(物件価格) model = linear_model.LinearRegression() # 学習モデルとして最小二乗法を用いる model.fit(x1_x2_x3,y) # 説明変数(駅からの時間、面積、築年数) vs 目的変数(物件価格)で学習 print(model.coef_) # 線形回帰式の係数の表示 print(model.intercept_) # 線形回帰式の切片の表示 print(model.score(x1_x2_x3,y)) # 線形回帰式の決定係数の表示 predict_result = model.predict(x1_x2_x3) #学習用説明変数で予測の実施 data_predict = np.loadtxt('apartment_predict.csv', delimiter=',',dtype=float) #予測用説明変数のCSVファイル読み込み predict_result2 = model.predict(data_predict) #予測用説明で予測の実施 x1 = data[:, 0:1] # 学習用説明変数(駅からの時間) x2 = data[:, 1:2] # 学習用説明変数(面積) x3 = data[:, 2:3] # 学習用説明変数(築年数) x1_2 = data_predict[:, 0:1] # 予測用説明変数(駅からの時間) x2_2 = data_predict[:, 1:2] # 予測用説明変数(面積) x3_2 = data_predict[:, 2:3] # 予測用説明変数(築年数) #グラフ1 駅からの時間vs物件価格(実際・予測) plt.subplot(2,2,1) plt.scatter(x1,y) plt.scatter(x1,predict_result) plt.scatter(x1_2,predict_result2) #グラフ2 面積vs物件価格(実際・予測) plt.subplot(2,2,2) plt.scatter(x2,y) plt.scatter(x2,predict_result) plt.scatter(x2_2,predict_result2) #グラフ3 築年数vs物件価格(実際・予測) plt.subplot(2,2,3) plt.scatter(x3,y) plt.scatter(x3,predict_result) plt.scatter(x3_2,predict_result2) #グラフの表示 plt.tight_layout() plt.show
実行結果
係数・切片・決定係数(R2)が表示され、各説明変数に対する実際のマンション価格(青)、学習用説明変数を用いた予測値(橙)、予測用説明変数を用いた予測値(緑)のプロットが表示されます。
[ -52.62951061 50.2204353 -102.00007442]
[2036.88939788]
0.5199453414982327
以下のサイトを参考にさせていただきました
Python でデータサイエンス>>scikit-learn で線形回帰 (単回帰分析・重回帰分析)
Scikit-learn で線形回帰