Coursera Week7
はじめに
CourseraのWeek7を実施しましたので、私のメモを公開します。
Courseraってなんだ?という方はWeek1から御覧ください。
Week7
Large Margin Classification
サポートベクターマシンのコスト関数。
$$
\min_\theta C \sum_{i=0}^m \left[y^{(i)}cost_1(\theta^Tx^{(i)})+(1-y^{(i)})cost_0\theta^Tx^{(i)} \right]+\frac{1}{2}\sum_{i=0}^n\theta_j^2
$$
これは$y=1$の場合、$\theta^Tx \geq 1$
$y=0$の場合、$\theta^Tx \leq -1$
Kernel
以下のsimilarity関数を数学的にはカーネル関数と呼ぶ。
カーネルは$k$と表すこともできる。
$$
similarity(x,l^{(i)})=\exp(- \frac{|| x - l^{(i)}||^2}{2\sigma^2}) = \exp(-\frac{\sum_{j=1}^n(x_j-l_j^{(1)})^2}{2\sigma^2})
$$
Using An SVM
ルートや逆行列を計算する場合、ロジックを1から実装するのではなくライブラリを使うべきである。
ライブラリに全ての計算を任せるが、こちらがやるべきこともある。
1つ目は$C$の値を選ぶこと。($C$の値($\lambda$)を選ぶことで、オーバーフィットやアンダーフィットを調整する。)
2つ目はカーネルを使用するかしないかの選択をする。
カーネルを使用しないことをlinear kernelという。
これは多くのフィーチャ($n$が大きい)く、教師データが小さい場合($m$が小さい)場合、オーバーフィッテングしやすいためカーネルを使わないのが合理的になる。
ガウスカーネルを使用する場合、$\sigma^2$を選択する必要がある。
$\sigma^2$が大きいと低バリアンス、高バイアス(アンダーフィット)
$\sigma^2$が小さいと高バリアンス、低バイアス(オーバーフィット)
カーネルを使用する場合は少ないフィーチャで教師データがたくさんある場合に合理的である。
線形カーネルやガウスカーネル(やその他のカーネル)を使用する場合、何にでも使えるわけではない。
Mercerの定理を満たす必要がある。
ロジステック回帰とSVMのどちらを利用すべきか
$n \geq m$で$n=10000$くらい$m=1000$くらいであれば、ロジスティック回帰か線形カーネルを使用する。
$n$が小さく、$m$が中くらいのときは線形カーネルを選択する。
$n$が小さく、$m$が大きいときにガウスカーネルを使用すると遅いかもしれない。
その時は手動でフィーチャを追加してロジステック回帰にするか、線形カーネルを試す。