學習算法
??什么是學習算法,學習當然不是一個動詞,學習算法最簡單的理解便是能夠從數(shù)據(jù)中學習的算法,學習的解釋根據(jù) Mitchell 提出的定義:“對于某類任務 Task 和性能度量 Performace ,如果一個計算機程序在任務中,性能能夠隨著經(jīng)驗 Experience 而自我完善,那么我們就稱為程序在經(jīng)驗中學習 ?!?br> 舉一個非常簡單的例子,加入你有一個女朋友,你們每次約好出去吃飯的時候,你總是興沖沖的去等她,但是每次都要等很久,你也不敢抱怨什么,但是也不想和個孤兒一樣站著。于是你就開始了學習。你的任務就是“縮小等待的時間”,然后你在約好時間后等待了五分鐘再出門,結果你還是等了15分鐘。下一次,你等待了十分鐘再出門,你還是等了十分鐘。后來你不斷的調整等待的時間,這就是一個學習的過程。那么有一次,你等了25分鐘再出門,結果被臭罵了一頓,這也就是我們機器學習里面很常見的一個東西,叫做懲罰。當然學習也是有一個前提條件,就是任務必須要有潛在的規(guī)律,它不可以是一個無規(guī)律的事物。
學習任務
??事實上很多人會有一種誤解,認為我們學習的就是任務。請記住,我們學習的永遠不是任務本身,學習指的是獲得執(zhí)行任務的能力。比如,我們要實現(xiàn)人臉的自動識別,那么識別就是任務,我們要獲得識別的能力。說到底,機器學習就是試圖讓程序替代或者輔助人的智能行為。
性能度量
??我們在評估學習算法里面某項任務的好壞的時候,我們常常需要設計一些東西去量化它的性能。比如人臉識別的任務重,我們需要衡量識別的正確率和準確率,通常我們稱之為精度,當然還有錯誤率。
為了衡量一個算法的好壞,我們常常需要人為的制作出數(shù)據(jù),我們稱為 測試數(shù)據(jù) (test set of data),不過通常來說,測試數(shù)據(jù)也是已知數(shù)據(jù)的一部分,只是我們單獨的劃分開,只用于訓練完成后的最終測試。那么平時我們進行參數(shù)的優(yōu)化時所使用的數(shù)據(jù),我們稱為訓練數(shù)據(jù) (train set of data),同時還有驗證數(shù)據(jù)等等。
- 查全率與查準率
??錯誤率和精度是最為常用的度量方式,但在一些任務中,比如分類任務,我們還需要一些額外的度量方式。比如進行信息檢索時,我們經(jīng)常要關心分類中有多少是正確的以及分類正確的中有多少被選出來了,這時候,我們引入查準率(precison)和查全率(recall)。
??我們舉一個二分類的問題,我們將分類器的預測結果分為一下四種結果:
??(1)真正例(True Positive,TP),即預測為1,真實列表為“1”的分類數(shù)據(jù)。
??(2)假正例(Flase Positive,FP),即預測為0,真實列表為“0”的分類數(shù)據(jù)。
??(3)真反例(True Negative,TN),即預測為0,真實列表為“0”的分類數(shù)據(jù)。
??(4)假反例(False Negative,FN),即預測為1,真實列表為“1”的分類數(shù)據(jù)。
??總數(shù)據(jù)量=TP+FP+TN+FN,在這里,你可以列出一個混淆矩陣方便你的閱讀。
??查準率 P 就是分類器預測結果為“1”中預測正確的比率。
??查全率R就是真實類標為"1”的數(shù)據(jù)中分類器預測正確的比率。
??通常來說,查全率和查準率是矛盾關系,當查準率很高的時候,查全率往往很低。比如講一張照片中的人全部查找出來,你可以將所有的動物都標記為人,那么你的查全率就是1了,但是查準率顯然是很低。所以你需要有時候謹慎的選擇,有時候寧可錯殺一千也不放過一個,有時候你需要反其道行之。
??在評估多個算法的時候,我們可以作出 P-R 圖,如果一個算法的 P-R 圖將另一個算法的圖完全包住,那么可以判定后者的性能更優(yōu)秀。如果它們發(fā)生了交叉,我們通常很難判定它們的性能,通常會進行比較 BEP (P=R的點),不過BEP過于簡陋了,所以我們使用 F1度量:
??有的時候我們對查全率和查準率的要求不同,比方說,我們進行內容推薦的時候,要盡可能降低查全率提高查準率,因為我們的要求是更少的打擾。我們使用F1度量的一般形式——:
??其實我們可以發(fā)現(xiàn),F(xiàn)1是基于查準率和查全率的調和平均,也就是,
則是廣義的F1,也就是加權調和平均,
。
??對于,如果
,展開表達式很容易發(fā)現(xiàn)查全率會有更大的影響,如果
,則查準率更有影響。
學習經(jīng)驗
??在這里我會很粗略的講一下監(jiān)督學習(Supervised Learning)和非監(jiān)督學習(Unsupervised Learning)。事實上機器學習的算法則是粗略的分為這兩種。
??監(jiān)督學習算法: 簡單地說就是我們試圖將每一個數(shù)據(jù)都用一個相對應的類標(Label)進行關聯(lián),就好比我指著一堆車子,告訴你,這種形狀的就是車,或者說,以江西省為例,所有籍貫江西的人的身份證號前兩位都是36,這也是一個類標。我們讓一個小朋友去學習認識這些,每次錯誤的時候,我們相應的提醒糾正他,他慢慢的就會調整自己,不斷學習提高自己的識別能力。你可以把監(jiān)督學習認為是一種映射關系,對于每一個數(shù)據(jù) x ,都會有一個對應的 y。
??非監(jiān)督學習算法: 現(xiàn)實生活中,大部分數(shù)據(jù)是沒有標記的,即使我們人為的給它添加上標記,這個工作量基本上是無法估量的。非監(jiān)督學習就是在沒有標記的情況下,學習數(shù)據(jù)內部自有的結構和規(guī)律。最常使用的非監(jiān)督學習算法就是聚類,例如我們聽到了兩種毫無關聯(lián)的聲音,我們在此之前也從來沒有聽過。但是我們能很清楚的分辨出這兩種聲音,盡管我們并不知曉這兩種聲音是什么。但是我們的任務只是將他們以最大的共同點進行分類就行了。
??監(jiān)督學習費時費力,半監(jiān)督學習能力有限,那么有沒有什么是可以取到兩種算法的優(yōu)點呢?這個時候,我們提出了半監(jiān)督學習。
??半監(jiān)督學習很好理解,就是我們在面對大量無標記數(shù)據(jù)或者只有少部分有標記數(shù)據(jù)時,我們將兩種數(shù)據(jù)一起運用上,這就是半監(jiān)督學習。
??不過對于一個算法的學習來說,即使我們只標記一部分數(shù)據(jù),這樣的工作量也是很大的。并且存在一個問題,很多標記使用人為的方式并不好,標記通常都從環(huán)境中獲取。那么我們怎么評判這些數(shù)據(jù)的標記是否合適呢?我們只需要提供某些評價機制(獎勵和懲罰)。這一種學習方式我們稱為強化學習。不知道讀者中養(yǎng)狗的多不多,這種機制類似我們教狗上廁所,小狗可能不懂你的意思,但是它亂撒尿我們打它一頓,當它前往指定位置的撒尿我們獎勵它一個食物。慢慢的它自然就懂了。
我的掘金:WarrenRyan
我的簡書:WarrenRyan
歡迎關注我的博客獲得第一時間更新 https://blog.tity.online
我的Github:StevenEco