1. 程式人生 > >半監督學習——方法介紹

半監督學習——方法介紹

Semi-Supervised Learning

半監督學習(二)

 

  介紹

    在上篇文章中我們介紹了關於統計機器學習和半監督學習的一些基本概念。在這篇文章中,我們仍著重帶讀者更深入地瞭解半監督學習基礎,瞭解半監督學習的常用方法,模型假設,並且通過例項帶讀者去理解半監督學習的過程。難度依然較基礎,但是相信讀完這篇文章,你會對半監督學習是什麼有完整的把握。

 

半監督學習方法   

     半監督學習方法有很多,不同的方法往往基於邊緣分佈P(x)與條件分佈P(y|x)之間關係的不同假設。

  通常我們將半監督方法分為以下幾類:self-training, probabilistic generative models, co-training, graph-based models, semi-supervised support vector machines等,在接下來的內容中,我們將分別介紹這些方法以及它們所基於的假設。

  雖然半監督的方法很多,但是如果盲目地選擇並不一定能提升監督學習的表現,事實上,使用錯誤的假設,無標籤資料反而會使模型的表現更差。

  下面,我們通過簡單的例子來證明模型假設的敏感性,通過比較在簡單分類問題上,監督學習和半監督學習的表現來闡述。

  例子

      有一個二分類問題,每個類服從高斯分佈,且這兩個類的高斯分佈大量重疊,如下圖所示:

 

  可以看出,真實的決策邊界就在兩個分佈的中間(黃線),由於我們知道真實分佈,我們可以根據落在決策邊界不正確一側的每個高斯概率質量來計算測試樣本錯誤率。由於類分佈的重疊,最優誤差率(Bayes誤差)為21.2%。

 

  不同演算法表現比較

    

 

  • 監督學習:從圖中可以看出,學習到的決策邊界位於兩個有標籤樣本(忽略無標籤資料,即圖中綠色的點)的中間,偏離了真實的決策邊界,根據有標籤資料的隨機取樣不同,學習到的決策邊界也不同,但是大概率地也會偏離真實邊界。為了比較監督學習和半監督學習的表現,我們取樣了1000個樣本點,其中每一種類別分別取樣一個有標籤資料和99個無標籤資料(如上圖五組測試樣例),在該訓練集上通過監督學習得到的決策邊界的分類錯誤率為31.6%,雖然決策邊界的均值是0.02(很接近真實邊界0),但是標準差為0.72;

 

  下面幾種演算法屬於半監督學習,今天我只對比實驗效果,下一篇文章中會給出每一種模型的詳細介紹:

 

  • 概率生成模型(Generative model):通過EM學習兩個高斯分佈(該模型做出了正確的假設),從圖中可以看出,學習到的決策邊界比較接近真實邊界,而且方差也比較小。其在1000個樣本上的平均誤差為30.2%,平均決策邊界為-0.003,標準差為0.55,表明該演算法比監督學習更優;

  • 半監督支援向量機(S3VM):它假設決策邊界不應該通過密集的樣本區域,然而我們的兩類樣本重疊比較嚴重,所以真實的邊界其實是闖過點密集的區域的(假設不成立)。這種狀況下學習到的決策邊界又會怎麼樣呢?從圖中我們可以看出學習到的決策邊界仍優於監督學習,和生成模型方法效果差不多。平均誤差為29.6%,平均決策邊界為0.01,標準差為0.48。可以看到,雖然模型假設是錯誤的,但由於該方法使用的兩種類別樣本數相同(太理想),所以決策邊界接近於中心;

  • 基於圖的模型(graph-based):標記資料和未標記資料兩兩之間都用一條邊相連,邊權重用兩點之間的距離來衡量(近則權重大)。該模型的假設是兩個點之間的權重越大越趨於同一個類。顯然,這個假設在我們的樣本上並不成立(分佈重疊區靠的近的點可能屬於不同的類),那它的表現如何呢?它的錯誤率是36.4%,平均決策邊界是0.03,標準差是1.23,表現比監督學習還差得多。

  上面的實驗說明模型假設在半監督學習中至關重要,它彌補了標籤缺失的不足,決定了判別器的質量,然而做出正確假設仍然是半監督學習中待解決的問題。

    

  接下來,我們先介紹一種簡單的半監督學習模型Self-Training Model 作為半監督演算法學習的入門。

 

 

Self-Training

  Self-Training是最經典的半監督學習方法,他的特點是學習的過程是使用自己的預測器來自學習,因此也叫自學習模型。

  演算法虛擬碼:

    演算法的主要思想是先在有標籤資料上訓練一個模型f,然後用f取預測無標籤資料,然後取出部分資料加入有標籤資料集,然後又在擴充後的有標籤資料集上重新訓練模型,重複上述流程。

 

 Self-Training Assumption:

    該演算法基於的假設是訓練出來的模型很大概率是正確的。它的優點是簡單,模型的選擇也是開放的,比如可以是簡單的kNN模型,或者非常複雜的分類器,通過一層層“包裹”分類模型而不改變實際內部機制。這種模型在很多場景下都適用,比如自然語言處理中,因為模型通常是複雜的黑盒模型,不適應變化。但是,由於初始有標籤樣本比較少,學習到的模型並不好,生成錯誤標籤的資料反而會使得在下一輪生成更加錯誤的模型,當然,很多啟發式的方法已經被用來改善這個問題,比如propagating 1-nearest-neighbor演算法。

 

propagating 1-nearest-neighbor

 

    演算法的思想是每一輪都選一個距離有標籤資料集中某一個點最近的無標籤資料,並打上相同的標籤加入有標籤資料集中,迴圈直到所有無標籤資料都打上標籤。我們來看該演算法的一個應用:

假設有100個樣本其中只有2個有標籤分別表示男性和女性,其他98個沒有標籤,每個樣本有兩個維度特徵(weight & height),現在要為98個人預測其性別。

下圖展現了使用propagating 1-nearest-neighbor演算法一定輪數的迭代後樣本的分類狀況。由於該演算法的假設(這些類形成分類良好的簇)符合實驗樣本的分佈,所以模型的效果很好。

 

 

 

  接著我們在上一個實驗中的兩個類之間新增一個離群點,這個離群點打破了上述假設,來看看實驗效果如何吧?

 

 

    顯然,self-training方法,比如說propagating 1-nearest-neighbor對離群點很敏感會導致錯誤。

 

總結:

    今天的內容仍然是半監督學習的入門內容,結合上一篇文章相信你已經理解了什麼是半監督學習,以及半監督學習一般的學習過程,接下來的文章會開始詳細介紹和分享幾種經典的,以及近幾年提出的半監督學習演算法!

    

  希望大家多多支援我的公眾號,掃碼關注,我們一起學習,一起進步~

&n