【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ファイルを読み込んで、そのデータから単回帰分析を行いました。

【サンプルコード】単回帰モデルの作成

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

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

# データ読み込み
data = pd.read_csv("C:\prog\python\scikit\data.csv", sep=",")

# 線形回帰モデル
clf = linear_model.LinearRegression()

# 説明変数xに "x1"のデータを使用
x = data.loc[:, ['x1']].values

# 目的変数yに "x2"のデータを使用
y = data['x2'].values

# 予測モデルを作成(単回帰)
clf.fit(x, y)

# パラメータ(回帰係数、切片)を抽出
[a] = clf.coef_
b = clf.intercept_  

# パラメータの表示
print("回帰係数:", a)
print("切片:", b) 
print("決定係数:", clf.score(x, y))

# 学習結果の出力
joblib.dump(clf, 'C:\prog\python\scikit\clf.learn') 

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

【サンプルコード】単回帰モデルの読み込み

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

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

# 学習結果を読み込み
clf = joblib.load('C:\prog\python\scikit\clf.learn')

# 回帰係数と切片の抽出
[a] = clf.coef_
b = clf.intercept_ 

# 回帰係数
print("回帰係数:", a) # 回帰係数: -0.0495480955455
print("切片:", b)  # 切片: 20.1197546804
関連記事
1 【Scikit-learn】単回帰モデルのファイル出力・保存
2 【Scikit-learn】単回帰モデルのファイルを読み込む(インポート)
31 Scikit-learn入門・使い方
4 Scikit-learnをインストールする方法
5 Python入門 サンプル集

コメント

タイトルとURLをコピーしました