本文へ移動
カテゴリ

Webマーケ

Webマーケの記事すべてSEOサイト運営データマネジメントビジネス・マーケ概論広告

インタビュー

インタビューの記事すべて

おすすめサービス

おすすめサービスの記事すべて

おすすめ勉強法

おすすめ勉強法の記事すべて

おすすめ書籍

おすすめ書籍の記事すべて

データサイエンス

データサイエンスの記事すべてデータ解析品質工学多変量解析機械学習生成AI統計学

プログラミング

プログラミングの記事すべてPythonRSQLプログラミングスクール

スタビジについて

記事一覧運営者情報お問い合わせ

最小二乗法の導出方法についてわかりやすく解説!

目次
ウマたんウマたん

当サイト【スタビジ】の本記事では最小二乗法について解説していきます。最小二乗法とは、観測されたデータに一番よく合う直線や曲線を見つけるための方法です。これを使うと、たくさんの点(データ)の中でそれらの点に一番近い線を引くことができます。今回はそんな最小二乗法の導出方法について解説していきます。

こんにちは!

スタビジ編集部です!

今回は最小二乗法について解説していきます!

最小二乗法とは「データに一番よく合う直線や曲線を見つけるための方法」です。

これを使うと、たくさんの点(データ)の中で、それらの点に一番近い線を引くことができます。

ウマたんウマたん

統計学を学び始めると必ず学び始める概念なので、しっかりと理解していきましょう!(もちろん復習にも使うことができます。)

この記事では、そんな最小二乗法の導出方法について解説していきます!

以下のYoutube動画でも解説していますので合わせてチェックしてみてください!!

YouTubeの動画

最小二乗法の導出方法について解説!

それでは具体的な事例で見ていきましょう!

たとえば、クラスの5人の友達で英語と数学のテストの点数の関係を調べたいとします。

5人の友達で英語と数学のテストの点数をグラフにプロットしてみることにしましょう。

しかし、みんなの点はバラバラで一つの線で完全には結べません。

そこで、最小二乗法を使うとこれらの点の「真ん中」を通るような直線を引くことができます。

これが「最も合っている直線」というわけです。

最小二乗法 例

どうして「最も合っている」と言えるのかというと、各点から直線までの距離(これを「残差」といいます)の二乗(つまり、距離×距離)を合計したものが最小になる線を引くからです。

ウマたんウマたん

なぜ二乗するかというと、点が直線より上にある場合も下にある場合もあるから単純に距離を足し合わせてしまうとプラスとマイナスが打ち消しあってしまうからだよ!二乗することで、すべてプラスにして合計しやすくしているんだ!

この点で言えば、絶対値でも問題なさそうですが、正規分布との相性が良く、2乗した値が使われています!

最小二乗法は「残差の平方和を最小にする方法」であり、これによって尤もらしい直線を表せるパラメータを導出することができるわけですね!

問題設定(単回帰分析の場合)

ここからちょっと数式を交えて見ていきましょう!

実際に最小二乗法の問題設定を見ていきます!

最小二乗法は変数が大量にある多変数問題でも使えるのですが、ここではシンプルな単変数において単回帰分析を行いたいケースで数式展開をしていきましょう!

yiy_{i}は目的変数、xix_{i}は説明変数、yi^\hat{y_{i}}は予測値とすると残差平方和は以下のようになり、この式を最小化するβ0β_{0}とβ1β_{1}を見つけたいということになります。

E=∑i=1n(yi−(β0+β1xi))2E=\sum_{i=1}^{n}(y_{i}-(β_{0}+β_{1}x_{i}))^{2}

回帰式はβ0+β1xiβ_{0}+β_{1}x_{i}で表されているので、回帰式で算出した予測値と観測値であるデータyiy_{i}の差を2乗したものを合計していることがわかります。

これこそが残差平方和なのです。

繰り返しになりますが、最小二乗法のゴールは単回帰モデルにおけるパラメータβ0^,β1^\hat{β_{0}}, \hat{β_{1}}を導出することです。

したがって先ほどの問題設定をβ0,β1β_{0}, β_{1}のそれぞれで偏微分してみましょう。偏微分した式が0になるパラメータが残差平方和を最小にする最適なパラメータになることが知られています。

