In [33]:
%pylab inline
import numpy as np
import pylab as pl
まずは、Pylabの使い方として直線を引いてみる
In [21]:
X = np.arange(0.0, 1.0, 0.01)
Y = 2.3 + X * 3.5
pl.plot(X, Y)
Out[21]:
In [22]:
noise = np.random.normal(scale=0.5, size=X.shape)
Y = 2.3 + X * 3.5 + noise
pl.scatter(X, Y)
Out[22]:
In [23]:
from sklearn.linear_model import LinearRegression
X_ = np.array([X]).T # transform to fit sklearn-style-array
reg = LinearRegression()
reg.fit(X_, Y)
Y_pred = reg.predict(X_)
pl.plot(X, Y_pred)
pl.scatter(X, Y)
Out[23]:
手法の良さを評価するとき、2つの観点が必要になる。
回帰の場合、誤差は「平均二乗誤差」を使う
In [32]:
err = np.average((Y - Y_pred) ** 2)
err
Out[32]:
ただし、このような方法で評価すると、過学習したものの精度が高くなってしまうが、これは望んだ評価指標ではない。(PRMLの過学習の例)
一般のユースケースを考えると、「過去のデータ」を使って学習し「未来のデータ」を予測したい。
そこで、データを「学習データ」と「テストデータ」にランダムに分割し、(例:学習データ80%、テストデータ20%)「学習データ」でfitし、「テストデータ」をpredictする。
In [ ]:
また、より正確にはcross validationという手法を使う(パラメータチューニングのときなど)。
In [ ]:
今回のテストデータでは、
だが、実際のデータでは、
といったことが発生する
In [ ]: