前回の記事で、ボストンの住宅価格を重回帰分析する例を紹介した。

説明変数の多い重回帰分析をグラフで可視化することは難しいので、今回は単回帰分析の結果をMatplotlibを使って可視化する方法を紹介する。

単回帰分析モデルの作成

データセットの読み込みから学習まで一気に書いてみた。

from sklearn.datasets import load_boston
from sklearn import linear_model

boston = load_boston()

# 住宅価格(目的変数)
y = boston.target

# 平均部屋数(説明変数)
x_rm = boston.data[:, [5]]

# モデル学習
model = linear_model.LinearRegression()
model.fit(x_rm, y)

前回の記事で分かったとおり、今回は回帰係数の高い「平均部屋数」を説明変数としてみた。

回帰直線をプロットする

学習により求められた回帰直線をグラフにプロットしてみる。

%matplotlib notebook
import matplotlib.pyplot as plt

plt.scatter(x_rm, y, color='blue')
plt.plot(x_rm, model.predict(x_rm), color='red')

plt.ylabel('Price ($1,000)')
plt.xlabel('Number of Rooms')

単回帰の回帰式は以下のとおりだ。

$$y = wx + b$$

学習により、以下のとおり係数wと切片bが求められる。

w = model.coef_
b = model.intercept_

print(w)
print(b)
# [9.10210898]
# -34.67062077643857

この回帰式を先ほどのplot関数に当てはめても全く同じ回帰直線が描かれる。

plt.scatter(x_rm, y, color='blue')
plt.plot(x_rm, (w * x_rm + b), color='red')