主動學習

用已標記樣本訓練出一個模型,用模型對未標記樣本進行預測,選出對改善性能有幫助(比如選出那些不太確定的未標記樣本)的樣本,向專家徵求最終標記的意見,並將專家意見作為標記,將該樣本加入訓練集得出新模型,不斷重複這個工作。

關鍵:外界因素,即專家經驗;

半監督學習

讓學習器不依賴外界交互、自動地利用未標記樣本提升學習性能,就是半監督學習;當然也可以用這種方法給金融樣本打標籤,進行拒絕推斷。

純半監督學習,其實就是充分利用已標記樣本與未標記樣本,得到一個模型,具有相當好的預測性;而直推學習,其實就是利用已知與未知標記樣本建模,最終得到未標記樣本的標籤的預測。前者是得到了高泛化能力的模型,後者是得到未知標記樣本的最優預測;其實可以看做是一回事。

通常需要做出一些假設,即未標記樣本的數據分佈信息與已標記樣本直接相聯繫。

生成式方法(generative methods)

假設所有的數據,不論標記與否都由同一個潛在的模型生成的;而未標記數據的標記看作是潛在模型的缺失參數。使用EM演算法(專門求解含有隱變數的參數解問題)進行求解,相當於潛在模型的缺失參數是隱變數,模型的假設不同,方法不同。

這種方法在有標記數據極少的情形下往往比其他方法性能更好。

關鍵:模型假設必須準確,否則會降低泛化性能;這需要充分可靠的領域知識。

模型假設:比如高斯混合模型、混合專家模型、樸素貝葉斯模型。

學習到:最終得到樣本的概率(當然也看假設的模型是什麼)。

半監督SVM

半監督支持向量機(semi-supervised support vector machine,簡稱為S3VM)。

在不考慮標記樣本時,SVM試圖找到最大間隔劃分的超平面,而考慮未標記樣本後,S3VM試圖找到的,是能夠將兩類有標記樣本分開,同時要穿過數據低密度區域的超平面。(之所以要穿過低密度區,是因為存在未標記樣本,有一些聚類的思想)

TSVM演算法,針對二分類問題:

步驟:

首先利用有標記樣本學得一個SVM,利用該分類器對未標記數據進行標記指派,並將結果當做真實標記重新訓練一個SVM,可以得出新的超平面和鬆弛向量,因為此時的未標記樣本不準確,所有Cu<Cl,使得已標記樣本所佔比重更大;

之後找出兩個標記指派為異類的且很可能發生錯誤的未標記樣本,交換它們的標記,繼續訓練SVM得到超平面和鬆弛向量;

再繼續重複上個過程直到標記調整完成;逐漸增大Cu的值,直到Cu=Cl。

此時可以得到未標記樣本的標記,

Dl為已知標記的樣本,Du是未知標記的樣本。

存在的問題:計算開銷很大;若存在多個低密度劃分,則效果很差。

針對高效優化求解問題,有基於圖核(graph kernel)函數梯度下降的LDS、基於標記均值估計的meanS3VM等。

或許可以這樣理解,其實就是使用SVM演算法進行預測,只是加入的調整SVM模型的步驟(反覆試錯),不斷迭代調整,找到使得所有樣本(包括已標記和未標記)的良好的分割面。

圖半監督學習

即標籤傳播演算法,基於高斯核來定義兩樣本的相似度/邊的權重(每個樣本就是一個節點,相連的邊的強度就是權重大小)。

每個節點的標籤按相似度傳播給相鄰節點,在節點傳播的每一步,每個節點都根據相鄰節點的標籤來更新自己的標籤,與該節點相似度越大,則相鄰節點對其標註的影響權值越大,節點的標籤更趨於一致。傳播過程中,已標記數據的標籤不變,最終迭代結束時,相似節點的概率分佈也趨於相似。

關鍵:圖的質量很重要,常用高斯距離圖、k近鄰圖、ε近鄰圖。

存在的問題:1.存儲開銷大,難以處理大規模數據;2.接收到新樣本時,需要對圖進行重構並重新進行標記傳播;當然,可以引入預測機制,將更新的未標記樣本作為訓練集的一部分,單獨訓練一個模型對新樣本進行預測。

或許可以這樣理解:就是近鄰與基於距離的聚類思想,相似的樣本具有相似的標記。

基於分歧的方法

協同訓練(co-training),協同訓練能夠很好的利用不同特徵之間,不同模型之間,不同數據採樣,甚至不同參數產生的不同學習器,利用它們之間的相容性與互補性,提高弱分類器的泛化能力。

原本是針對多視圖數據設計的,多視圖就是樣本對象有多個屬性集,每個屬性集就是一個視圖。比如電影中的畫面類和聲音類就是兩個視圖。

相容性:即視圖最終的輸出空間(輸出結果範圍)是一致的:{好,壞},{+1,-1}。

互補性:各自提供了不同的視角看待問題,相互補充,集成的思想。

關鍵:使得分類器之間存在顯著的差異。

可以通過不同的特徵、不同的演算法、不同的數據採樣、不同參數設置來得到這些差異。

具體過程:

前提:數據擁有兩個充分且條件獨立的視圖。充分是每個視圖都包含足以產生最優學習器的信息,條件獨立是指非定類別標記條件下兩個視圖獨立。(即將數據分成兩部分,每個部分都能得到較好的分類器)

首先,使用每個視圖基於有標記樣本分別訓練出一個分類器;

之後,利用這兩個分類器,均對所有未標記樣本進行預測,並挑選出各自分類器中置信度最高的那些交給另一個分類器重新訓練模型;

