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」で機械学習を行う方法について入門者向けに使い方を解説します。
コメント
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