標籤:

吳恩達機器學習第六周課後感

目錄

一、主要內容

二、個人感受

三、實際應用

正文

一、主要內容

1.Advice for Applying Machine Learning

《Evaluating a Learning Algorithm》

Deciding What to Try Next

首先吳恩達給予了大家非常高的評價,說學到這個部分的同學都已經是experts,還是挺搞笑的。當然懂演算法和用演算法是兩碼事,因此學會評測演算法就成了重要的技能。提高演算法的效率,很好的辦法有一個是收集更多的訓練樣本。也可以挑選幾個特徵,訓練精準的模型。增加數據的特徵也是一個好辦法。最多人用的辦法是,憑感覺,走玄學路線。

Machine Learning Diagnostic:機器學習診斷法,利用這個測試我們可以了解到演算法的局限性。

雖然診斷法需要用到比較多的時間,但是「磨刀不誤砍柴工」。

Evaluating a Hypothesis

假設有可能會導致過擬合,特徵過多的時候很難找到假設的錯誤。首先將已有的數據分成兩部分:訓練集和測試集。首先用訓練集訓練出函數,之後用測試集計算出最後的函數中的誤差。在邏輯回歸中,還有一種值叫做誤分率(或0/1錯分率)也可以被用來檢測誤差。其本質就是通過邏輯回歸最後輸出的「非1既0」的特性來測算其中的誤差,非常機智的二分法。

Model Selection and Train/Validation/Test Sets

在模型選擇的過程當中,需要考慮的問題其實非常複雜,因此將數據集分為訓練集、驗證集、和測試集後的結果,會幫我們選到更好的模型。在模型選擇中,首先最重要的就是確定輸入應該是多少次方,一般用d來表示。於是用訓練集依次訓練各個次方的模型,後比較假設參數。之後再使用驗證集改良函數,從而給測試集尋找最終誤差的機會。如果沒有驗證集,被選出來的函數被改良後,已經過擬合,為時已晚。

《Bias vs. Variance》

Diagnosing Bias vs. Variance

偏差大說明欠擬合,大方差大說明過擬合。為了解決這些問題,我們需要同時計算出訓練誤差和交叉驗證誤差。訓練誤差會隨著最高指數的升高而減少,但是這沒有辦法驗證出過擬合的情況,只能解決欠擬合的問題。在算出交叉驗證誤差之後,我們可以明顯看到過擬合的問題,從而將其解決。

Regulation and Bias/Variance

正則化是解決過擬合問題的有效方法。首先我們只使用訓練、驗證、以及測試的平方差,而不添加正則化。之後通過窮舉的方式找到表現最好的 lambda ,從而放入驗證函數,再放入測試函數,從而獲得效果最好的參數。

Learning Curves

Learning Curve:學習曲線,用於判斷所使用的演算法是否存在偏差、方差、或者二者皆有的問題。

以樣本數為橫軸,誤差數為縱軸,依次遞增,畫出曲線。我們會發現訓練代價函數的誤差會逐漸增加。不過驗證代價函數會隨著訓練樣本的增加而減少誤差,因為函數被調試地越來越好。當最終結果表現為高偏差的時候,即使數據再多偏差還是會很大,同時驗證誤差和訓練誤差兩條函數會幾乎重合。當表現為高方差的時候,更多的數據會有幫助,雖然訓練誤差和驗證誤差之間會出現非常大的代溝,但隨著樣本增加演算法的表現會越來越好。

Deciding What to Do Next (Revisited)

重新回顧一下如何改良演算法。更多的樣本和更少的特徵可以改善高方差。更多的特徵和多項式可以改善高偏差。提高 lambda ,改善高偏差;降低 lambda ,改善高方差。

在神經網路中,小的神經網路易造成欠擬合,但是計算成本低。大的神經網路易造成過擬合,不過通過正則化改善,而且計算效果比小神經網路好很多,但問題是計算成本高。但現在不需要考慮這個問題,因為GPU越來越厲害了。

《Building a Spam Data》

Prioritizing What to Work On

這兩個視頻中舉了製作垃圾郵件分類器的例子,非常有用。垃圾郵件多數情況下會有一些錯誤的拼寫,當然現在的垃圾郵件已經很強了。首先將垃圾郵件設為「1」,正常郵件設為「0」。然後,造一些特殊辭彙作為特徵,有些詞的出現會更加偏向於垃圾郵件,有些詞的出現會更偏向與普通郵件,都可以人為設定。之後將這些特徵做成向量。在實際工作中,我們可以提取最常用的1萬至5萬個辭彙,做成訓練集,給模型加以訓練。

