Python3(scikit-learn)で単回帰分析

Python3コード

#!/usr/bin/env python3


"""(docstring)
"""


# (PEP8に従うなら、importはアルファベット順に)。
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
from sklearn import linear_model


def main():
    """(docstring)
    """

    X = pd.DataFrame([29, 28, 34, 31, 25,
                    29, 32, 31, 24, 33,
                    25, 31, 26, 30])
    print(X)
    print('')

    Y = pd.DataFrame([77, 62, 93, 84, 59,
                    64, 80, 75, 58, 91,
                    51, 73, 65, 84])
    print(Y)

    lm = linear_model.LinearRegression()
    print(lm.fit(X, Y))
    # 警告(LAPACK bug 0038)が出る場合、以下で、無視してもいいとのこと。
    # https://github.com/scipy/scipy/issues/5998
    print('')

    px = np.arange(X.min(), X.max(), 0.01)[:,np.newaxis]
    # print(px) # 簡単にprint()するとターミナルが大変になる。

    py = lm.predict(px)
    # print(py) # 簡単にprint()するとターミナルが大変になる。

    plt.scatter(X, Y, color='red')
    plt.plot(px, py, color='blue')
    plt.show()

    print(lm.coef_)
    print(lm.intercept_)

if __name__ == '__main__':
    main()

出力

     0
0   29
1   28
2   34
3   31
4   25
5   29
6   32
7   31
8   24
9   33
10  25
11  31
12  26
13  30

     0
0   77
1   62
2   93
3   84
4   59
5   64
6   80
7   75
8   58
9   91
10  51
11  73
12  65
13  84

LinearRegression(copy_X=True, fit_intercept=True, n_jobs=1, normalize=False)
[[ 3.73788546]]
[-36.36123348]

matplotlibのスクリーンショット

f:id:my_notes:20170726161930p:plain

(以下、個人の見解

KaggleとかやりたいならPythonなんだろうけど、こういう分析ならR(R言語)のほうがやりやすいと思う。

自分がなにをやってるのかわかるという意味では、自分としてはR(R言語)がいいかなあ)。

R(R言語)での単回帰記事

my-notes.hatenablog.com

参考Webサイト

qiita.com

参考文献

マンガでわかる統計学 回帰分析編

マンガでわかる統計学 回帰分析編