暇人日記

アラフォーおっさんのコーセラの機械学習の課題を解こうと頑張っています!

Coursera Machine Learning Week7 まとめ

 

 

Week7を一言でいうとSVMという新アルゴリズムの紹介と実践

 

になると思います。

 

Video/Lectureの中で粗くてもいいからさっとTryすることが重要という

ポイントをカバーしてくれるのがSVMということだと思います。

 

ちなみにこちらのサイトの方がよく理解している人が書いている

と思いましたので載せておきます。↓

 

www.slideshare.net

 

 

 課題の前半はSVMの直線、曲線を使うこと。

     

・直線はlinearKernelを使います。   

 

f:id:omoshiroamericanews:20191113122646p:plain

式は↑になります。

 

設定しなければならない要素

X,yがTraining Setから定数ででてきます。

Cは自分で設定する変数です。

※linearKernelはSVM直線を計算してくれる関数なので定数変数ではないです。

 

Week1-6では最適な変数(ここではC、Week1-6ではθが多い)を求める関数が

ありましたが(fmincgなど)、ここではありません。

粗くてもとりあえずTryが方針なのでそういう関数がないのかもしれません。

 

 ・曲線はgaussianKernelを使います。

 

f:id:omoshiroamericanews:20191113123515p:plain

式は↑になります。

 

設定しなければならない要素はSVM直線から

変数が一つ増えてCとsigmaになっています。

※gaussianKernelはSVM曲線を計算してくれる関数なので定数変数ではないです。

 

同じく最適なCとsigmaを計算する関数はここでは紹介されていません。

 

そもそもWeek1-6で行っていたCostFuctionの式も自分では作成していません。

(SVMTrain.mの中に入っているかもしれませんが。)

なので、CostFunctionを最小値にするθ、C,sigmaを計算するため

に必要なgradientを式にすることもありませんでした。

なので、fmincgのような関数も出てきませんでした。

 

代わりにpreddictionの結果を表示して、最適変数を探すという形でした。

 

この課題で得た有用なテクニックは苦闘日記⑤のループの履歴取り出しです。

 

 

課題の後半はEmailのSpam分類機をつくること

①Emailの文章をベクトルに落としこむこと

 

processEmail.mでEmailを1899のVocabListにあるかどうか落とし込む

emailFeature.mで1899X1のベクトルに落とし込む

 

②SVMの直線で分類すること

 

①で落とし込んだベクトルを課題の前半で行ったSVM直線で計算して

predictionの精度をみている。

 

残課題

・苦闘日記②のPredがすべて1の境界線ってなんだ?

・「you re」-->「XX」-->「your」はいつできた?

・日本語版を作成

・Neural Networkの問題をSVMで解く

・Email Spamの問題をWeek1-6の方法で解く