天天看點

簡明機器學習——01機器學習的幾個基本要素

學習算法

  什麼是學習算法,學習當然不是一個動詞,學習算法最簡單的了解便是能夠從資料中學習的算法,學習的解釋根據 Mitchell 提出的定義:“對于某類任務 Task 和性能度量 Performace ,如果一個計算機程式在任務中,性能能夠随着經驗 Experience 而自我完善,那麼我們就稱為程式在經驗中學習 。”

舉一個非常簡單的例子,加入你有一個女朋友,你們每次約好出去吃飯的時候,你總是興沖沖的去等她,但是每次都要等很久,你也不敢抱怨什麼,但是也不想和個孤兒一樣站着。于是你就開始了學習。你的任務就是“縮小等待的時間”,然後你在約好時間後等待了五分鐘再出門,結果你還是等了15分鐘。下一次,你等待了十分鐘再出門,你還是等了十分鐘。後來你不斷的調整等待的時間,這就是一個學習的過程。那麼有一次,你等了25分鐘再出門,結果被臭罵了一頓,這也就是我們機器學習裡面很常見的一個東西,叫做懲罰。當然學習也是有一個前提條件,就是任務必須要有潛在的規律,它不可以是一個無規律的事物。

學習任務

  事實上很多人會有一種誤解,認為我們學習的就是任務。請記住,我們學習的永遠不是任務本身,學習指的是獲得執行任務的能力。比如,我們要實作人臉的自動識别,那麼識别就是任務,我們要獲得識别的能力。說到底,機器學習就是試圖讓程式替代或者輔助人的智能行為。

性能度量

  我們在評估學習算法裡面某項任務的好壞的時候,我們常常需要設計一些東西去量化它的性能。比如人臉識别的任務重,我們需要衡量識别的正确率和準确率,通常我們稱之為精度,當然還有錯誤率。

為了衡量一個算法的好壞,我們常常需要人為的制作出資料,我們稱為 測試資料 (test set of data),不過通常來說,測試資料也是已知資料的一部分,隻是我們單獨的劃分開,隻用于訓練完成後的最終測試。那麼平時我們進行參數的優化時所使用的資料,我們稱為訓練資料 (train set of data),同時還有驗證資料等等。

  • 查全率與查準率

      錯誤率和精度是最為常用的度量方式,但在一些任務中,比如分類任務,我們還需要一些額外的度量方式。比如進行資訊檢索時,我們經常要關心分類中有多少是正确的以及分類正确的中有多少被選出來了,這時候,我們引入查準率(precison)和查全率(recall)。

      我們舉一個二分類的問題,我們将分類器的預測結果分為一下四種結果:

      (1)真正例(True Positive,TP),即預測為1,真實清單為“1”的分類資料。

      (2)假正例(Flase Positive,FP),即預測為0,真實清單為“0”的分類資料。

      (3)真反例(True Negative,TN),即預測為0,真實清單為“0”的分類資料。

      (4)假反例(False Negative,FN),即預測為1,真實清單為“1”的分類資料。

      總資料量=TP+FP+TN+FN,在這裡,你可以列出一個混淆矩陣友善你的閱讀。

      查準率 P 就是分類器預測結果為“1”中預測正确的比率。

\[P=\frac{TP}{TP+FP}

\]

  查全率R就是真實類标為"1”的資料中分類器預測正确的比率。

\[R=\frac{TP}{TP+FN}

  通常來說,查全率和查準率是沖突關系,當查準率很高的時候,查全率往往很低。比如講一張照片中的人全部查找出來,你可以将所有的動物都标記為人,那麼你的查全率就是1了,但是查準率顯然是很低。是以你需要有時候謹慎的選擇,有時候甯可錯殺一千也不放過一個,有時候你需要反其道行之。

  在評估多個算法的時候,我們可以作出 P-R 圖,如果一個算法的 P-R 圖将另一個算法的圖完全包住,那麼可以判定後者的性能更優秀。如果它們發生了交叉,我們通常很難判定它們的性能,通常會進行比較 BEP (P=R的點),不過BEP過于簡陋了,是以我們使用 F1度量:

\[F1=\frac{2\times P\times R}{P+R}=\frac{2\times TP}{Sum+TP-TN}

  有的時候我們對查全率和查準率的要求不同,比方說,我們進行内容推薦的時候,要盡可能降低查全率提高查準率,因為我們的要求是更少的打擾。我們使用F1度量的一般形式——\(F_\beta\):

\[F_\beta=\frac{(1+\beta^2)\times P\times R}{(\beta^2\times P)+R}

  其實我們可以發現,F1是基于查準率和查全率的調和平均,也就是\(\frac{1}{F1}=\frac{1}{2}(\frac{1}{P}+\frac{1}{R})\),\(F_\beta\)則是廣義的F1,也就是權重調和平均,\(\frac{1}{F_\beta}=\frac{1}{1+\beta^2}(\frac{1}{P}+\frac{\beta^2}{R})\)。

  對于\(F_\beta\),如果\(\beta > 1\),展開表達式很容易發現查全率會有更大的影響,如果\(\beta < 1\),則查準率更有影響。

學習經驗

  在這裡我會很粗略的講一下監督學習(Supervised Learning)和非監督學習(Unsupervised Learning)。事實上機器學習的算法則是粗略的分為這兩種。

  監督學習算法: 簡單地說就是我們試圖将每一個資料都用一個相對應的類标(Label)進行關聯,就好比我指着一堆車子,告訴你,這種形狀的就是車,或者說,以江西省為例,所有籍貫江西的人的身份證号前兩位都是36,這也是一個類标。我們讓一個小朋友去學習認識這些,每次錯誤的時候,我們相應的提醒糾正他,他慢慢的就會調整自己,不斷學習提高自己的識别能力。你可以把監督學習認為是一種映射關系,對于每一個資料 x ,都會有一個對應的 y。

  非監督學習算法: 現實生活中,大部分資料是沒有标記的,即使我們人為的給它添加上标記,這個工作量基本上是無法估量的。非監督學習就是在沒有标記的情況下,學習資料内部自有的結構和規律。最常使用的非監督學習算法就是聚類,例如我們聽到了兩種毫無關聯的聲音,我們在此之前也從來沒有聽過。但是我們能很清楚的分辨出這兩種聲音,盡管我們并不知曉這兩種聲音是什麼。但是我們的任務隻是将他們以最大的共同點進行分類就行了。

  監督學習費時費力,半監督學習能力有限,那麼有沒有什麼是可以取到兩種算法的優點呢?這個時候,我們提出了半監督學習。

  半監督學習很好了解,就是我們在面對大量無标記資料或者隻有少部分有标記資料時,我們将兩種資料一起運用上,這就是半監督學習。

  不過對于一個算法的學習來說,即使我們隻标記一部分資料,這樣的工作量也是很大的。并且存在一個問題,很多标記使用人為的方式并不好,标記通常都從環境中擷取。那麼我們怎麼評判這些資料的标記是否合适呢?我們隻需要提供某些評價機制(獎勵和懲罰)。這一種學習方式我們稱為強化學習。不知道讀者中養狗的多不多,這種機制類似我們教狗上廁所,小狗可能不懂你的意思,但是它亂撒尿我們打它一頓,當它前往指定位置的撒尿我們獎勵它一個食物。慢慢的它自然就懂了。

我的掘金:WarrenRyan

我的簡書:WarrenRyan

歡迎關注我的部落格獲得第一時間更新 https://blog.tity.xyz

我的Github:StevenEco

繼續閱讀