default eye-catch image.

最小二乗法 パラメトリックモデルのパラメタ決定と過学習

[mathjax] 一つ前のエントリ\"トレーニングデータからパラメトリックモデルを決定してみた\"では、トレーニングデータからM次多項式曲線を求めてみた。このエントリではMの候補の中から一つを見つけ出す方法を書いてみる。 Mを大きくすればするほどトレーニングデータを多く通過することになり、トレーニングデータの数Nを境に、ついにはトレーニングデータを再現する多項式曲線が出来上がる。Mを過剰に大きくすると未知のサンプルデータとの二乗誤差が大きくなる(悪化する)地点が発生する。これは過学習という名前が付いている現象で、パラメトリックモデルにおけるパラメタ決定時に考慮する内容となる。 ITエンジニアのための機械学習理論入門posted with amazlet at 17.03.10中井 悦司 技術評論社 売り上げランキング: 8,130Amazon.co.jpで詳細を見る パラメタの評価 M=0のときの二乗誤差、M=1のときの二乗誤差,...といったように、M次多項式とトレーニングデータの平均二乗誤差EDを記録していき、EDが最小になるMをパラメタとして採用する。平均二乗誤差EDは以下の通り。 $$ begin{eqnarray} E_D = frac{1}{2} sum_{n=1}^{N}bigl( sum_{m=1}^M w_m x_n^m-t_n bigr)^2 end{eqnarray} $$ 平均二乗誤差は、M次多項式とトレーニングデータの差の2乗の合計の1/2だが、評価尺度とするには2乗分と1/2分が無駄だから、それを打ち消すために2倍して平方根を取ったものを利用する。 $$ E_{RMS} = sqrt{frac{2E_D}{N}} $$ これまでトレーニングデータを使ってM次多項式を作ってきた。このM次多項式にトレーニングデータを入力すれば、それは\"モデルを確認している\"作業となる。トレーニングデータの数NとMが等しくなるところでERMSはゼロになる。対して、トレーニングデータと同じ背景を持つ別のサンプルデータを入力するとそのような結果にはならない。 未知のサンプルデータを入力してERMSを計算したときに、ERMSを最も小さくするMが本来採用すべき値である。ERMSがあるMを境に大きくなることはつまり、トレーニングデータにのみ現れる特徴を学習してしまったということであり、この現象を過学習と言う。また、未知のサンプルデータに対してERMSを小さく維持できる能力のことを汎化能力と言う。 んー。言葉はどうでも良いんだが、結局何かまとめが欲しかったのでこうなりました。Mが決まれば、M次多項式の全てのパラメタが決まり晴れて線形回帰モデルの説明ができます。 実際には サンプルデータの背後にあると考えたM次多項式は実在するわけではなく、実際のサンプルデータは誤差の範囲に散らばって存在するはず。最小二乗法で求めたM次多項式はその誤差の範囲の中心を貫く曲線を表しているに過ぎず、誤差を含めてモデル化できると良い。次のエントリでは、観測点xnにおける観測値tnがf(xn)を中心として±σの範囲に存在するものとして考える。

default eye-catch image.

最小二乗法 トレーニングデータからパラメトリックモデルを決定してみた

