ホーム » 「交差検証」タグがついた投稿

タグアーカイブ: 交差検証

PythonでRidgeを数式から実装する

こんにちは。
本日はRidge回帰の実装とパラメータの交差検証を行いましょう。
色々やっていると少し長くなりましたがお許しください。

最後の2セルはinteractを使ったんですがjupyterだと表示されませんね。。コピーして実行してみてください。

個人的に今回の収穫は
– 交差検証は4分割するといい
– センタリングでinterceptionが消える

次はLasso頑張るぞ!

でわ

交差検証(Cross-Validation)をPythonでやる

こんにちは。

前回、交差検証というワードに触れ、その図を確認して終わりました。今回はその交差検証をしっかりと理解しましょう。

What is Cross-Validation?

モデルの誤差値を検証すること

この精度であっているのか?などの疑問を交差検証により解決します。

Cross-Validation consists of two main parts

  • Leave one out Cross-Validation (LOOCV)
  • K-Folds Cross Validation

という基本的な2つを紹介します。Holdout methodというものが他にありますがK-foldの下位互換と思っていいでしょう。

まずは「K-Folds Cross Validation」についてです。

  1. データセットをK分割する(k-foldと名付ける)。
  2. \forall i \in \{1, \cdots, k \}に対して
    i-foldを除いた他の全foldでモデルを学習させる
    i-foldを用いてモデルのerrorを計算する
  3. k個のerrorを平均する

図で確認しましょう。

では次に「Leave one out Cross-Validation (LOOCV)」についてです。これは上においてK=データの数としたものです。なのでerrorの平均は次のようにかけます。

    \[CV(n) = \frac{1}{n} \sum_{i=1}^n \left( y_{i} - \hat{y_{i}}^{(-i)}    \right)^2  \]

ただしnはデータ数、\hat{y_{i}}^{(-i)}i番目を除いたデータで学習をしたのちのy_{i}に対するpredictionです。しかし、こちらが利用されている例を見たことがありません。なので特に気にしなくていいでしょう。

交差検証=KFOLD

で行きましょう。では以下で実装例を見て見ましょう。ちなみにニューラルネットワーク前処理についての記事を復習しておくといいかもしれません。(ニューラルネットワークについては新しい記事を書く予定です)

話が逸れてしまいましたがこれで交差検証は大丈夫そうですね。次回からは再度、正則化についてのお話です。

でわ

READMORE

線形回帰とRidge回帰を数式からやる(理論編)

こんにちは。

正則化パート2ですね。前回の最後に

  1. Ridge Regression (Tikhonov regularization)
  2. Lasso Regression

を例に出しました。今回はこれらを用いて正則化について学びましょう。の前に線形回帰を思い出しましょう。その時に

    \[\texttt{minimize} | y - X\beta|^2\]

を考えて

    \[X(X^TX)^{-1}X^T\]

Xの列ベクトルが張る空間への射影行列をやりましたね。ここでXが正則ということなのでもう一歩踏み込みQR分解を行います。つまり

    \[X = QR ~~ s.t. ~~ Q^TQ = I ~~ , ~~ R~ \textrm{is upper triangular matrix}\]

を使うと

    \[(X^TX)^{-1}X^T = (R^TQ^TQR)^{-1}R^TQ^T = R^{-1}Q^T\]

とできます。わかったことは

Xの列ベクトルが張る空間への射影行列X(X^TX)^{-1}X^TQQ^Tとなるということ。超シンプル。これが線形回帰。で、これにL_2正則化項を加えます。つまり\lambda \in \mathbb{R}_+に対して

    \[\texttt{minimize} | y - X\beta|^2  + \lambda | \beta|_2^2\]

を考えます。これをリッジ回帰というのでしたね。ラッソはL_1正則化項を使います。

違いは?

正則化項のノルムです。L_2L_1の違いは?もう少し親しみある言い方だと距離と絶対値の違いは?

Answer: 微分可能性

L_1は微分できませんね。前回の図を思い出してください。L_1は尖っていました。

gists

勾配法は微分を使いましたね。なので一旦ラッソは無視してリッジについて学びましょう。

次の解を考えます。ただし\lambda > 0

    \[\beta = \texttt{argmin}_b { |y-Xb |^2_2 + \lambda|b|^2_2 }\]

「アーグミンb」は右辺を最小化するときのbということ。これを展開し、微分すると

    \[|y-Xb |^2_2 + \lambda|b|^2_2 &= (y-Xb)^T(y-Xb) + \lambda b^Tb\]

    \[= y^Ty -2y^TXb + b^TX^TXb + \lambda b^Tb\]

    \[\frac{\partial}{\partial b} \left( |y-Xb |^2_2 + \lambda|b|^2_2 \right) = -2X^Ty + 2X^TXb + 2\lambda b = 0\]

    \[\Leftrightarrow (X^TX + \lambda I)b = X^Ty\]

    \[\Leftrightarrow \beta = (X^TX + \lambda I)^{-1}X^Ty\]

これが欲しかった\betaですね。さっきのX(X^TX)^{-1}X^Tと似てませんか?邪魔なのは\lambdaの項。なのでここで\lambda \downarrow 0とするとさっきのと同じになります。だって元々のコスト関数の正則化項が0になるわけですからね。

 \lambda I、これ意味ある?

ここでX^TXは半正定値対称行列であり、実数値からなる対称行列は実数の固有値を持ちます。よってX^TXの固有値は0以上。行列式を計算して見よう。

    \[\det |X^TX + \lambda I - t I| = 0\]

    \[\det |X^TX - (t - \lambda) I| = 0\]

これを(\lambda -t)について解くとX^TXの固有値が求まりますね。そこでその固有値の一つをe_1とするとリッジ回帰における固有値はt = e_1 + \lambdaとなり、\lambda分シフトされていますね。つまり、行列式をゼロから遠ざけており正則をキープしてくれています。

逆に\lambda \uparrow \inftyとすると\beta \rightarrow 0となってしまいますね。これもまずい。

\lambdaをどうやって決めるか

これが問題ですね。これは交差検証で選ばれます。交差検証ってなんやあ??

K-fold cross validation

ですかね。これはデータn個をK等分割(5か10が一般)してモデルの汎化性能を評価するためにあります。しかしここではパラメータ\lambdaのベストチョイスのために使います。これはとても重要な概念なので次の記事で深く確認しましょう。今回は簡単な図を最後に見てお別れです。

でわ

READMORE