任務
實現垃圾郵件分類(spam or not spam)
參數確定
y=0:不是垃圾郵件,y=1是垃圾郵件
郵件的特徵,可以選擇一個由100個最常出現在垃圾郵件中的詞所構成的列表,[buy, deal, discount,……],
複雜 or 簡單?
爲了構建這個分類器算法,我們可以做很多事,例如:
- 收集更多的數據,讓我們有更多的垃圾郵件和非垃圾郵件的樣本
- 基於郵件的路由信息開發一系列複雜的特徵
- 基於郵件的正文信息開發一系列複雜的特徵,eg:discount discounts應該被視爲一樣嗎
- 爲探測刻意的拼寫錯誤(把watch 寫成w4tch)開發複雜的算法
最好的實踐方法不是建立一個非常複雜的系統,擁有多麼複雜的變量;而是構建一個簡單的算法,這樣你可以很快地實現它。不要擔心你的算法太簡單,或者太不完美,而是儘可能快地實現你的算法。當你有了初始的實現之後,它會變成一個非常有力的工具,來幫助你決定下一步的做法。因爲我們可以先看看算法造成的錯誤,通過誤差分析,來看看他犯了什麼錯,然後來決定優化的方式
視頻中給出的方法爲:
1.從一個簡單的能快速實現的算法開始,實現該算法並用交叉驗證集數據測試這個算法
2.繪製學習曲線,決定是增加更多數據,或者添加更多特徵,還是其他選擇
3.進行誤差分析:人工檢查交叉驗證集中我們算法中產生預測誤差的樣本,看看這些樣本是否有某種系統化的趨勢
誤差分析
- 概念
以我們的垃圾郵件過濾器爲例,誤差分析要做的既是檢驗交叉驗證集中我們的算法產生錯誤預測的所有郵件,看:是否能將這些郵件按照類分組。例如醫藥品垃圾郵件,仿冒品垃圾郵件或者密碼竊取郵件等。然後看分類器對哪一組郵件的預測誤差最大,並着手優化。 思考怎樣能改進分類器。例如,發現是否缺少某些特徵,記下這些特徵出現的次數。 例如記錄下錯誤拼寫出現了多少次,異常的郵件路由情況出現了多少次等等,然後從出現次數最多的情況開始着手優化。 - 侷限
誤差分析並不總能幫助我們判斷應該採取怎樣的行動。有時我們需要嘗試不同的模型,然後進行比較,在模型比較時,用數值來判斷哪一個模型更好更有效,通常我們是看交叉驗證集的誤差。 在我們的垃圾郵件分類器例子中,對於“我們是否應該將discount/discounts/discounted/discounting處理成同一個詞?”如果這樣做可以改善我們算法,我們會採用一些截詞軟件。誤差分析不能幫助我們做出這類判斷,我們只能嘗試採用和不採用截詞軟件這兩種不同方案,然後根據數值檢驗的結果來判斷哪一種更好