Python学習編58回目です。
前回はLinearRegression()クラスの.fitメソッドのデータの前処理を調べました。今回は最小二乗法について調べよう。
入力:scikit-learnライブラリのLinearRegression()クラスの.fitメソッドにおいて、最小二乗法はどのように計算されますか
出力:
Scikit-learnライブラリのLinearRegression()
クラスの.fit()
メソッドは、線形回帰モデルを訓練するために最小二乗法を使用します。最小二乗法は、観測されたデータ点とモデルによって予測されたデータ点との間の二乗誤差の和を最小化することによって、モデルのパラメータを推定します。
最小二乗法の計算
最小二乗法で計算する基本的な式は次のとおりです。線形回帰モデルは一般的に以下の式で表されます:
y=Xβ+ϵ
ここで、
- y はn×1の目的変数ベクトル(観測された値),
- X はn×pの説明変数の行列(nはサンプル数、pは特徴量の数),
- β はp×1の未知パラメータベクトル(推定したい値),
- ϵ は誤差項を表します。
最小二乗法の目的は、全ての観測データに対する誤差の二乗和(残差の二乗和、RSS)を最小にするβを見つけることです。これは以下の式で表されます:
RSS=ϵTϵ=(y−Xβ)T(y−Xβ)
この式を最小にするβを見つけるために、RSSをβに関して微分し、その結果を0に設定します。これは、以下の正規方程式を解くことに相当します:
XTXβ=XTy
この方程式をβについて解くと、
β=(XTX)−1XTy
となり、これが最小二乗推定値です。Scikit-learnのLinearRegression().fit()
メソッドは、このプロセスを内部的に実行してβ(つまり、重みとバイアス)を推定し、モデルを訓練します。実際には、数値的安定性や計算効率を高めるために、この逆行列計算を直接行う代わりに、特異値分解(SVD)などの数値的に安定した方法を使用することがあります。
想像の100倍くらいいかついのが出てきた。が、y=ax+bのベクトル版っぽい。あと上付き文字の表記が面倒くさい。
そして導出過程に転置行列XTの微分というはるか昔に忘れた概念が出てきた。結構深堀して理解できた気がする…が1日経って理解を確かめた方がよさそう。
余談:何も理解できない生徒の前で数式の美しさを語ってヘイトを買う大学教授を再現しなくても…
重要点
この式の美しさは、残差の二乗和がパラメータベクトル�に関してどのように依存しているかを明確に示していることにあります。
次回に続く