Pythonと機械学習ライブラリ「scikit-learn」を用いて、単回帰分析を行う方法について解説します。
単回帰分析とは
単回帰分析とは、以下のようなモデル(式)を用いて予測する手法です。
単回帰直線の式
(1)
変数 | 説明 |
---|---|
目的変数(予測値) | |
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

【Scikit-learn】単回帰モデルのファイル出力・保存
この記事では、Pythonと機械学習ライブラリ「scikit-learn」を用いて、単回帰分析した結果を出力(エクスポート・ダンプ)する方法について解説します。

【Scikit-learn】単回帰モデルのファイルを読み込む(インポート)
この記事では、Pythonと機械学習ライブラリ「scikit-learn」を用いて、単回帰分析した結果を出力(エクスポート・ダンプ)する方法について解説します。

【Scikit-learn】機械学習入門・使い方・読み方
この記事では、Pythonモジュール「Scikit-learn」で機械学習を行う方法について入門者向けに使い方を解説します。
コメント
youtubeからこちらのサイトに来ました。
貴重な情報ありがとうございます。
【Scikit-learn】単回帰分析の所で質問なんですが、
# 説明変数xに “x1″のデータを使用
x = data.loc[:, [‘x1’]].values
# 目的変数yに “x2″のデータを使用
y = data[‘x2’].values
にするとあります。
locでx1のデータを抜き出すのと、x2のデータではデータの型が違うのですか?
どちらもSeries型となって、valuesでnumpy配列にしていると思うのですが。
xが2次元配列、yが1次元配列というところまで勉強している程度なんで、
基礎的な質問で申し訳ないですが、どのような意図でこのようにしているのか教えて下さい。
fit()にXとyを代入する際、説明変数Xは行列(2次元配列)を与える必要があります。
data[‘x2’].valuesだと、1次元配列として1つの配列を取得するため、二次元配列に変換してやるコードを追加する必要があります。
その手間を省く意味と、重回帰の場合はlocを使わないといけないという理由でdata.loc(複数のカラムを2次元配列で取得)としています。
https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LinearRegression.html