δEδβ0=−2∑i=1n(yi−β0−β1xi)\frac{δE}{δβ_{0}}=-2\sum_{i=1}^{n}(y_{i}-β_{0}-β_{1}x_{i})

δEδβ1=−2∑i=1n(yi−β0−β1xi)xi\frac{δE}{δβ_{1}}=-2\sum_{i=1}^{n}(y_{i}-β_{0}-β_{1}x_{i})x_{i}

これらの式を0としたとき、式展開することができます。

左辺に0を代入して、そのまま左辺に項を移せばいいので簡単ですね!以下のようになります。

∑i=1nyi=nβ0+∑i=1nβ1xi\sum_{i=1}^{n}y_{i} = nβ_{0}+\sum_{i=1}^{n}β_{1}x_{i}

∑i=1nxiyi=∑i=1nβ0xi+∑i=1nβ1xi2\sum_{i=1}^{n}x_{i}y_{i} = \sum_{i=1}^{n}β_{0}x_{i}+\sum_{i=1}^{n}β_{1}x_{i}^{2}

それでは、これらの式を展開していきましょう!まず最初の式を展開すると…

nβ0=∑i=1nyi−∑i=1nβ1xinβ_{0}=\sum_{i=1}^{n}y_{i}-\sum_{i=1}^{n}β_{1}x_{i}

β0=1n∑i=1nyi−β11n∑i=1nxiβ_{0}=\frac{1}{n}\sum_{i=1}^{n}y_{i}-β_{1}\frac{1}{n}\sum_{i=1}^{n}x_{i}

β0=yˉ−β1xˉβ_{0} = \bar{y}-β_{1}\bar{x}

この式を使って、先ほどの2番目の式に代入しつつ計算すると…少し複雑ですが以下のように展開することができ

∑i=1nxiyi=∑i=1n(yˉ−β1xˉ)xi+∑i=1nβ1xi2\sum_{i=1}^{n}x_{i}y_{i} = \sum_{i=1}^{n}(\bar{y}-β_{1}\bar{x})x_{i}+\sum_{i=1}^{n}β_{1}x_{i}^{2}

∑i=1nxiyi=(yˉ−β1xˉ)nxˉ+∑i=1nβ1xi2\sum_{i=1}^{n}x_{i}y_{i} = (\bar{y}-β_{1}\bar{x})n\bar{x}+\sum_{i=1}^{n}β_{1}x_{i}^{2}

∑i=1nxiyi=nxˉyˉ−nβ1xˉ2+β1∑i=1nxi2\sum_{i=1}^{n}x_{i}y_{i} = n\bar{x}\bar{y}-nβ_{1}\bar{x}^{2}+β_{1}\sum_{i=1}^{n}x_{i}^{2}

∑i=1nxiyi–nxˉyˉ=β1(∑i=1nxi2−nxˉ2)\sum_{i=1}^{n}x_{i}y_{i} – n\bar{x}\bar{y} = β_{1}(\sum_{i=1}^{n}x_{i}^{2}-n\bar{x}^{2})

最終的にβ1β_{1}を求めると以下の式ができますね!

β1=1n∑i=1nxiyi–xˉyˉ1n∑i=1nxi2−xˉ2β_{1}=\frac{\frac{1}{n}\sum_{i=1}^{n}x_{i}y_{i} – \bar{x}\bar{y}}{\frac{1}{n}\sum_{i=1}^{n}x_{i}^{2}-\bar{x}^{2}}

次に1n∑i=1nxi2−xˉ2\frac{1}{n}\sum_{i=1}^{n}x_{i}^{2}-\bar{x}^{2}を変形しましょう。

1n∑i=1nxi2−xˉ2=1n∑i=1nxi2−2xˉ2+xˉ2=\frac{1}{n}\sum_{i=1}^{n}x_{i}^{2}-\bar{x}^{2}=\frac{1}{n}\sum_{i=1}^{n}x_{i}^{2}-2\bar{x}^{2}+\bar{x}^{2}=

1n∑i=1nxi2−2∑i=1nxinxˉ+xˉ2=1n∑i=1n(xi2−2xˉxi+nxˉ2)=\frac{1}{n}\sum_{i=1}^{n}x_{i}^{2}-2\frac{\sum_{i=1}^{n}x_{i}}{n}\bar{x}+\bar{x}^{2}=\frac{1}{n}\sum_{i=1}^{n}(x_{i}^{2}-2\bar{x}x_{i}+n\bar{x}^{2})=