[mathjax] トレーニングデータが与えらえたとき、与えられたトレーニングデータを最もうまく説明する構造を決めて、その構造から未来のサンプルを予測/説明するという試みがある。トレーニングデータを正解として扱うことになるから「教師あり学習」的な分類に入る。その試みの中には構造をパラメタを含む数式で表現できるものがあり、素性の良い数式であれば数値計算によらず解析的な手法でパラメタを決めることができる。 ITエンジニアのための機械学習理論入門posted with amazlet at 17.03.10中井 悦司 技術評論社 売り上げランキング: 8,130Amazon.co.jpで詳細を見る パラメトリックモデルとM次多項式曲線 M次多項式をモデルとして二乗誤差の最小化問題を解く最小二乗法は最も理解しやすいから良く解説に使われるようだ。自分でも理解できたし。。パラメトリックモデルのパラメタとはM次多項式の係数行列のことではなく次数Mのことだよ。最小二乗法によりM次多項式の係数行列を求めるのは情報系の一般教養的な感じだったと思うけど、どのMを採用すべきかは確かに奥が深そうだ。 トレーニングデータからパラメトリックモデルを決めるプロセスは以下のような感じになる。 現象を予測/説明するモデル(数式)を設定する。モデルにはパラメタが含まれるようにする パラメタの良し悪しを評価する基準を作る パラメタの評価基準を利用してモデルにおける最良の評価を与えるパラメタを決める さて、以下のようなトレーニングデータが与えられたとする。時刻xnにおける値がtnであるデータがN個あるという意味。 $${(x_n,t_n)}^{N}_n=1$$ tnの背景にM次多項式曲線f(x)があると仮決めする。 $$ begin{eqnarray} f(x) &=& w_0 + w_1x+w_2x^2+dots+w_Mx^M \\ &=& sum^M_{m=0} w_m x^m end{eqnarray} $$ サンプルデータtnとf(x)の距離を二乗和で表すと、 $$ begin{eqnarray} { f(x_1)-t_1 }+{ f(x_2)-t_2 }^2 + dots + { f(x_{N})-t_{N} }^2 end{eqnarray} $$ その半分の値を誤差Epとして定義する。{(xn,tn)}m=0mは既に与えられている定数(トレーニングデータ)であり、Epは単純に{wm}m=0Mを変数とする関数。 $$ begin{eqnarray} E_p &=& frac{1}{2}sum^N_{n=1}{f(x_n)-t_n}^2 \\ &=& frac{1}{2}sum^N_{n=1}Bigl(sum^M_{m=0}w_mx^m_n-t_nBigr)^2 end{eqnarray} $$ Epを最小にする係数{wm}m=0Mを求める問題に帰着する。素晴らしいことにwは行列計算で求まる。この求め方は別エントリに書くとして、 $$ begin{eqnarray} Phi &=& left( begin{array}{ccc} x_1^0 & x_1^1 & cdots & x_1^M \\ x_2^0 & x_2^1 & cdots & x_2^M \\ vdots & vdots & ddots & vdots \\ x_N^0 & x_N^2 & cdots & x_N^M \\ end{array} right) end{eqnarray} $$ とすると、係数ベクトルw、トレーニングデータt、観測点xの間に以下が成り立つ。つまり、N個のトレーニングデータとN個の観測点だけから背景として仮決めしたM次多項式曲線のパラメタwを決めることができる。変数として残るのはM次多項式曲線のMだけ! $$ begin{eqnarray} w &=& (w_0,cdots,w_M)^T \\ t &=& (t_1,cdots,t_N)^T \\ x &=& {x_n}^N_{n=1} \\ w &=& ( Phi^T Phi)^{-1}t end{eqnarray} $$ M次多項式曲線の係数行列が求まった。

default eye-catch image.

WordPressで数式を書くプラグイン MathJax-LaTeX を使って見る

[mathjax] 機械学習の各種アルゴリズムを読み解いていく際に、高頻度で確率統計に現れる数式が現れる。機械学習を習得していくにあたってWordPressに習得内容をまとめていきたいな、等と思うと、やはりHTMLで数式を書くことの限界は見えてくる。 MathJax-LaTeX 数式を書くツールといえば、今も昔もTeX(LaTeX)。WordPressのエントリにLaTeXスタイルで数式を記述するプラグイン(MathJax-LaTeX)を利用してみたので記事にしてみた。 エントリの先頭にショートコードmathjaxを書き、以下のような書式で文章を入力する。 $$x=frac{-bpmsqrt{b^2-4ac}}{2a}$$ 結果は以下の通りである。 $$x=frac{-bpmsqrt{b^2-4ac}}{2a}$$ うん。LaTeXのエスケープ文字はバックスラッシュだから、[option]+[¥]を打たないといけなくて面倒な以外はものすごく自然だ。フォントの再現性はこの際気にしなくても良いだろう。 数式サンプル いくつか数式を書いてみる。一番最初は正規分布の確率密度! $$p(x)=frac{1}{sqrt{2pisigma^2}}e^{-frac{1}{2sigma^2}(x-mu)^2}$$ $$p(x)=frac{1}{sqrt{2pisigma^2}}e^{-frac{1}{2sigma^2}(x-mu)^2}$$ 次、n次多項式。 $$ begin{eqnarray} f(x)&=&w_0+w_1x+w_2x^2+w_3x^3+cdots+w_Mx^M \\ &=&sum^M_{m=0}w_mx^m end{eqnarray} $$ $$ begin{eqnarray} f(x)&=&w_0+w_1x+w_2x^2+w_3x^3+cdots+w_Mx^M \\ &=&sum^M_{m=0}w_mx^m end{eqnarray} $$ 次、行列。 $$ A = left( begin{array}{ccc} a & b & c \\ d & e & f \\ g & h & i end{array} right) $$ $$ A = left( begin{array}{ccc} a & b & c \\ d & e & f \\ g & h & i end{array} right) $$ まとめ 使用感はまったくもってLaTexでした。フォントの表示を実現するために四苦八苦することも一切なくWordPressで数式を書けます。今までバカみたいにHTMLで数式書いてたのがマヌケでした。

default eye-catch image.

機械学習 決定木 サンプルデータ(iris)をRのrpartに通してみた