在提升模型效能的部分有個搞笑的方法,工程師們有一個叫做「honeypot」的項目,仿造大量的電子郵件,以獲取大量的垃圾郵件從而可以訓練自己的模型。其他方法有可以通過郵件的外部信息來提升模型的效能。或者分析文本本身,這裡使用現代自然語言處理效能肯定有飛一般地提升。

Error Analysis

Error Analysis:誤差分析,通過實際效果和檢驗集的比較,從而發現系統級的可優化空間。

最開始搭建垃圾郵件分類器的時候,沒必要一口氣吃成一個胖子,可以從很小的模型開始。通過學習曲線可以了解到結果,從而改良模型。誤差分析也對改良模型有非常大的幫助。

案例中吳恩達首先手動給100個錯誤分類的郵件重新進行分類,發現盜取密碼的郵件識別率低。因此就有了改良的方向,主要研究密碼盜取的郵件。正常郵件被誤判也可以通過同樣的辦法進行分析。語法的改善,通過NLP可以得到很好的效果。當然,是否要使用NLP,可以在檢驗誤差之後酌情考量。

《Handling Skewed Data》

Error Metrics for Skewed Classes

Error Metrics:誤差度量值,判斷演算法好壞的值。

Skewed Class:偏斜類,當一種數據量遠遠大於另一數據的量。

Precision:查准率,真陽性/(真陽性+假陽性)*100%。

Recall:召回率,真陽性/(真陽性+假陰性)*100%。

True positive:真陽性,真實類為真,預測類為真。

False positive:假陽性,真實類為假,預測類為真。

True negative:真陰性,真實類為假,預測類為假。

False negative:假陰性,真實類為真,預測類為假。

開篇是一個很搞笑的例子,一個預測癌症的模型,準確率高達99%,但是患病率其實只有0.5%。因此,如果做一個只會輸出沒有癌症的模型,準確率會更高,甚至高達99.5%。當我們學會使用召回率之後,就會發現這個演算法的召回率只有0,因此這個演算法不能用。即使我們的演算法在偏斜類的問題中沒有達到極好的表現,但只要有很好的查准率和召回率,這個演算法必定是個好演算法。

Trading off Precision and Recall

依舊是癌症預測的例子,這次吳恩達使用的不再是搞笑函數,而是邏輯回歸。為了照顧患者的感受,醫生必須在有十足把握的情況下才可以告訴患者病情。假陽性也非常需要被避免,以此避免有患者錯過最佳的治療機會。然而這兩種情況互為悖論。高召回率的情況下,查准率會變低。因此選取一個臨界值成為必要。

為了選到一個非常好的臨界值,我們需要測試不同演算法的查准率和召回率。雖然選取二者平均值最高的演算法看起來是個不錯的選擇,但是極端情況都會出現弊端。因此極高或者極低的兩樣數值都不應該成為最佳選擇。而F值(或 F_1 值)是一個非常有用的演算法來評估這兩種數值。F值當然是高越好,最高為1。

F Score:F值= 2frac{PR}{P+R}

《Using Large Data Sets》

Data for Machine Learning

經過試驗研究人員發現,數據越多,演算法的效果就越好。

二、個人感受

這一周的內容主要是針對機器學習模型的進一步優化。並且通過多種方法對一個模型是否有效進行了驗證。其中多個例子都挺搞笑的,比如提供單一答案就可以獲得更好效果的模型。但是現在想來,其實在生活中這樣的行為並不少見。由於中國人口龐大,所以各種各樣的怪事層出不窮。也因為人口基數過大,極多小眾人口的生活不易都被數據的洪水猛獸給淹沒掉了。正因為如此,我們需要更加廣的數據維度,以及更加完善的數據確認方式。

三、實際應用

其實在日常生活中我們需要時時刻刻去避免這些生活中的亂象,不能因為生活看似正常就忽視當中的不正常。我個人對於小商戶的數據化非常感興趣,其實很多看似正常的工作流程,其實當中必定存在問題。我看到太多小商戶沒有一套完善的工作流程,導致即使只是普通的賣早餐,但還是三個人手忙腳亂。雖然遊戲《Overcooked》多玩兩次也能解決問題,但是通過數據分析的方法,甚至可以建立一套非常完善的體系。


推薦閱讀:

機器翻譯不可不知的Seq2Seq模型
《小王愛遷移》系列之十三:在線遷移學習(online transfer learning)
人工智慧對網路安全的意義(和誤解)
機器學習數學:梯度下降法
機器學習篇-數據劃分

TAG:機器學習 |