半監督分類的方式:self-training和co-training的算法簡述

半監督學習文章:https://zhuanlan.zhihu.com/p/37747650

自我學習 (self-training)

自我訓練就是通過一系列的步驟,用已有的有標籤的數據(labelled data),去對剩下的還未標記的數據打標籤。從而使得訓練數據(training data)更多。具體步驟如下:

  1. 初始化有標籤數據和無標籤數據
  2. 重複
  3. a) 用有標籤的數據去訓練一個模型

b) 用這個模型來對沒有標籤的數據做預測

c) 只選取最有把握的預測結果來標記數據(unlabelled data)

d) 把新標記好的數據加入到原來的標記好的數據集中,同時把他們從原來的數據集中刪除

  1. 直到數據集不發生變化

注意不發生變化的可能性有兩種,一種是所有的數據最終都被打了標籤,另一種是該模型找不到“有把握”的預測結果了。

下面以KNN (K-Nearest Neighbour) 爲例:每一次都只找一個最有把握的預測結果。三角形表示爲未做標記的數據集。圓形和正方形就是2類數據。

 

協同學習 (co-training)

和自我學習一樣,協同學習的目的也是爲了用現有的有標籤的數據去標記其他數據。具體步驟如下:假設現在有數據集,每組數據有2個特徵(feature): x1 和 x2。我們把其中有標籤的那部分數據集稱爲L (表示爲[x1,x2,y]),沒有標籤的數據集稱爲U (表示爲[x1,x2])。

  1. 初始化數據,把L 分爲L1 ([x1,y]) 和L2 ([x2,y])。這裏注意,L 是一個數據集,裏面包涵了很多數據,我就順便提醒一下。
  2. 重複:a) 分別用L1和L2訓練出一個模型 F1和F2

b) 分別用模型F1和F2去預測U (給U打標籤),同樣這裏也是隻選出最有把握的一些結果。

c) 把F1預測的結果放入L2,把F2預測的結果放入L1 (交叉放置)

d) 更新L 和 U

3. 直到數據集不發生變化 (和自我學習一樣)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章