教師有り学習の基本、決定木の動作を実データを使って確認してみた。 データの集合が以下の通り与えられていたとする。 (x,y)i = (x1,x2,x3,......,xk,y)i 決定木とは、従属変数x1,x2,x3.. が説明変数yにどの程度影響を与えているかを表すデータ構造を指す。説明変数yを予測するモデルであり、教師データ(x,y)iからこのモデルを生成することから「教師あり学習」に分類される。その素性がとても簡単なので教師有り学習の一番最初に出てくる。 中間ノードは根からそのノードに至るまでの質問を全て満たす説明変数xの集合に対応し、中間ノードから子ノードへの枝はその変数yiが取り得る個別の値に対応する。決定木のノードと枝はIF-THEN-ELSEに相当する。 中間ノードから子ノードへの分岐を繰り返すと、説明変数xが唯一に決まる時が来る。根から末端ノードまで辿るということは、従属変数に対応する質問を繰り返していったときの結論である。 なお、中間ノードから子ノードへ木を成長させていく際、従属変数の選び方が複数発生する。子ノードのバラつきを何らかの形で定量化し、バラつきが最も小さい従属変数を選択する。例えばバラつきの定量化手法としてエントロピーを採用する場合、親ノードの平均情報量と子ノード候補の平均情報量の差(情報利得)が最も小さい従属変数を選択する。バラつきを求める手法として\"ジニ係数\"を利用するものもあるらしい。 ということで、Rを使ってirisデータフレームについてSpeciesを説明変数、残りを従属変数として決定木を作成してみた。 > tree = rpart(Species~.,data=iris,method=\"class\") > tree n= 150 node), split, n, loss, yval, (yprob) * denotes terminal node 1) root 150 100 setosa (0.33333333 0.33333333 0.33333333) 2) Petal.Length=2.45 100 50 versicolor (0.00000000 0.50000000 0.50000000) 6) Petal.Width=1.75 46 1 virginica (0.00000000 0.02173913 0.97826087) * 出力にインデントがかかっているので何となく木構造が見えるのだが、Rのグラフ出力機能を使ってみる。 > par(xpd=NA) > plot(treem branch = 0.8, margin = 0.05) > text(tree, use.n = TRUE, all=TRUE) 見づらい...。rpart.plotを使う。 > install.packages(\"rpart.plot\") > library(\"rpart.plot\") > rpart.plot(tree, type=1,uniform=TRUE,extra=1,under=1,faclen=0) まだ見づらい...。partykitを使う。 > install.packages(\"partykit\") > library(\"partykit\") > plot(as.party(tree)) なんだか、rpart.plot だけ分岐の値が異なる気がしないでもないが...。partykitの奴は末端のラベルが全部setosaになってる気がしないでもないが...。この木の見方は以下の通り。 従属変数 Petal.Lengthが2.45未満のものは全て 説明変数が Speciesがsetosa 従属変数 Petal.Lengthが2.45以上のものは 従属変数 Petal.Widthが1.75未満のものは 説明変数 Speciesがversicolorのものが49個 説明変数 Speciesがvirginicaのものが5個 従属変数 Petal.Widthが1.75以上のものは 説明変数 Speciesがversicolorのものが1個 説明変数 Speciesがvirginicaのものが45個 従属変数 Petal.Length と Petal.Width がわかれば、この木を辿ることで 説明変数 Species が何になるか予測できる。決定木のエントリというよりRの使い方みたいなエントリになってしまったな。

default eye-catch image.

Q-Lerningを試してみる(座学編)

