暇人日記

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

Coursera Machine Learning Week7 課題 苦闘日記⑦

前回と同じくprocessEmailに取り組みます。

f:id:omoshiroamericanews:20191122154747p:plain

 

引き続きprocessEmail.mの解読を続けます。

 

f:id:omoshiroamericanews:20191110000738p:plain

ここには「Word Stemming」と「Removal of non-words」の機能が入ってそうです。

 

 

f:id:omoshiroamericanews:20191110000937p:plain

 

試しにWhileのループ文を外してこの箇所を実行してみました。

f:id:omoshiroamericanews:20191110002042p:plain


anyoneがなくなりました!

 

f:id:omoshiroamericanews:20191110002126p:plain

strがanyoneになったようです。

 

最初の式はEmailを1単語ずつPickUpしてくれるようですね。

2つ目の式はそのstrが記号を含んでいたら削除するという式でしょうか。

 

while ループを作って試してみます。

 

f:id:omoshiroamericanews:20191110003512p:plain

結果です。

f:id:omoshiroamericanews:20191110003728p:plain

 

想像した通り、portal?もportalで「?」 がとれました!

こういうときうれしいですね!

「Removal of non-words」の部分がクリアになりました。

 

そして1語1語の分解にも成功しました!

 

これ大きいです!

 

******************************************************************************

やる内容;Email Sampleにある単語がvocabulary listにあれば

     index情報を付加してWord_indicesに入れる

******************************************************************************

最終的に課題はこれ↑なのですが、どうやって1語1語分解するのだろうと

思っていたのです!

 

これで自動的に1語1語に分解されるのはわかったので、

strに式を設定すればいいとわかりました。

 

f:id:omoshiroamericanews:20191109152615p:plain

(出典;『Coursera Machine Learning』 By Mr. Andrew Ng)

 

だとすると、この意味も分かってきた気がします。

str1,str2が必要でしたが、これもさっきの結果に表示されている通り、

strは2個セットで表示されています。

だいぶ、見えてきました。

 

 

次は「Word Stemming」の箇所です。

先ほどの式に「Word Stemming」箇所を追加します。

 

f:id:omoshiroamericanews:20191110005920p:plain

 結果です。

f:id:omoshiroamericanews:20191110010335p:plain

 

strが3列になって、見事にWord Stemmingされています!

 

ちなみに「porterStemmer」はアルゴリズムですね↓

f:id:omoshiroamericanews:20191110010610p:plain

 

 

ちなみに「strtrim」は空白を消すfunctionですね↓

f:id:omoshiroamericanews:20191110010805p:plain

 

さてようやく課題にたどり着きました。 

******************************************************************************

やる内容;Email Sampleにある単語がvocabulary listにあれば

     index情報を付加してWord_indicesに入れる

******************************************************************************

ということは、strがvocabulayListにあるかどうか確認して、

あるんだったらindex情報を取り出してWord_indicesに入れるということですね。

 

f:id:omoshiroamericanews:20191110014206p:plain

(出典;『Coursera Machine Learning』 By Mr. Andrew Ng)

 

ヒントがあります。

word_indicesの方はほとんど答え書いてるような気がします。

vocabList(XX)でXXにIndexを入れると文字列が出てくるので、

それをstrとマッチさせればできると思います。

 

f:id:omoshiroamericanews:20191110014453p:plain

具体的にはvocabListは1899個なので

1899を順番にStrと一致するかどうか試していき、

一致した場合はその番号をword_indicesに入れるという方法です。

 

実行しましたがstr = vocabList(i)のとこでエラーになりますorz

 

f:id:omoshiroamericanews:20191110014738p:plain

 vocabList(i)が変な形になります。右だけ取り出せればできそうなんですが。。。

 

そうか、ここでstrcmp(str1,str2)の登場な気がします。

イコールかどうかを見極めてくれる式というヒントでした。

なんか脱出ゲームをやってるような感じです笑

 

というわけで式を修正しました↓

f:id:omoshiroamericanews:20191110015514p:plain

結果です

f:id:omoshiroamericanews:20191110015551p:plain

できたっぽいですね。

Submitしたら正解でした!

 

 

宿題①you re」--> (XX)-->「your」の短縮宿題②l=0が繰り越しですね。

<---そういえばいつ実現できたんだろう。

次回みてみます。

 

宿題②l=0が繰り越しですね。<--これわかんないですね。諦めます。

 

それでは次回はEmailのClasifierを作る課題に取り組みます。