【Scikit-learn】単回帰分析を行う方法

Pythonライブラリ「scikit-learn」で単回帰分析を行う方法についてサンプルコード付きで解説します。

単回帰分析とは

単回帰分析(Simple Linear Regression)は、1つの特徴量(x)から1つのターゲット変数(y)を予測するモデルです。数学的には以下の式で表されます。

予測値を計算する式:$ \hat{y} = ax + b $
実測値の関係:$ y = ax + b + \varepsilon $

変数 説明
$ \hat{y} $ モデルが計算したターゲット変数(目的変数)の推定値 視聴者数(予測値)
$ y $ 実際に観測されたターゲット変数(目的変数)の値 視聴者数(実測値)
$ x $ 特徴量(予測したい値に影響を与えるもの。説明変数ともいう) チャンネル登録者数、Xのフォロワー数など(予測値)
$ a $ 傾き($x$が1増えると$y$がどれだけ増えるか。重み、回帰係数ともいう) 登録者数が1人増えたときの視聴者数の増加量
$ b $ 切片($x=0$のときの$y$の値) 登録者数が0人のときの理論的な視聴者数
$ ε $ 誤差項(予測と実際のズレ) 「モデルが説明できない部分」であり、ノイズや他の未考慮の要因を含みます。

予測値を計算する式$ \hat{y} = ax + b $は、「$x$に比例して$\hat{y}$が変化する関係」を表す、傾き$a$、切片$b$の一次関数です。グラフにすると以下のようなまっすぐな直線になります。この直線を「回帰直線」といいます。

単回帰分析で高い予測精度を出すには、例えば登録者数が2倍になったら視聴者数も2倍になるような比例関係があることが前提となります。

単回帰分析の仕組みについては、以下ページで別途解説しています。

単回帰分析とは?計算式や例をわかりやすく解説
単回帰分析の式と意味原理、求め方、相関係数、決定係数、例題などについてわかりやすく解説します。

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

scikit-learnでは LinearRegression クラスを使ってこのモデルを構築できます。


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

$ \widehat{y} = 0.72 * x -57 $

サンプルコード② 学習済みモデルの保存・読み込み



サンプルコード③ CSVファイルを読み込んで学習

読み込むデータ

data.csv


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

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

サンプルコード④ 相関係数

サンプルコード⑤ 訓練用データに対するフィット

サンプルコード⑥ 予測の不確かさ

サンプルコード⑦ 汎化性能の検証

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

関連ページ

Scikit-learnの使い方まとめ(機械学習入門・サンプル集)
Pythonモジュール「Scikit-learn」で機械学習を行う方法について入門者向けに使い方を解説します。
この記事を書いた人
西住技研

プログラミング言語「Python」を研究、仕事、趣味でデータ分析や作業自動化などに活用してきたノウハウを情報発信しています。
筆者の詳しいプロフィールやお問合せはこちらのページまで。
YoutubeX(旧Twitter)でも情報発信中です!

西住技研をフォローする
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