ラグランジュの未定乗数法の説明 Python機械学習プログラミング第4章

ラグランジュの未定乗数法は、簡単にいっってしまえばある関数のある制限の上での解を求める方法である。証明までは、難しいので、2次元の場合で考えて、感覚的に理解できるように説明した。

ラグランジュの未定乗数法

使い方

ある関数f(x_1, x_2, \cdot\cdot)のある束縛条件 g_1(x_1, x_2, \cdot\cdot) = 0, g_2(x_1, x_2, \cdot\cdot) = 0, \cdot\cdot最大値もしくは、最小値となる x_1, x_2, \cdot\cdot求めたいときに、ラグランジュ関数

 L(x_1, x_2, \cdot\cdot, \lambda) = f(x_1, x_2, \cdot\cdot) - \sum_i\lambda_i g_i(x_1, x_2, \cdot\cdot)

を作ると、

 grad(L) = \vec{0}

の時が解になる。

 これは、なかなか便利だ!

二変数関数での感覚的な説明

ある2変数関数f(x, y)のある制限 g(x, y) = 0最大値もしくは、最小値となる候補つまり停留点(微分したら0の点) x, yを求める。ラグランジュ関数を作る。

 L(x, y,\lambda) = f(x, y) - \lambda g(x, y)

grad(L) = \begin{pmatrix} \frac{\partial f(x, y) - \lambda g(x, y)}{\partial x} \\ \frac{\partial f(x, y) - \lambda g(x, y)}{\partial y} \\ \frac{\partial f(x, y) - \lambda g(x, y)}{\partial \lambda} \end{pmatrix} = \vec{0}

となればよい。まず、 \frac{\partial f(x, y) - \lambda g(x, y)}{\partial \lambda}  = g(x, y) = 0については、上の制限と同じなので意味を持たない。

次に、

 \frac{\partial f(x, y) - \lambda g(x, y)}{\partial x}  = \frac{\partial f(x, y)}{\partial x} - \frac{\lambda g(x, y)}{\partial x} = 0

\therefore \frac{\partial f(x, y)}{\partial x} = \frac{\lambda g(x, y)}{\partial x}

 \frac{\partial f(x, y) - \lambda g(x, y)}{\partial y}  = \frac{\partial f(x, y)}{\partial x} - \frac{\lambda g(x, y)}{\partial y} = 0

\therefore \frac{\partial f(x, y)}{\partial y} = \frac{\lambda g(x, y)}{\partial y}

これより、

\begin{pmatrix} \frac{\partial f(x, y)}{\partial x} \\ \frac{\partial f(x, y)}{\partial y} \end{pmatrix} = \lambda\begin{pmatrix} \frac{\partial g(x, y)}{\partial x} \\ \frac{\partial g(x, y)}{\partial y} \end{pmatrix}

\therefore grad(f) = \lambda grad(g)

最後の式の意味を考えてみると

関数 grad(f)  grad(g)が並行であるということを示しているに他ならない。

grad,勾配の意味とは

まず、gradの意味を考えてみると、これは、ある関数の法線ベクトルということができる。 f(\vec{x}) = cの関数を考える

 f(x_1 + \Delta \x_1,x_2 +  \Delta \x_2,\cdot\cdot) = f (x_1 x_2 ,\cdot\cdot) +\sum_i\frac{\partial f}{\partial \x_i} \Delta x_i

= c + \sum_i\frac{\partial f}{\partial \x_i} \Delta x_i  = c

内積の形を用いて

 \therefore grad{f}\cdot\Delta\vec{x} = 0

 \Delta\vec{x}

は、関数が変化する方向である。内積0よりそれと直交する grad(f)は法線ベクトルとなる。

停留点での法線ベクトル同士の平行?

元の話に戻り、

grad(f) = \lambda grad(g)

の意味について考えると、あるx,yで f, gの法線ベクトルが平行であるということである。そしてこの時が停留点となる。

関数fは、領域を二つに分ける。例えば、平面での二次関数なら、上と下に、円なら内と外にである。f \geqq c,  f \leqq cに分ける。

f:id:ty070809390:20190515101241p:plain

つまり、接する時の x, yが解となる。

f:id:ty070809390:20190515121820p:plain

 

対偶( f(x, y)が最大をとる⇒ 接するの対偶)を考えると、接しない時を考えると、つまり交差する点を考える。

もし、 g(x) = 0についてを見ると、その x, y f \geqq c, f \leqq cの点となる。つまり、 g(x) = 0上にf \geqq c, f \leqq cとなる点が存在する。つまり、停留点とはならないことがわかる。

f:id:ty070809390:20190515101219p:plain

証明ではないが、感覚的にはつかめたと思う。

参考にしたページ

 

この順で読むといい!

一個目はラグランジュの未定乗数法がどういった形の式なのかと使い方。二個目は、少し深入りして、ラグランジュの未定乗数法の意味を考える。

mathtrain.jp

www.yunabe.jp

Python機械学習プログラミングの参考図書一覧↓

yosuke-programing.hatenadiary.com

 

Python機械学習プログラミングの他の記事はこちら↓

yosuke-programing.hatenadiary.com

 Amazonはこちら↓

[第2版]Python 機械学習プログラミング 達人データサイエンティストによる理論と実践 (impress top gear)

[第2版]Python 機械学習プログラミング 達人データサイエンティストによる理論と実践 (impress top gear)