ラビットチャレンジレポート:機械学習前半

回帰モデル

  • 回帰問題:ある入力から出力を予測する問題

    • 直線で予測→線形回帰

    • 曲線で予測→非線形回帰

  • 線形回帰モデル

              パラメータ:  w=(w_1,w_2 .... w_m )^T \in R

  • 線形結合(入力とパラメータの内積
    • 入力と未知のパラメータの各要素を掛け算し足し合わせたもの

    • 入力ベクトルとの線形結合に加え、切片も足し合わせる

              線形結合:  \hat{y} = w^{T}x+w_0=\displaystyle \sum_{j=1}^{m}w_jx_j+w_0

  • 説明変数が1次元の場合

  目的変数 y、切片  w0 、回帰係数  w1、説明変数  x1 、及び誤差 ε を用いて下記のように表現できる。

           y=w_0+w_1+x_1+ε

       行列を用いて一般化すると下記のようになる。

    \boldsymbol{y}=\boldsymbol{Xw}+\boldsymbol{ε}

  • データの分割と汎化性能測定
    • モデルの汎化性能を評価するため、学習用データと検証用データに分割し、学習用データで学習したモデルを検証用データで評価する。

  • 最小二乗法

   線形回帰モデルのパラメータは、最小二乗法で推定する。

    • 平均二乗誤差(残差平方和)

     データとモデル出力の二乗誤差の和

    • 最小二乗法

     学習データの平均二乗誤差を最小とするパラメータを探索する

 MSE_{train}=\dfrac{1}{n_{train}} \displaystyle \sum_{i=1}^{n_{train}}\left(\hat{y}_i^{(train)}-y_i^{(train)}\right)^2

      wの推定値\hat{w}は、下記のようにあらわせる。

  \hat{w}=arg min MSE_{train}=0

 MSE w に関して微分したものが0となる wの点を求める。

 \dfrac{\partial}{\partial w}MSE_{train}

     それぞれ行列を用いて、下記のようにあらわせる

回帰係数

  \hat{w}=\left(X^{(train)T}X^{(train)}\right)^{-1}X^{(train)T}y^{(train)}

予測値

    \hat{y}=X\left(X^{(train)T}X^{(train)}\right)^{-1}X^{(train)T}y^{(train)}

ボストンの住宅データセットを用い、部屋数4、犯罪率0.3の物件の価格を予測する。 

環境設定

from sklearn.datasets import load_boston
from sklearn.linear_model import LinearRegression
import pandas as pd
import numpy as np
boston = load_boston()
print(boston.feature_names)

['CRIM' 'ZN' 'INDUS' 'CHAS' 'NOX' 'RM' 'AGE' 'DIS' 'RAD' 'TAX' 'PTRATIO'
'B' 'LSTAT']

学習データをDataFrame形式にし、ターゲットデータを追加

df=pd.DataFrame(data=boston.data,columns=boston.feature_names)
df["PRICE"]=np.array(boston.target)
  •  単回帰モデル

学習データとしては、部屋数(RM)を用い、ターゲットを価格としてモデル学習をする。

data=df.loc[:,'RM'].values
target=df.loc[:,'PRICE'].values
model=LinearRegression()
model.fit(data.reshape(-1,1),target.reshape(-1,1))

部屋数4の物件価格の予測

model.predict([[4]])

array(1.73781515)

1737.8ドルと予想される。

  • 重回帰(2変数)モデル

部屋数(RM)と犯罪率(CRIM)を学習データとしてモデルを学習する。

data2=df.loc[:,['RM','CRIM']].values
model2=LinearRegression()
model2.fit(data2,target)

部屋数4、犯罪率0.3の物件価格の予測

model2.predict([[4,0.3]])

array([4.24007956])

4240ドルと予測された。

このときの回帰係数と切片は、下記のように予測される。

print(model2.coef_,model2.intercept_)

[ 8.39106825 -0.26491325] -29.24471945192995

回帰係数は、 w_{RM}=8.39, w_{CRIM}=-0.26

切片  w_0=-29,24