http://blog.sina.com.cn/s/blog_627a4f560100xmj1.html
在機器學習(Machine learning)領域,監督學習(Supervised learning)、非監督學習(Unsupervised learning)以及半監督學習(Semi-supervised learning)是三類研究比較多,應用比較廣的學習技術,wiki上對這三種學習的簡單描述如下:
- 監督學習:通過已有的一部分輸入數據與輸出數據之間的對應關系,生成一個函數,將輸入映射到合適的輸出,例如分類。
- 非監督學習:直接對輸入數據集進行建模,例如聚類。
- 半監督學習:綜合利用有類標的數據和沒有類標的數據,來生成合適的分類函數。
以上表述是我直接翻譯過來的,因為都是一句話,所以說得不是很清楚,下面我用一個例子來具體解釋一下。
其實很多機器學習都是在解決類別歸屬的問題,即給定一些數據,判斷每條數據屬於哪些類,或者和其他哪些數據屬於同一類等等。這樣,如果我們上來就對這一堆數據進行某種划分(聚類),通過數據內在的一些屬性和聯系,將數據自動整理為某幾類,這就屬於非監督學習。如果我們一開始就知道了這些數據包含的類別,並且有一部分數據(訓練數據)已經標上了類標,我們通過對這些已經標好類標的數據進行歸納總結,得出一個 “數據-->類別” 的映射函數,來對剩余的數據進行分類,這就屬於監督學習。而半監督學習指的是在訓練數據十分稀少的情況下,通過利用一些沒有類標的數據,提高學習准確率的方法。
鋪墊了那么多,其實我想說的是,在wiki上對於半監督學習的解釋是有一點點歧義的,這跟下面要介紹的主動學習有關。
主動學習(active learning),指的是這樣一種學習方法:
有的時候,有類標的數據比較稀少而沒有類標的數據是相當豐富的,但是對數據進行人工標注又非常昂貴,這時候,學習算法可以主動地提出一些標注請求,將一些經過篩選的數據提交給專家進行標注。
這個篩選過程也就是主動學習主要研究的地方了,怎么樣篩選數據才能使得請求標注的次數盡量少而最終的結果又盡量好。
主動學習的過程大致是這樣的,有一個已經標好類標的數據集K(初始時可能為空),和還沒有標記的數據集U,通過K集合的信息,找出一個U的子集C,提出標注請求,待專家將數據集C標注完成后加入到K集合中,進行下一次迭代。
按wiki上所描述的看,主動學習也屬於半監督學習的范疇了,但實際上是不一樣的,半監督學習和直推學習(transductive learning)以及主動學習,都屬於利用未標記數據的學習技術,但基本思想還是有區別的。
如上所述,主動學習的“主動”,指的是主動提出標注請求,也就是說,還是需要一個外在的能夠對其請求進行標注的實體(通常就是相關領域人員),即主動學習是交互進行的。
而半監督學習,特指的是學習算法不需要人工的干預,基於自身對未標記數據加以利用。
至於直推學習,它與半監督學習一樣不需要人工干預,不同的是,直推學習假設未標記的數據就是最終要用來測試的數據,學習的目的就是在這些數據上取得最佳泛化能力。相對應的,半監督學習在學習時並不知道最終的測試用例是什么。
也就是說,直推學習其實類似於半監督學習的一個子問題,或者說是一個特殊化的半監督學習,所以也有人將其歸為半監督學習。
而主動學習和半監督學習,其基本思想上就不一樣了,所以還是要加以區分的,如果wiki上對半監督學習的解釋能特別強調一下“是在不需要人工干預的條件下由算法自行完成對無標記數據的利用”,問題就會更清楚一些了。