1. 程式人生 > >監督學習和無監督學習

監督學習和無監督學習

        機器學習的常用方法,主要分為有監督學習(supervised learning)和無監督學習(unsupervised learning)。監督學習,就是人們常說的分類,通過已有的訓練樣本(即已知資料以及其對應的輸出)去訓練得到一個最優模型(這個模型屬於某個函式的集合,最優則表示在某個評價準則下是最佳的),再利用這個模型將所有的輸入對映為相應的輸出,對輸出進行簡單的判斷從而實現分類的目的,也就具有了對未知資料進行分類的能力。在人對事物的認識中,我們從孩子開始就被大人們教授這是鳥啊、那是豬啊、那是房子啊,等等。我們所見到的景物就是輸入資料,而大人們對這些景物的判斷結果(是房子還是鳥啊)就是相應的輸出。當我們見識多了以後,腦子裡就慢慢地得到了一些泛化的模型,這就是訓練得到的那個(或者那些)函式,從而不需要大人在旁邊指點的時候,我們也能分辨的出來哪些是房子,哪些是鳥。監督學習裡典型的例子就是KNN、SVM

。無監督學習(也有人叫非監督學習,反正都差不多)則是另一種研究的比較多的學習方法,它與監督學習的不同之處,在於我們事先沒有任何訓練樣本,而需要直接對資料進行建模。這聽起來似乎有點不可思議,但是在我們自身認識世界的過程中很多處都用到了無監督學習。比如我們去參觀一個畫展,我們完全對藝術一無所知,但是欣賞完多幅作品之後,我們也能把它們分成不同的派別(比如哪些更朦朧一點,哪些更寫實一些,即使我們不知道什麼叫做朦朧派,什麼叫做寫實派,但是至少我們能把他們分為兩個類)。無監督學習裡典型的例子就是聚類了。聚類的目的在於把相似的東西聚在一起,而我們並不關心這一類是什麼。因此,一個聚類演算法通常只需要知道如何計算相似度就可以開始工作了。

         那麼,什麼時候應該採用監督學習,什麼時候應該採用非監督學習呢?我也是從一次面試的過程中被問到這個問題以後才開始認真地考慮答案。一種非常簡單的回答就是從定義入手,如果我們在分類的過程中有訓練樣本(training data),則可以考慮用監督學習的方法;如果沒有訓練樣本,則不可能用監督學習的方法。但是事實上,我們在針對一個現實問題進行解答的過程中,即使我們沒有現成的訓練樣本,我們也能夠憑藉自己的雙眼,從待分類的資料中人工標註一些樣本,並把他們作為訓練樣本,這樣的話就可以把條件改善,用監督學習的方法來做。當然不得不說的是有時候資料表達的會非常隱蔽,也就是說我們手頭的資訊不是抽象的形式,而是具體的一大堆數字,這樣我們很難憑藉人本身對它們簡單地進行分類。這個說的好像有點不大明白,舉個例子說就是在bag of words 模型的時候,我們利用k-means的方法聚類從而對資料投影,這時候用k-means就是因為我們當前到手的只有一大堆資料,而且是很高維的,當我們想把他們分為50個類的時候,我們已經無力將每個資料標記說這個數應該是哪個類,那個數又應該是哪個類了。所以說遇到這種情況也只有無監督學習能夠幫助我們了。那麼這麼說來,能不能再深入地問下去,如果有訓練樣本(或者說如果我們可以獲得到一些訓練資料的話),監督學習就會比無監督學習更合適呢?(照我們單純地想,有高人教總比自己領悟來的準,來的快吧!)我覺得一般來說,是這樣的,但是這要具體看看訓練資料的獲取。本人在最近課題的研究中,手動標註了大量的訓練樣本(當然這些樣本基本準確了),而且把樣本畫在特徵空間中發現線性可分性非常好,只是在分類面附近總有一些混淆的資料樣本,從而用線性分類器進行分類之後這樣樣本會被誤判。然而,如果用混合高斯模型(GMM)來分的話,這些易混淆的點被正確分類的更多了。對這個現象的一個解釋,就是不管是訓練樣本,還是待聚類的資料,並不是所有資料都是相互獨立同分布的。換句話說,資料與資料的分佈之間存在聯絡。在我閱讀監督學習的大量材料中,大家都沒有對訓練資料的這一假設(獨立同分布)進行說明,直到我閱讀到一本書的提示後才恍然大悟。對於不同的場景,正負樣本的分佈如果會存在偏移(可能是大的偏移,也可能偏移比較小),這樣的話用監督學習的效果可能就不如用非監督學習了。