prioritizing what to work on
設計一個機器學習算法時,我們應該先做什麼?以垃圾郵件識别的例子為例:

垃圾郵件發送者可能會故意将一些字元寫錯,如上圖中的Medicine用1來代替i,M0rgages中o用0來代替。
我們有一些辨別為Spam的郵件,有一些辨別為non-spam的郵件,這些郵件做為trainning data用監督學習來設計分類算法
挑選100個詞做為是否是垃圾郵件的詞,然後将這100個詞按照字母順序來進行排序,如果郵件中出現了這個詞,那麼相應的分量為1,如果郵件中沒有出現的話,則為0;
實際上,我們并不是手動來挑選這100個詞的,而是通過查找整個訓練集來挑出最常見的n個詞(一般為10000-50000)
如果你要build a spam classifier,一個你需要面對的問題是:怎樣合理利用你的時間來建立一個高識别率的,低錯誤的識别系統。
首先我們自然會想到收集更多的資料,more data,算法可能會更好。-----在垃圾郵件識别領域,有一些projects稱為Honey Pot projects(一些假的郵件位址,然後讓這些假的郵件位址到spammer那兒去,用來收內建千上萬的垃圾郵件),這樣我們就得到了很多trainning data來訓練我們的算法。
但是之前我們也看到了,獲得更多的訓練資料也是有用,在某些情況下也沒有用。這時我們也有其它的方法來提高算法的性能。-----建立更加複雜的特征值
基于郵件路由資訊(來自于郵件頭部)來建立更複雜的特征值: 當spammer發送郵件時,它們通常會将垃圾郵件的來源進行模糊化,或者使用假的email headers,或者通過一些非常不常見的設施、通過不常見的路由來發送垃圾郵件。這些資訊将會在email headers裡面有所反映。是以如果我們檢視email headers的話,試圖去建立更複雜的features去捕獲這種類型的郵件路由資訊去識别某封郵件是否是垃圾郵件。
基于郵件内容來建立更複雜的特征值:如discount和discounts應該當成一樣的嗎?或者将标點符号包括進去,如可能垃圾郵件會使用很多感歎号等等。spammer經常将一些詞故意誤拼,這時我們需要更複雜的算法來識别這些誤拼的單詞(如med1cine,w4tches等等)。
總結:
通常我們會将我們接下來要做些什麼像上圖那樣列舉下來,可是我們很難說哪種方法更有用,是以我們不要固定在哪種做法上.通常我們會随機選擇一個方法來實行,但是這種方法因為是随機選擇的,是以可能對于我們算法的提高沒有幫助,接下來将介紹通過一種方法來選擇哪種方法對我們性能的提高有幫助。