【Scikit-learn】重回帰モデルのファイル出力・保存

Pythonと機械学習ライブラリ「scikit-learn」を用いて、重回帰分析した結果(モデル)を出力(エクスポート・ダンプ)する方法について解説します。

重回帰分析とは

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

(1) \begin{eqnarray*} y = a_1x_1 + a_2x_2 + a_3x_3+ .... +a_nx_n \end{eqnarray*}

変数 説明
y 目的変数(予測したい値)
x_1, x_2, x_3 ... x_n 説明変数(予測に利用するデータ)
a_1, a_2, a_3 .. .a_n 回帰係数(相関係数)

書式

機械学習ライブラリ「scikit-learn」では、sklearn.linear_model.LinearRegressionクラスで重回帰分析を行うことが出来ます。
その使い方は以下の通りです。

sklearn.linear_model.LinearRegression(fit_intercept=True, normalize=False, copy_X=True, n_jobs=1)
引数 内容
fit_interceptz Trueで切片を求めます。目的変数が原点を必ず通るデータを用いる場合はFalseにします。
normalize Trueで説明変数を事前に正規化します。
copy_X Trueでメモリ内でデータを複製してから実行します。
n_jobs CPUで計算する際のジョブの数です。(-1ですべてのジョブを使用)

その他メソッド

「sklearn.linear_model.LinearRegression」クラスの各メソッドの使い方は次の通りです。

メソッド 内容
fit(x, y[, sample_weight]) 説明変数x、目的変数yとして線形回帰モデルを求めます。
get_params([deep]) 推定に用いたパラメータを取得します。
predict(x) 生成した線形回帰モデルとデータxを用いて予測します。
score(X, y[, sample_weight]) 決定係数を求めます。
set_params(**params) パラメータを設定します。
coef_ 偏回帰係数を取得します。
intercept_ 切片の値を取得します。

【参考文献】
http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LinearRegression.html

説明変数が複数の場合は「重回帰分析」と呼ばれます。
PythonモジュールScikit-learnでは、「linear_model.LinearRegression()」を用いることで単回帰分析を行うことができます。
今回は、CSVファイルを読み込んで、そのデータから重回帰分析を行い、結果(モデル)をファイルに出力(エクスポート)ました。
(sklearn.externals.joblib.dumpを使います)

ソースコード

サンプルプログラムのソースコードは下記の通りです。

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

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

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

実行結果

サンプルプログラムの実行結果は下記の通りです。
【学習ファイル】
multiple.learn

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