読者です 読者をやめる 読者になる 読者になる

Pythonとscikit-learnで単回帰分析

プログラミング Python データ解析・可視化

前回の記事で整えたPython環境で単回帰分析をしてみます。

単回帰分析というのは単純に言えば各データ(x1, y1)・・・(xn, yn)からy=ax+bという式を推定するということです。 推定したyの値と実際のyの値の差の自乗値を最小とするような直線を引きます。

0. モジュールのインストール

今回はscikit-learnのモジュールで実行してみます。

scikit-learnWindowsインストーラーが配布されていますので、それを使ってインストールします。

1. 実際に実行してみる

ソースコードは以下に置きました。

Pythonとsklearnで単回帰分析 · GitHub

実行すると以下のような出力と図が出ます。

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
==========================================================

関連エントリ


Pythonエンジニア養成読本[いまどきの開発ノウハウ満載!]

Pythonエンジニア養成読本[いまどきの開発ノウハウ満載!]

10年戦えるデータ分析入門 SQLを武器にデータ活用時代を生き抜く (Informatics &IDEA)

10年戦えるデータ分析入門 SQLを武器にデータ活用時代を生き抜く (Informatics &IDEA)