LoginSignup
0
3

More than 5 years have passed since last update.

Webアプリケーションエンジニアがディープラーニングに挑戦する際にやったこと(Coursera Week7)

Posted at

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$が大きいときにガウスカーネルを使用すると遅いかもしれない。
その時は手動でフィーチャを追加してロジステック回帰にするか、線形カーネルを試す。

0
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
3