pocketyのブログ

日記です。

線形回帰・単回帰による住宅価格予測モデル

#単回帰の予測モデル

# ライブラリのインポート
# %matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error

# 住宅価格データセットの読み込み

df.columns=['CRIM','ZN', 'INDUS', 'CHAS', 'NOX', 'RM', 'AGE', 'DIS', 'RAD', 'TAX', 'PTRATIO', 'B', 'LSTAT', 'MEDV']

# 先頭5行の表示
pd.DataFrame(df.head())

# データフレームの形状
print('dfの形状', df.shape)

# 特徴量に平均部屋数(RM)の20件を設定
X = df[:20][['RM']].values

# 正解に住宅価格(MEDV)の20件を設定
y = df[:20]['MEDV'].values

# 特徴量と正解の先頭五行を表示
X[:5], y[:5]

# 特徴量と正解の形状
X.shape, y.shape

# 線形回帰モデルを作成
model = LinearRegression()

# modelの訓練
model.fit(X, y)

# パラメータの取り出し
print('傾き: %.2f' % model.coef_)
print('切片: %.2f' % model.intercept_)

# モデルを使い、部屋数から住宅価格を予測
new_data = np.array([[6]])
model.predict (new_data)

# 一次関数作成用に部屋数の変数 X_pltを作成
X_plt = np.arange(5, 9, 1)
print('一次元配列のX_plt', X_plt)
# X_pltを二次元配列に変換
X_plt = np.arange(5, 9, 1) [:, np.newaxis]
print('二次元配列のX_plt', X_plt)

# 散布図と一次関数
plt.figure(figsize=(8,4)) # プロットのサイズ指定

#モデルのプロット
y_pred = model.predict(X_plt)

# 部屋数と住宅価格の散布図と一次関数のプロット
plt.scatter(X, y, color='blue', label='data')
plt.plot(X_plt, y_pred, color='red', linestyle='-', label='LinearRegression')
plt.ylabel('Price in $1000s [MEDV]')
plt.xlabel('Average number of rooms [RM]')
plt.title('Bostom house-prices')
plt.legend(loc='lower right')

plt.show()