機械学習基礎理論独習

誤りがあればご指摘いただけると幸いです。リンクフリーです。

間違いがあれば、ご指摘いただけると幸いです。リンクフリーです
目次へ戻る

【Python実装 - sklearn使用】直線フィッティング

線形回帰モデルを使う

線形回帰モデルを使うためにimportします。

from sklearn import linear_model

モデルを作成し、学習データを渡し、予測します。
予測時に学習データをN\times 1の行列にしておく必要があります。

# 線形回帰のモデルを作成
model = linear_model.LinearRegression()
# 学習
model.fit(x, y)

# 予測直線表示のためのxを作成 予測するために行列にする(reshape)
x2 = np.arange(-2, 2, 0.1).reshape(-1,1)
y2 = model.predict(x2)

R^2決定係数

回帰の場合結果の妥当性を客観的に評価する指標としてR^2決定係数が知られています。
一般に決定係数と呼ばれるものはいくつかありますが、今回紹介するR^2決定係数は、以下で定義されます。

\begin{eqnarray}
R^1=1-\frac{「観測値」と「予測値」の差の2乗和}{「観測値」と「観測値全体の平均」の2乗和}
\end{eqnarray}

観測値と予測値が真の値に近ければ、分子が近づき、R^2決定係数は1に近くなります。
R^2決定係数の値が1に近いほど、その予測モデルは良いモデルとなります。

r2 = model.score(x, y)
print('決定係数', r2)

ソース

import matplotlib.pyplot as plt
import numpy as np
from sklearn import linear_model

# バラつきのある y = 3x -2 のデータを作成
x = np.random.rand(100, 1)  # 0 〜 1 までの乱数を 100 個つくる
x = x * 4 - 2               # 値の範囲を -2 〜 2 に変更

y = 3 * x - 2  # y = 3x - 2
y += np.random.randn(100, 1)  # 標準正規分布(平均 0, 標準偏差 1)の乱数を加える

# 線形回帰のモデルを作成
model = linear_model.LinearRegression()
# 学習
model.fit(x, y)

# 予測直線表示のためのxを作成 予測するために行列にする(reshape)
x2 = np.arange(-2, 2, 0.1).reshape(-1,1)
y2 = model.predict(x2)

# 係数、切片、決定係数を表示
print('係数', model.coef_)
print('切片', model.intercept_)

r2 = model.score(x, y)
print('決定係数', r2)

# グラフ表示
plt.scatter(x, y, marker ='+')
plt.plot(x2, y2, color='orange')
plt.show()

f:id:olj611:20210421012354p:plain:w600

偉人の名言

f:id:olj611:20210421012723p:plain:w300
小さなことからコツコツと。
西川きよし

参考文献

Pythonによる機械学習入門

動画

無し

目次へ戻る