【Scikit-learn】単回帰分析

この記事では、Pythonと機械学習ライブラリ「scikit-learn」を用いて、単回帰分析を行う方法について解説します。

単回帰分析とは

単回帰分析とは、以下のようなモデル(式)を用いて予測する手法です。

単回帰直線の式

(1) \begin{eqnarray*} \widehat{y} = a * x + b \end{eqnarray*}

変数 説明
\widehat{y} 目的変数(予測値)
y 目的変数(観測値)
x 説明変数(目的変数と相関のある観測値)
a 相関係数(重み、回帰係数)
b 切片(定数)

相関係数(重み)は、目的変数が説明変数に対してどのくらい影響を及ぼすかを示します。

(詳細)単回帰分析とは(式と意味、相関係数、直線、決定係数、例題など)

Scikit-learnでは、「linear_model.LinearRegression()」を用いることで単回帰分析を行うことができます。
今回は、CSVファイルを読み込んで、そのデータから単回帰分析を行いました。

ソースコード

サンプルプログラムのソースコードです。

Python3

# -*- coding: utf-8 -*-
import pandas as pd
import numpy as np
from sklearn import linear_model

def main():
    data = pd.read_csv("data.csv", sep=",")
    clf = linear_model.LinearRegression()
    # 説明変数に "x1"のデータを使用
    X = data.loc[:, ['x1']].as_matrix()
    # 目的変数に "x2"のデータを使用
    Y = data['x2'].as_matrix()
    # 予測モデルを作成(単回帰)
    clf.fit(X, Y)
    # 回帰係数と切片の抽出
    [a] = clf.coef_
    b = clf.intercept_  
    # 回帰係数
    print("回帰係数:", a)
    print("切片:", b) 
    print("決定係数:", clf.score(X, Y))

if __name__ == "__main__":
    main()

CSVファイル

data.csv

"x1","x2","x3"
45,17.5,30
38,17.0,25
41,18.5,20
34,18.5,30
59,16.0,45
47,19.0,35
35,19.5,25
43,16.0,35
54,18.0,35
52,19.0,40

実行結果

サンプルプログラムの実行結果は下記の通りです。

回帰係数: -0.0495480955455
切片: 20.1197546804
決定係数: 0.109433563543

今回はdata.csvのx2を説明変数、x1を目的変数として単回帰分析を行いました。
その結果、x2は以下の式で推測できるようになります。
x2 = -0.0495480955455 * x1 + 20.1197546804

関連記事
1 Scikit-learn入門・使い方
2 Scikit-learnをインストールする方法
3 Python入門 サンプル集