1n∑i=1n(xi−xˉ)2\frac{1}{n}\sum_{i=1}^{n}(x_{i}-\bar{x})^{2}

そして1n∑i=1nxiyi–xˉyˉ\frac{1}{n}\sum_{i=1}^{n}x_{i}y_{i} – \bar{x}\bar{y}を式展開しましょう。

1n∑i=1nxiyi–xˉyˉ=1n∑i=1nxiyi–2xˉyˉ+xˉyˉ=\frac{1}{n}\sum_{i=1}^{n}x_{i}y_{i} – \bar{x}\bar{y}=\frac{1}{n}\sum_{i=1}^{n}x_{i}y_{i} – 2\bar{x}\bar{y}+\bar{x}\bar{y}=

1n(∑i=1nxiyi−2nxiyi+nxiyi)=1n∑i=1n(xiyi−xiˉyi−xiyiˉ+xˉyˉ)=\frac{1}{n}(\sum_{i=1}^{n}x_{i}y_{i}-2nx_{i}y_{i}+nx_{i}y_{i})=\frac{1}{n}\sum_{i=1}^{n}(x_{i}y_{i}-\bar{x_{i}}y_{i}-x_{i}\bar{y_{i}}+\bar{x}\bar{y})=

1n∑i=1n((xi−xˉ)(yi−yˉ))\frac{1}{n}\sum_{i=1}^{n}((x_{i}-\bar{x})(y_{i}-\bar{y}))

式展開した2つの式を、先ほどの式に代入すると…

β1=∑i=1n(xi−xˉ)(yi−yˉ)∑i=1n(xi−xˉ)2=SxySx2β_{1}=\frac{\sum_{i=1}^{n}(x_{i}-\bar{x})(y_{i}-\bar{y})}{\sum_{i=1}^{n}(x_{i}-\bar{x})^{2}}=\frac{S_{xy}}{S_{x}^{2}}

β1β_{1}はxx,yyの共分散SxyS_{xy}をxxの分散SxS_{x}で除した値であることが分かります。

まとめると単回帰式におけるパラメータは以下の通りです!

β0=yˉ−β1xˉβ_{0} = \bar{y}-β_{1}\bar{x}

β1=∑i=1n(xi−xˉ)(yi−yˉ)∑i=1n(xi−xˉ)2β_{1}=\frac{\sum_{i=1}^{n}(x_{i}-\bar{x})(y_{i}-\bar{y})}{\sum_{i=1}^{n}(x_{i}-\bar{x})^{2}}

Pythonで見てみよう!

先程のデータを用いてβ1β_{1}の計算が合っているかを確認していきましょう。

sklearn.linear_modelのLinearRegressionから求めた回帰係数β1β_{1}と共分散と分散から求めた回帰係数を比較していきます。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
x = pd.DataFrame([88,64,79,94,70])
y = pd.DataFrame([90,72,75,89,69])
from sklearn.linear_model import LinearRegression
model = LinearRegression()
model.fit(x,y)
print("計算した回帰係数:{}".format(np.cov([[88,64,79,94,70],[90,72,75,89,69]],bias=True)[0,1]/np.var([88,64,79,94,70])))
print("切片:{},回帰係数:{}".format(model.intercept_,model.coef_))

最小二乗法 python

計算した回帰係数はモジュールで求めた回帰係数と一致しているため、最小二乗法による回帰係数の求め方は合っていることが分かりましたね!

最小二乗法 まとめ

Happy

ここまでご覧いただきありがとうございました!

本記事では最小二乗法についてまとめました!

今回は回帰分析を使ったので、どのような手法なのか知りたい方はこちらもご覧ください!

回帰分析の理論とRでの実装!当サイト【スタビジ】の本記事では、統計学・データサイエンスの基本である回帰分析について理論とRでの実装を見ていきます。回帰分析についてしっかりおさえておくことで機械学習など高度な手法についても理解が深まります。

また重回帰分析における回帰係数の求め方について詳しく書かれた記事もあるので、ぜひ参照してください!

