本篇部落格將介紹semi-supervised learning的實現方法
介紹:
之前我們所介紹的機器學習所提到的資料都是帶有label的。而現實是,蒐集這些帶有label的資料並不是一件簡單的事情,但是蒐集一些不帶有label的資料就要容易很多。semi-supervised learning指的是就是在利用一些帶有label和一些不帶有label的資料進行機器學習。
引用自李巨集毅(台灣大學)機器學習
對於上圖的帶有label的資料,我們很容易將其分開,那如果加入一些不帶有label的資料呢?
原創好像加入這些unlabeled data之後,依舊可以用一條線將資料分類,當然這樣的分類帶有一定我們自己的假設,上圖的分類方式是一種可能性比較大的分類方式,那這樣的話,我甚至可以做下面的假設
原創上圖的假設好像也沒有什麼不合理的地方。
那既然兩種假設都很合理,我們如何確定到底是哪種分類方式比較優秀呢,下面我們就要介紹一些處理semi-supervised learning的方法。
1.semi-supervised generative model
我們在之前提到過資料的高斯分布以及最大似然估計還有最大似然估計時用到的貝葉斯公式,在這裡的generative model也是參考supervised learning所用到的generative方法。我們首先將我們手裡的資料分開,分成已經有label的和還未被label的,這樣對於已經有label的我們可以使用之前提過的generative model來獲取其最大似然估計的相關引數,而且我們手裡的沒有label的資料似乎可以幫我們繼續優化這個模型。
所以,這種方法的一般步驟如下:
假定我們有一把資料,這組資料有一些labeled資料,一些unlabeled資料,labeled資料用xr
表示,unlabeled資料用xu
表示(注意這裡的xr
,xu 都是一種廣義上的表示方式,並不是表示某乙個特定的資料向量)
①初始化相關引數θ=
②計算所有的unlabeled data的屬於c1
的概率: pθ
(c1|
xu)
③ p(c
1)=n
1+∑x
upθ(
c1|x
u)n
μ1=1
n1∑x
r∈c1
xr+1
∑xup
θ(c1
|xu)
∑xux
up(c
1|xu
) 重複②③步驟
①使用已經有label的資料先進行訓練
②將沒有label的資料帶到已經訓練好的模型,考察每個資料的分類
③將一部分unlabeled data加入到labeled data,重複之前步驟
這裡提一下我們訓練時候所要用到的損失函式,下面的損失函式經常被用到 l(
θ)=∑
xrc(
yr,y
r^)+
λ∑xu
e(yu
) 其中e
(yu)
=−∑m
=1ny
umln
yum
這裡請讀者思考為什麼要設定這樣的損失函式
3.smoothness assumption
下面這張圖生動形象地表現了這種假設:
這種假設的大致意思就是說,如果兩組資料周邊有密度很高的資料,當兩組資料之間沒有跨過低密度資料區的時候,就認為兩組資料是同一類。就像x1
到x2 之間資料區密度非常高,x1
和x2 就非常有可能是同一類。x1
和x3 之間就跨過了低密度資料區,那麼x1
和x3 很可能不是同一類。
基於這種假設,我們可以對unlabeled資料進行分簇。
下面介紹分簇方法–基於圖的方法
就是將這些unlabeled資料連成圖
連成圖的方法有兩種方法:
(1)k nearest neighbor
(2)e-neighborhood
k nearest neighbor指的就是將所有的資料當作圖的節點,將乙個節點同它k個離它最近的節點連在一起
e-neighborhood就是指將節點同離它距離小於e的節點相連
我們將圖路徑上的權重定義如下: s(
xi,x
j)=e
−γ|x
i−xj
|2那如何去衡量乙個圖的smooth程度呢
我們將乙個圖的光滑程度定義如下: s(
θ)=1
2∑i,
jwi,
j|yi
−yj|
2=yt
ly(對
於所有數
據不管是
否有標籤
我們訓練時候所用到的損失函式定義如下: l(
θ)=∑
xrc(
yr,y
r^)+
λs上面的光滑程度函式,y和l還沒有解釋,下面的是y和l的具體形式: y=
⎛⎝⎜⎜
⎜⎜⎜⎜
⎜⎜⎜⎜
⎜y1⋮
yi⋮y
j⋮⎞⎠
⎟⎟⎟⎟
⎟⎟⎟⎟
⎟⎟⎟
l=d−
w 其中w是權重矩陣,d僅有對角線有值 di
機器學習 學習記錄(四)
本篇部落格將介紹深度學習時所用到的一些tips。我們知道,機器學習的三大步驟 function set,goodness of function,pick up the best function 那如果我們最終得到的結果壞掉了怎麼辦。如果壞掉了,到底是這三步的哪乙個步驟出現了問題呢?結果的壞掉有兩...
機器學習實戰學習記錄
1 k近鄰演算法 k近鄰演算法的一般流程 1 收集資料 可以使用任何方法。2 準備資料 距離計算所需要的數值,最好是結構化的資料格式。3 分析資料 可以使用任何方法。4 測試演算法 計算錯誤率。5 使用演算法 首先需要輸入樣本資料和結構化的輸出結果,然後執行k近鄰演算法判定輸入資料分別屬於哪個分類,...
python學習記錄 機器學習
首先安裝了anaconda3軟體,安裝的是最新版,安裝時勾選了寫入環境變數,支援的是python3.7.3版本。然後設定了清華大學的映象,主要是用管理員身份執行 anaconda prompt命令列,然後執行conda config命令,然後執行 然後,需要更新spyder3.3.3為3.3.4,仍...