重複這樣的操作,直到終止。

選擇合適的基學習器很重要!不同特徵、不同演算法、不同數據採用、不同參數設置等僅是產生差異的方法。

或許可以這樣理解:就是利用兩個分類器(有顯著不同的兩個)進行預測,並結合了迭代調整的過程(分別取出單個分類器預測較準確的值交給另一個作為已標記樣本,訓練模型),還擁有一個特點是集成的思想(不同分類器從不同的角度學習樣本,綜合起來效果更好),最終得到兩個分類器相互調整建模預測的結果。

半監督聚類

先將已知類別聚類得到各類別的聚類中心,再根據已知類別樣本聚類結果,擴展到未標記樣本繼續聚類,已知類別的標記始終不變。

本質:k均值聚類的距離相似性來判斷標籤。

流形假設

假設數據分佈在一個流形結構上,鄰近的樣本擁有相似的輸出值。鄰近程度用相似程度來刻畫,可以說是聚類的假設的推廣。本質與聚類假設是相同的:相似的樣本具有相似的輸出!

上述這些方法的思想或許可以分為兩種:

近鄰與聚類的思想,直接或間接的衡量樣本的空間分佈信息,根據空間分佈情況來進行預測;分類器集成預測的思想,利用的是不同分類器從不同角度學習數據,並進行預測。

實際使用效果

注意,僅供參考,不具有普適性,僅僅是在一個特定數據上的嘗試!

前段時間,用python嘗試了標籤傳播演算法與協同訓練,使用的數據是某公司金融風控方面的特徵和對應的真實金融標籤(正常還款、違約);用這兩種方法對比建模,查看各種方法對應的打標籤的質量情況。

標籤傳播演算法,嘗試的方法:

  1. xgb建模預測未標記標籤的情況;
  2. 直接使用標籤傳播演算法打標籤;標準化數據後,同樣方法打標籤;
  3. 對數據進行特徵提取:PCA/KPCA/LDA,之後標籤傳播演算法打標籤;
  4. 用xgb特徵重要性選擇特徵/特徵方差大小選擇特徵,對比不同特徵時演算法的效果;
  5. 使用sklearn中LabelPropagation/LabelSpreading,對比區別;
  6. 不同的未標記樣本比例時進行打標籤的效果

結果:

  1. 實際效果

對壞樣本的標記的準確度稍微過半0.6左右,好樣本準確度高些0.8多些,或許是因為樣本中好壞比例有關(大概4:1左右);隨著未知標記的樣本增加,效果略有下降,但僅是百分位的下降。

直接使用的話,這樣的準確度打標籤是不夠的,不夠如果必須做的話,可以嘗試下不同好壞樣本比例,或者進行過採樣後進行等等,需要進一步嘗試。

  1. Sklearn中的兩個標籤傳播演算法區別:

對雜訊的魯棒性不同

1.labelspreading中含有alpha=0.2,alpha稱為夾緊係數,指的是採用其鄰居的信息而不是其初始標籤的相對量,若為0,表示保留初始標籤信息,若為1,表示替換所有初始信息;設置alpha=0.2,意味著始終保留80%的原始標籤信息;

2.labelpropagation使用從數據中構造的原始相似矩陣,不做修改;labelspreading最小化具有正則化特性的損失函數,對雜訊更加穩健,迭代了原始圖的修改版,並通過計算歸一化拉普拉斯矩陣來標準化邊權重。

消耗內存與CPU不同

LabelSpreading非常佔用CPU,物理內存佔用率還好;LabelPropagation 的CPU佔用率還好,非常佔用物理內存。因此,高緯度數據還是難以使用的。

三.特徵提取與選擇

PCA/KPCA沒什麼效果,LDA效果還是很好的(相比其他方法得出的結果而言);

因為這種演算法本身是基於距離或近鄰的類似聚類的方法,反應的是空間分佈的情況,那麼如何才能選出能在空間中實現較好分類的特徵呢?還需要繼續探索。

協同訓練方法,嘗試的工作:

  1. 將特徵分為兩份,交給兩個相同的分類器(LR/SVM/XGB)進行協同訓練;對比相應的分類器直接建模進行預測;
  2. 不劃分數據(此處不太好,還是應該將數據分為兩部分進行),交給不同的兩個分類器進行協同訓練;
  3. 不同的未知標籤樣本比例時,嘗試上述這些方法。

結果:

  1. 兩個相同分類器協同訓練時,不同的分類器效果是不同的;或許對應的就是實際建模的效果,這就是前面西瓜書上說的分類器的選擇很重要。
  2. 隨著未標記樣本比例的增加,效果同樣略有下降;相比標籤傳播演算法,效果略好一點點,但是這樣的準確度(關鍵是對壞樣本打標籤的效果比較差,精度0.6左右,召回率0.25-0.4左右),同樣是難以使用的.
  3. 用建模的方法直接進行預測,效果是最穩定的,也達到同樣甚至略高些的效果。

關於協同訓練,其實就是兩個模型在進行共同學習與預測;或許通過建立多個較好的模型投票決定標籤會有不錯的效果。

總的來講,單一使用某種方法應該是不夠的,因為原本並非所有樣本都能進行很好的分類;如果分類都比較困難,還如何進行半監督下的分類呢。如果想要靠譜些,還是需要引入主動學習吧。

參考資料:西瓜書,鄒博老師的課程,其他課程(來源眾多,各方學習,當然其中也有記錄些自己對演算法的理解,無意侵權,僅做為筆記總結與知識交流用,在此也謝過大牛與前輩的分享)等等。


推薦閱讀:
相關文章