人工知能に関する断創録スマートフォン用の表示で見るスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。ロボティクス、生物学などに興味を持っています。このブログでは人工知能のさまざまな分野について調査したことをまとめています。Learning、Kerasに関する記事が多いです。最小二乗法フィッシャーの線形判別パーセプトロンが紹介されています。すべて線形識別モデルなので二次元なら直線、三次元なら平面、それ以上なら超平面で分離できる、つまり、線形分離可能なデータしか分類できない方法です。私が昔、機械学習を勉強していたときはこれがメインだったのでこっちのアプローチが一番自然な感じがして、ベイズ的なアプローチの方が新鮮に感じていました。ここで出てくるパーセプトロンは、Rosenblattが提案したやつでMinskyとPapertに「線形分離しかできないじゃないか!」と批判されたアルゴリズムですね。線形分離不可能なデータにも対応できるRumelhartの多層パーセプトロンは5章のニューラルネットワークに、サポートベクトルマシン(SVM)は下巻の7章に出てくるようです今回は、4.1.3の分類における最小二乗をPythonで実装してみます。分類するクラスがK個ある場合は、式(4.13)の形をしたK個の識別関数をクラスごとに用意して、入力xが与えられたときもっとも大きな値を出力する識別関数のクラスにxを分類するというアプローチです。K=3で3クラスに分類する問題の場合は、のように3つ識別関数を用意します。クラスが増えるほど学習しなきゃならないパラメータwが増えます。これをまとめて行列で表すと式(4.14)。最小化するようにパラメータ行列Wを学習しろってのが今回の課題ですね。ここで、Xは訓練データをまとめた行列、Tは教師データをまとめた行列です。この全部行列にまとめてしまうというのは慣れるまで少し大変でした。N=3など具体例で行列の要素を全部書き下してみるとなるほどと納得できました(かなり手が疲れたけどね)。これを解くと、式(4.16)の二乗和誤差を最小にする解Wが得られ、これで識別関数の式(4.14)が得られました!では、プログラミングしてみます。図4.4の左にあわせた感じで2クラスの分類をやってみました。ように三次元になります。データは、図4.4にあわせた適当な正規分布から生成しています。クラス1とクラス2の決定境界を表す直線の方程式は、y1(x)=y2(x)となる場合なので、整理するとのようにy=ax+bの形の直線の方程式になります。この直線の方程式が関数f()です。やっかいなことに教科書では、クラス1、クラス2のようにKは1から始まるのに対し、Pythonでは添え字は0から始まります。そんなわけで行列Wの添え字が下のように変化することに注意してください。Pythonの場合、1つ目の添え字(クラスを表す)が1引かれます。show()結果は、下のようになり、ちゃんと分類されていることがわかります。緑の線が最小二乗法で求めたパラメータ行列Wから求めた決定境界の直線です。次に、図4.4の右のようにノイズデータを混ぜてみます。show()結果は、最小二乗法は外れ値に対して頑健さに欠けていることがわかります。外れ値に対して頑健な方法としてロジスティック回帰やサポートベクトルマシンがあるようです。最後に、図4.5のように3クラスの場合を試して見ます。3クラスなので、クラス1とクラス2の間の決定境界を表すf1()とクラス2とクラス3の間の決定境界を表すf2()を用意しています(まとめられますが・・・)。show()結果は、となり、真ん中のクラス2がちゃんと分類できません。これもロジスティック回帰を使うとちゃんと分類できるようです。次回は、フィッシャーの線形判別を取り上げます。»プロフィールid:aidiary人工知能とその関連分野に興味があります。Blog|ブログを報告する。