機械学習: 線形回帰の理論から実装まで

※ 本記事では線形回帰の理論から実装までをざっくり説明しようと思ってます。
 

1.線形回帰について

● 線形回帰とは、データの分布を線によって表現する手法である。
f:id:shiba147:20190811160244p:plain
Fig. 1 一つの従属変数と1つの独立変数がある線形回帰の例

Fig. 1 は線形回帰の中で最も簡単な例で、一つの独立変数Xから従属変数Yの予測値を返すことが出来る。

この関係を最も基本的なモデルで表したものが以下の式で表現され

最適なパラメータa,bを求める必要がある。

Y  =  aX + b

 

2. 最適化と最適なパラメータの求め方

・最適化とは、関数・パラメータなどを最適な状態に近づけることで正確な答えを返すように調整すること。

・基本的に最小二乗法(データと予測値の二乗が最小になるように調整)で推定する。

・式を変形し、解析的に値を求めることが出来る。

 → データ数に応じて計算時間がかかる

   常に解が得られるとは限らないなどの問題がある。

そのため、勾配降下法を用いてパラメータを設定する。

※勾配降下法は、別の記事でまとまとめます

 

3. pythonで線形回帰の実装

・使用するライブラリをインポート

import numpy as np
from sklearn.linear_model import LinearRegression
import matplotlib.pyplot as plt
#matplotlib.inline

0から1までの200行1列の乱数を生成

X = np.random.rand(200, 1)

生成した乱数の確認

array([[0.53457546],
       [0.0574828 ],
       [0.28036815],
       [0.51810584],
       [0.59211173],
       [0.82265066],
             :         
       [0.78425827]])          

Y  =  aX + bのaXに乱数をかけることによって分散させる
Xとyの散布図をプロット

y = 7 * X + np.random.rand(200, 1) + 14 
plt.scatter(X, y)

f:id:shiba147:20190816141733p:plain
インポートしてあるsklearn.linear_modelのLinearRegressionでモデルを生成し、fit関数で予測を行なう。

lin_reg = LinearRegression().fit(X, y.ravel())

LinearRegressionで学習出来ているか切片(intercept)、傾き(coef)を確認する

lin_reg.intercept_, lin_reg.coef_
(14.593357900010476, array([6.88245782]))

切片、傾きともに良い感じによそくできていることが分かります
この結果をプロットしてみたいと思います。

X_reg = np.array([[0], [1]])
plt.plot(  lin_reg.coef_ * X_reg + X_reg, lin_reg.intercept_ , 'red')
plt.scatter(X, y)

f:id:shiba147:20190816143502p:plain
今回はLinearRegressionで線形回帰を実装してみました