1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

線形回帰(load_boston)

Last updated at Posted at 2020-10-05

今回は線形回帰の実装(コード)をまとめていきます。

##■ 線形回帰の手順

次の6つのSTEPで進めます。

  1. モジュールの用意
  2. データの準備
  3. モデルの作成
  4. 予測値の算出
  5. 残差プロット
  6. モデルの評価

##1. モジュールの用意
最初に、必要なモジュールをインポートしておきます。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

# データセットを読み込むモジュール
from sklearn.datasets import load_boston

# 訓練データとテストデータを分割するモジュール
from sklearn.model_selection import train_test_split

# 線形回帰(最小二乗法)を行うモジュール
from sklearn.linear_model import LinearRegression

# 平均二乗誤差(MSE)で評価するモジュール
from sklearn.metrics import mean_squared_error

# 決定係数(r2_score)で評価するモジュール
from sklearn.metrics import r2_score

##2. データの準備 データの取得をした後、処理しやすいように分割を行います。
# Bostonデータセットの読み込み
boston = load_boston()

# 目的変数と説明変数に分ける
X, y = boston.data, boston.target

# 訓練データとテストデータに分割する
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.3)

##3. モデルの作成 最初に線形回帰の実行関数(インスタンス)を作成し、訓練データに当てはめます。 そうすると、最小二乗法によりモデル式(回帰式)の各重みを求めることができます。

# 線形回帰のインスタンスを作成
lr = LinearRegression()

# 最小二乗法により、各重みを求める
lr.fit(X_train, y_train)

# 切片を出力
print(lr.intercept_)

# 回帰係数(傾き)を出力
print(lr.coef_)

<出力結果>


lr.intercept_: 22.38235838998073

lr.coef_: [-1.30942592e-01  3.93397530e-02  3.34152241e-02  2.69312969e+00
 -1.77337676e+01  3.95093181e+00 -1.16396424e-03 -1.51204896e+00
  3.36066399e-01 -1.37052283e-02 -9.54346277e-01  8.23484120e-03
 -5.17616471e-01]

lr.intercept_:切片(重み $w_0$)
lr.coef_:回帰係数・傾き(重み $w_1$ ~ $w_{13}$)

よって、下記のモデル式(回帰式)における具体的な数値が求まりました。

$ y = w_0 + w_1x_1+w_2x_2+ \cdots + w_{12}x_{12} + w_{13}x_{13}$


##4. 予測値の算出
先ほど作成したモデル式にテストデータ(X_test)を入れて、予測値(y_pred)を出します。


y_pred = lr.predict(X_test)
y_pred

<出力結果>


y_pred: [34.21868721 14.30330361 18.5687412  19.17046762 22.60218908 31.75197222
 13.56424899 19.9953213  36.91942317 ..... 25.08561495, 13.68910956]

##5. 残差プロット モデルの評価をする前に、残差のプロットを見ておきます。 残差:予測値と正解値の差(y_pred - y_test)
# 描画オブジェクトとサブプロットの作成
fig, ax = plt.subplots()

# 残差のプロット
ax.scatter(y_pred, y_pred - y_test, marker = 'o')

# y = 0 の赤い直線をプロット
ax.hlines(y = 0, xmin = -10, xmax = 50, linewidth = 2, color = 'red')
 
# 軸ラベルを設定する
ax.set_xlabel('y_pred')
ax.set_ylabel('y_pred - y_test')

# グラフのタイトルを追加
ax.set_title('Residual Plot')

plt.show()

<出力結果>
image.png
赤い線(y_pred - y_test = 0)の上と下で、バランス良くデータが散らばっているので
予測値の出力に大きな偏りはないことが確認できます。


##6. モデルの評価
線形回帰では、下記2つの指標で評価を行います。

・平均二乗誤差(MSE)
・決定係数(r2_score)


# 平均二乗誤差(MSE)
print(mean_squared_error(y_test, y_pred))

# 決定係数
print(r2_score(y_test, y_pred))

<出力結果>


MSE: 19.858434053618794
r2_score: 0.7579111486552739

以上より、2つの指標で評価することができました。


##■ 最後に
線形回帰では上記1~6の手順をもとに、モデルの作成・評価を行っていきます。

今回は初学者の方向けに、実装(コード)のみまとめさせていただきましたが
今後タイミングを見て、理論(数式)についても記事を作成していければと思います。

ご精読いただき、ありがとうございました。

参考文献:Pythonによるあたらしいデータ分析の教科書
    (Python 3 エンジニア認定データ分析試験 主教材)

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?