前回の記事で整えたPython環境で単回帰分析をしてみます。
単回帰分析というのは単純に言えば各データ(x1, y1)・・・(xn, yn)からy=ax+bという式を推定するということです。 推定したyの値と実際のyの値の差の自乗値を最小とするような直線を引きます。
0. モジュールのインストール
今回はscikit-learnのモジュールで実行してみます。
scikit-learnはWindows用インストーラーが配布されていますので、それを使ってインストールします。
1. 実際に実行してみる
ソースコードは以下に置きました。
実行すると以下のような出力と図が出ます。
Coefficients :[ 1.08085339] Intercept :-122.796925076 R2 :0.762157708979
図の青点が実際のデータで、赤線が回帰して求めた直線になります。 ちょうど中心をずばっと通っているのがいいですね。
上の出力結果より、この直線(y=ax+b)の傾き(a)は1.08085339、切片(b)は-122.796925076です。
R2というのはこの直線の当てはまりの度合いを表す指標で0~1の値をとります。1に近いほど当てはまりが良いってことになります。 だいたい0.8くらいあるとかなり当てはまりがいいということなので、今回は0.76とそれなりに良い数値です。
以上で、単回帰分析までやったので次からは実際にデータを使ってやってみることをしていきます。
追伸
一昨日くらいにstatsmodelsモジュールをいろいろと試してみたのですが、linear_model.LinearRegression()で回帰して.predict()メソッドで取得した結果をplot()すると左図のようになってしまい、結局うまくいかず。
解決法知っている人がいれば教えていただけると助かります。
statsmodelsのほうがサマリの出力も以下のように充実していていいのですがねー。
OLS Regression Results ========================================================== Dep. Variable: y R-squared: 0.991 Model: OLS Adj. R-squared: 0.991 Method: Least Squares F-statistic: 2.157e+04 Date: Sat, 24 Aug 2013 Prob (F-statistic): 7.51e-205 Time: 11:54:16 Log-Likelihood: -644.07 No. Observations: 200 AIC: 1290. Df Residuals: 199 BIC: 1293. Df Model: 1 ========================================================== coef std err t P>|t| [95.0% Conf. Int.] ------------------------------------------------------------------------------ x1 0.3669 0.002 146.866 0.000 0.362 0.372 ========================================================== Omnibus: 4.268 Durbin-Watson: 0.124 Prob(Omnibus): 0.118 Jarque-Bera (JB): 5.503 Skew: -0.036 Prob(JB): 0.0638 Kurtosis: 3.809 Cond. No. 1.00 ==========================================================