今回はemailFeature.mの完成に取り組みます。
問題文を読むとemailFeature.mは
1899X1で構成要素が0 or 1のベクトルへ変換する式ですね。
1899X1なのはVocabListが1899X1だからですね。
表にするとこういうことだと思います。
word_indicesの86はvocabListの86を示しているので、
このword_indicesに含まれる番号のところが1にしたいです。
(出典;『Coursera Machine Learning』 By Mr. Andrew Ng)
課題の中でxは1899X1ですべての要素が0のベクトルに設定されているので、
word_indicesに含まれる番号のところのみ1で上書きしていきたいです。
例えば86番目は1だからx(86)=1で前後は0になるように
x(85)=0
x(86)=1
x(87)=0
としたいです。
Octaveの機能で
こういう風にできるので、86はword_indices(1)で表現できるので、
他の53の要素も同様にすれば、同じように86のような
VocabListの中のIndex番号がとれます。
こういうループを作ればいいと気づきました。
ループするのはword_indicesの長さ分ですね。
これでword_indicesに含まれる番号のところのみ1で上書きできるはずです!
実行しました。
結果のxは1899X1なので部分ですが、左のようになりました。
1の数が知りたかったのでpos=find(x==1)で調べたことろ、右のようになりました。
数を調べて45でした。
問題文に45の1がある、と書いてあるのでぴったりです!
やった!ついに満点になりました!
長かった戦いよ、さらば! (By キン肉マン)
って感じです。
テストは終わったんですが、まだ課題には続きがありました。
いざ、メールの分類を実践!
っていう内容ですね。
4000のTraining Set(=spamTrain.mat)でClassifieを作成して
1000のTest Set(=spanTest.mat)で精度検証したのちに
コースが用意したEmailでも自分のEmailでもいいから
実験してみなさいという内容です。
4000のEmailのTraining Set(=spamTrain.mat)は
ご丁寧にすでにprocessEmailとemailFeatureで1899X1のベクトルに
加工されて、しかもSpanかNonSpanか区別された状態です。
4000のTraining Setはすでに1899X1のベクトルなので、
1899X4000に0,1が情報がついて1900X4000なのだろうか?
と思ってみてみました。
spamTrain.mat自体は1X1のベクトルで、
Structure FieldなるものでXとyに分けられるようですね。
Training Setの中身が分かったので、
ex6.spam.mの式をコピペして実行します。
error=99.850と結果がでました。
99.8%が正解なので合格と判断しました。
次はこのTrainng Setで決めたパラメーターを
Test Set(=spanTest.mat)で試してErrorをみます。
ここでErrorが多いとTraining SetにOverfitしすぎということですね。
errorは98.9%でした。正解は98.5%なので少しずれてます。。。
が前に進みます。
Top Predictor Spamはex6.spam通りで大丈夫でした。
自分のEmailで試してみて(Try your own Email)
とあったので、自分あてにきた部下のEmail↓
がきちんのNon spamに分類されるかどうか実験してみました。
プログラムの式です。
modelを決める式はさっきと同じなのでスキップしました。
本当はいれないと動かないと思います。
見事にspamではないと分類されました。
これでWeek7の課題は終了です。
日々の業務への応用
を考えると以下は欲しいですね。
日本語版を使いたい
1899X1のようなVocabListがネット上におちているのか?
processEmailの日本語版(LowerCaseにおとす、Stemmingなど)
FeatureEmailはVocabListとのひもづけ
理想はメールを読み込ませて、
①そのメールがどの案件に該当するかを分類、
②関連過去Eメールの抽出
③回答Eメール案の作成
ができてほしいです。
①も②も既存のメールソフトのフィルター機能で何とかなりそう。
③が一番難しいか。
①に応じた定型文呼び出しならできるかも、というところでしょうか。
Week6まで学んだことで考えるべきこと、やるべきこと
・メールは分解できたけど、SVMの精度をもっと知りたい。
例)Neural Networkの問題をSVMで解く
例)Email Spanの問題をNeural Networkで解いてSVMで解いた場合と
比較してどうなったかをみてみる、をやってみたい
ではまた次回頑張ります。