そういえばQ熱って感染症があったな。不明の(Query)熱という意味だそうな。関係ないがQというパズルゲームがあって名作らしい。 食わず嫌いをしていても仕方がないのでちょっと調べてみた。割と単純な探索アルゴリズムの一種だった。自然界の~とか、脳内の~とか言うから胡散臭くなるだけで、コンピュータ上で動作させる他の探索アルゴリズムの一種だと思います。 結論は、枝コスト選択の難しさの解決を後回しにしたところで避けられない。というより、枝コスト選択を先にやらなくて良い、という事実が唯一にして最大のメリット。 アルゴリズムの概要 探索の際に選ぶ枝のコストを確率として予め求めておくのではなく、探索しながら更新していく。 前提は以下。 stは時刻tにおける状態。 atは時刻tにおける行動。 Q(st,at)は状態stにおいて行動atを選択する価値。 rt+1は環境の変化によって貰える報酬。 maxaQ(st+1,a)は 状態st+1のもとで最もQ値が高い行動aを選んだ場合のQ値。 γ(0<γ<1)は割引率。 α(0<α<1)は学習係数。 Q(st,at)を更新しQ(st+1,at+1)にする式は以下。 Q(st+1,at+1) := Q(st,at) + α(rt+1+γ maxaQ(st+1,a)-Q(st,at)) γ、rt+1の値によるが、Q(st+1,at+1)>Q(st,at)となるためには、Q(st,at)よりも、次の状態における最良の行動aを選択した価値Q(st+1,a)の方が大きい必要がある。 一般的にγ=0.9~0.99のように1に近い値を設定することが多いようなので、概ね最良の行動の選択maxaQ(st+1,a)による価値の増加分に報酬rt+1を加えたものがQ(st+1,at+1)となる。 アルゴリズムの設計 全ての状態とその時に取りえる行動の組(s,a)についてQ(s,a)の値をランダムに設定する。 t=0、s0にセットする。 状態stから行動atを選択し状態st+1とする。 状態の更新を一定回数行ったらt=0,s0に戻す。 グルグル回し、何回か終わったら終了。 状態の更新にはε-greedyアルゴリズムを用いる。状態stから状態st+1に遷移する際、常に最大のQ値となる行動を取るということは、最初にランダムで与えたQ(s,a)を教師として枝コストに確率を与えているのと同じになるからN.G.。定数ε(0<ε<1)を用い(1-ε)の確率で最大のQ値となる行動を選ぶようにする。 胡散臭くなってきた!結局枝コストの求め方の難しさに帰着する。たぶん確率密度とかの話ではなくエイヤっとεを決めるんだろう。

default eye-catch image.

重回帰分析と教師あり機械学習

機械学習と多変量解析は本質的に同じ。 重回帰分析 観測された事象から目的変数と説明変数の関係をモデル化する。 目的変数 = a×説明変数1+b×説明変数2+c×説明変数3+d 機械学習 大量のデータを読み込ませることで、人が教えることなくデータの特徴量を導き出す。 機械学習により求められる特徴量は本質的に重回帰分析の係数に相当する。 時期的に、多変量解析(統計) << データマイニング < 機械学習。 要は多変量解析(統計)の理解がなければデータマイニング・機械学習の理解はおぼつかない。 多変量解析はExcelを使ったサンプルが多い。 Excelを使った重回帰分析のサンプル Excelを使うと簡単に重回帰分析の実行結果を得られる。試しに実行してみる。 SNS広告(Seg.1)、Web広告(Seg.2)、口コミ広告(Seg.3)と売上実績(Sales)の関係が以下のようになっているとする。単位は無し。各広告手段の売上実績に対する寄与度をモデル化する。 つまり、Sales=a×Seg.1+b×Seg.2+c×Seg.3+d の係数(a,b,c,d) を求める。 Seg.1Seg.2Seg.3Sales 4.93.11.50.1 5.43.71.50.2 4.831.40.1 4.331.10.1 5.841.20.2 5.74.41.50.4 5.43.91.30.4 5.13.51.40.3 5.73.81.70.3 5.13.81.50.3 回帰統計量 重回帰式 Sales=a×Seg.1+b×(Seg.2)+c×(Seg.3)+d の当てはまりの良さを表す統計量。 通常、重相関係数Rと重決定係数R2は説明変数の数が多いほど大きくなる傾向がある。 補正R2は説明変数の数を考慮した当てはまりの良さを表す。 そのため一般的に当てはまりの良さを見るためには補正R2を参照する。 重相関 R0.874912 重決定 R20.765472 補正 R20.648207 標準誤差0.06962 観測数10 分散分析表 回帰式の全ての係数が同時に0であることの分析。有意F値が0.05未満ならば、統計的に全ての係数が0でないといえる。 有意F値が0に近ければ近いほど重回帰式の信頼度は高いことを表す。 自由度変動分散観測された分散比有意F 回帰30.0949180.0316396.5277516380.025607 残差60.0290820.004847 合計90.124 以下より、a=-0.133596092、b=0.315699216、c=0.14050611、d=-0.403573178。係数の符号が正の場合、説明変数と目的変数に正の相関があることがわかる。係数の符号が負の場合は負の相関。絶対値は相関の強さ。 係数標準誤差 tP-値 切片-0.4035731780.281209521-1.4351334080.201255935 Seg.1-0.1335960920.110652276-1.2073506010.27272798 Seg.20.3156992160.1056493012.9881808270.024377448 Seg.30.140506110.1522815480.9226732460.391770244 下限 95%上限 95%下限 95.0%上限 95.0% 切片-1.0916680890.284521732-1.0916680890.284521732 Seg.1-0.4043524570.137160273-0.4043524570.137160273 Seg.20.0571846890.5742137430.0571846890.574213743 Seg.3-0.2321134140.513125635-0.2321134140.513125635