重回帰分析における偏回帰係数の求め方をわかりやすく解説!当サイト【スタビジ】の本記事では偏回帰係数・標準偏回帰係数について解説してきます。回帰係数は回帰分析における変数の係数を意味していますが、係数ごとの単位が異なると比較ができない問題があります。これを解消したものが偏回帰係数・標準偏回帰係数となります。今回は偏回帰係数・標準偏回帰係数の意味と定義式について解説していきます。

このようなデータサイエンスの力を身に付けるためにはスタビジの記事やスクールを活用すると良いでしょう。

当メディアでは、データサイエンティストの経験を詰め込んだデータサイエンス特化のスクール「スタアカ(スタビジアカデミー)」を運営していますので,興味のある方はぜひチェックしてみてください!

AIデータサイエンス特化スクール「スタアカ」

スタアカ(スタビジアカデミー)のトップページ

【価格】 ライトプラン:1,280円/月(全コースが受講し放題)
プレミアムプラン:129,800円(通常149,800円・買い切り)
【オススメ度】
【サポート体制】
【受講形式】 オンライン形式
【学習範囲】 統計学・機械学習・ディープラーニングを網羅的に学ぶ
生成AI(LLM・RAG・プロンプトエンジニアリング)を学ぶ
SQLとPythonを組み合わせて実データを使った様々なワークを行う
実践的なビジネスフレームワークを学ぶ
マーケティングの実行プラン策定

データサイエンティストとしての経験をふまえてエッセンスを詰め込んだのがこちらのスタビジアカデミー、略して「スタアカ」!!

当メディアが運営するスクールです。

月額1,280円のライトプランで、統計学から機械学習・生成AIまで全コースが受講し放題です!

プレミアムプランでは、24時間以内の質問対応と現役データサイエンティストとの1on1(30分×4回)を実施します!

カリキュラム自体は、他のスクールと比較して圧倒的に良い自信があるのでぜひ受講してみてください!

他のスクールのカリキュラムはPythonでの機械学習実装だけに焦点が当たっているものが多く、実務に即した内容になっていないものが多いです。

そんな課題感に対して、実務で使うことの多いSQLや機械学習のビジネス導入プロセスの理解なども合わせて学べるボリューム満点のコースになっています!

Pythonが初めての人でも学べるようなカリキュラムにしておりますので是非チェックしてみてください!

ウォルマートのデータを使って商品の予測分析をしたり、実務で使うことの多いGoogleプロダクトのBigQueryを使って投球分析をしたり、データサイエンティストに必要なビジネス・マーケティングの基礎を学んでマーケティングプランを作ってもらったりする盛りだくさんの内容になってます!

データサイエンスに関する記事はこちら!

【初心者必見】統計学入門に必要な知識と独学勉強方法を簡単に学ぼう!当ブログ【スタビジ】の本記事では、統計学入門に必要な知識をカンタンにまとめ、それらをどのように効率的に独学で勉強していけばよいかをお話ししていきます。統計学は難しいイメージが少しありますが、学び方をしっかり考えれば大丈夫! 【データサイエンティスト厳選18冊】データサイエンスを学ぶ上でオススメな本・教材!当ブログ【スタビジ】の本記事では、データサイエンスを学ぶ上でオススメできる本を厳選して紹介していきます。ここではデータサイエンティストになるために習得するスキルをデータサイエンスと称しております。いくつかの観点に切り分けて見ていきます。

データサイエンスを勉強できるスクールやサイトは、ぜひこちらを参考にしてみてください!

【徹底比較】データサイエンティストになるための学習ができるスクール9選!当サイト【スタビジ】の本記事では、データサイエンティストへの学習ができるスクールを紹介していきます。スクールに通ったからと言ってデータサイエンティストになれるわけではありませんが、データサイエンティストへの基本を着実に固めることは可能です…
スポンサーリンク

ウマたんスタビジ編集長

大学院は理系の統計科学研究室で、ベイズ統計学・時系列分析・異常検知を研究。日系・外資の消費財メーカーのデータサイエンティストを経て、現在は会社を経営しながらデータサイエンティストとして働いています。

スタビジアカデミー

読んだ内容を、スタアカの「統計学概要」コースで身につける

データサイエンス・AIを、動画と課題で体系的に学べるオンラインスクール。最初のレッスンは無料で見られます。