【Scikit-learn】単回帰分析のサンプルコードと計算結果の再利用

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

単回帰分析の概要と直線式

回帰分析では、「結果(目的変数)」と「結果に影響を及ぼすデータ(説明変数)」の関係性を統計的に求める手法です。2つのデータの関係性がわかれば、将来どのような結果となるかの予測を行うことができます。説明変数が1つの場合が「単回帰分析」、複数の場合は「重回帰分析」といいます。

予測対象:連続値
学習タイプ:教師あり
可読性:○
並列処理:✕

単回帰分析は、以下のようなモデル(式)を用いて予測を行います。

単回帰直線の式

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

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

回帰直線の係数と切片は、最小二乗法や最尤推定によって求めます。
「景気動向指数」から「ガチャの売上」を予測しようと考えたとき、「目的変数=ガチャの売上」「説明変数=景気動向指数」となります。
相関係数(重み)は、目的変数が説明変数に対してどのくらい影響を及ぼすかを示します。

401 Unauthorized

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

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

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


読み込むデータ

data.csv


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

【線形回帰で作成したモデル式】

x2 = -0.0495480955455 * x1 + 20.1197546804

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

作成して保存したモデル(clf.learn)は、以下のように読み込んで使うこともできます。


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

コメント

  1. you より:

    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

      fit(self, X, y, sample_weight=None)[source]
      
      X{array-like, sparse matrix} of shape (n_samples, n_features)
      Training data
      
      yarray-like of shape (n_samples,) or (n_samples, n_targets)
      Target values. Will be cast to X’s dtype if necessary