今週のテーマはSupport Verctor Machine SVMです
Logistic regressionで使ったCost functionからSVMで使われるCost functionへの変形する形で説明してくれています。そしてGaussian Kernelの説明に進みます。
Week6でふれたHigh Bias, High Varianceの関係がこのSVMのCost functionのCとσを変えるとどのような関係になるかがテストにも出てきます。プログラミング課題でも最適なCとσの組を選びなさいという問題になっています。
今週のexcerciseの提出物は2つのパートに分かれていて下記の4つです
- ガウシアンカーネル
2. [?] gaussianKernel.m - Gaussian kernel for SVM
3. [?] dataset3Params.m - Parameters to use for Dataset 3 - スパムの検出
5. [?] processEmail.m - Email preprocessing
6. [?] emailFeatures.m - Feature extraction from emails
ガウシアンカーネル
特にはまるところはありませんでした。dataset3Paramsの方はpdfに書いてあるパラメータで一番良い組み合わせを選べばいいんだなということでfor文で8x8回繰り返して
mean(double(predictions ~= yval));
が最小になる組み合わせを選択。
8x8のerrorsというマトリクスに上のmeanを保存して置いて最小の組み合わせのインデックスを求め、それに対応するC,sigmaを返せばよい。
マトリクスの要素の最小値を探してそのインデックスを探す方法はfor文回すのは無しとするとoctaveでどうやるやるのかわからずgoogleさんで探して下記のようにしました。
マトリクスをシリアライズして最小となるindexを探して元のマトリクスの行、列の値に変換という方法です。
[e_min, ind] = min(errors(:));
[i, j] = ind2sub(size(errors), ind);
スパムの検出
メールの本文を加工してスパムに特徴的なものをvocabulary listにあるものがメールに含まれていれば1、含まれていんなければ0のword_indiciesリストを作ってSVMにくわせるというもの、主要な部分は作られているので自分で書かなければならないコードはほとんどありません。
課題のコードを書くことよりどういうことをやっているのか実際のコードをみて覚えるということですね。