Pythonと機械学習ライブラリ「scikit-learn」を用いて、重回帰分析を行う方法について解説します。
【重回帰分析とは】Scikit-learnで実装
重回帰分析とは、以下のような線形回帰モデルを用いて予測する手法です。
式
(1)
変数 | 説明 |
---|---|
目的変数(予測したい値) | |
説明変数(予測に利用するデータ) | |
回帰係数(相関係数) |
例えば、「景気動向指数」「若者の平均年収」から「ガチャの売上」を予測しようと考えたとき、「目的変数=ガチャの売上」「説明変数=景気動向指数、若者の平均年収」となります。
書式
機械学習ライブラリ「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_ | 切片の値を取得します。 |
参考文献 | 公式ドキュメント(英語) |
【サンプルコード】CSVファイルを読み込んで重回帰分析
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 # CSVファイルの読み込み data = pd.read_csv("C:\prog\python\scikit\data.csv", sep=",") # 回帰モデルの呼び出し clf = linear_model.LinearRegression() # 説明変数にx1とx2のデータを使用 X = data.loc[:, ['x1', 'x2']].values # 目的変数にx3のデータを使用 Y = data['x3'].values # 予測モデルを作成(重回帰) clf.fit(X, Y) # 回帰係数と切片の抽出 a = clf.coef_ b = clf.intercept_ # 回帰係数 print("回帰係数:", a) # 回帰係数: [ 0.70068905 -0.64667957] print("切片:", b) # 切片: 12.184694815481187 print("決定係数:", clf.score(X, Y)) # 決定係数: 0.6624246214760455 # 学習結果を出力 joblib.dump(clf, 'multiple.learn')
今回はdata.csvのを説明変数、
を目的変数として重回帰分析を行いました。
その結果、は以下の式で推測できるようになります。
x3 = 0.70068905 * x1 + -0.64667957 * x2 + 12.1846948155
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】重回帰モデルのファイル出力・保存 |
【サンプルコード】学習済みファイルの読み込み
最後にsklearn.externals.joblib.loadでCSVファイルを読み込んで、そのデータから重回帰分析を行い、生成して出力した回帰モデルを復元(インポート)しました。
# -*- 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\multiple.learn') # 回帰係数と切片の抽出 a = clf.coef_ b = clf.intercept_ # 回帰係数 print("回帰係数:", a) print("切片:", b) """ 回帰係数: [ 0.70068905 -0.64667957] 切片: 12.1846948155 """
– | 関連記事 |
---|---|
1 | ■【Scikit-learn】重回帰モデルのファイルを読み込む(インポート) |
【その他】t値などを計算する場合は
Scikit-learnにはt値を計算する機能がないようなので、t値を計算したい場合はPythonモジュール「statsmodels」を用いましょう。
– | 関連記事 |
---|---|
1 | 【Python/statsmodels】重回帰分析と決定係数・t値の計算 |
– | 関連記事 |
---|---|
1 | ■Scikit-learn入門・使い方 |
2 | ■Scikit-learnをインストールする方法 |
3 | ■Python入門 サンプル集 |
コメント