度量學習筆記(一) | Metric Learning for text categorization
作者 | Walker
編輯 | 安可
出品 | 磐創AI技術團隊
目前,機器學習中的K近鄰(KNN)分類演算法和支援向量機(SVM)演算法被認為是處理文字分類的最好方法。但KNN分類演算法有以下的缺陷:
KNN是基於近鄰度量的一種模式分類演算法,它高度依賴於資料間的相似度度量,簡單的歐式距離在實際應用時,由於不考慮不同維度之間對分類的影響以及輸入資料資料維數高的問題,往往不能取得良好的分類效果。
KNN 分類演算法雖然可以一定情況下克服資料偏斜帶來的分類誤差,但是這也是造成它對樣本密度分佈敏感的主要原因,當類間密度高度分佈不均時,分類效果會有較大的影響。
解決方案:要想提高KNN文字分類的準確率,首先要解決的是距離度量的問題,於是我們就要用到距離度量演算法,其中的大邊界最近鄰演算法(Large Margin Nearest Neighbor, LMNN)是一類專門改進 K 近鄰分類演算法的距離度量演算法。
那麼什麼是度量學習呢?度量學習 (Metric Learning) 是人臉識別中常用的傳統機器學習方法,由Eric Xing在NIPS 2002提出,可以分為兩種:一種是透過線性變換的度量學習,另一種是透過非線性變化的度量。其基本原理是根據不同的任務來自主學習出針對某個特定任務的度量距離函式。後來度量學習又被遷移至文字分類領域,尤其是針對高維資料的文字處理,度量學習有很好的分類效果。
LMNN是最常使用的一種度量學習演算法,其可以透過對訓練集學習來得到一種原始資料的新度量,這種方法可以在一定程度上對原始資料分佈進行重構,得到一個更加合理的資料分類空間。其次,要解決的就是樣本密度分佈不均的問題,在應用LMNN 演算法時我們注意到可能會加劇樣本的密度分佈不均衡,我們通常採用裁剪或是填充的方案。
大邊界最近鄰演算法(LMNN)是用於度量學習的統計機器學習演算法。它學習了為k近鄰分類設計的偽測量,是以監督方式學習該全域性(偽)度量的演算法,以提高k最近鄰規則的分類準確性。該演算法基於半定規劃,是凸最佳化的子類。LMNN背後的主要直覺是學習偽測量,在該偽測量下,訓練集中的所有資料例項被至少k個共享相同類標籤的例項包圍,該演算法學習該型別的偽測量:
矩陣M 需要是正半正定的。歐幾里德度量是一個特例,其中 M是單位矩陣。這種概括通常被稱為Mahalanobis度量。
LMNN樣本訓練前後的示意圖如下所示:
基於 LMNN 演算法的文字分類:文字分類首先要對文字進行特徵提取將待測試文字和訓練文字表示成向量空間模型(Vector Space Model, VSM),定義表示訓練文字集合,為類別集合,其中表示第i篇文章,di表示文字向量的第i維,此處採用IG演算法作為特徵提權演算法,然後採用LMNN方法對訓練資料集進行重構,最後使用 K 近鄰分類器來實現文字分類,評價標準使用F1值和查準率、查全率。
演算法流程:
(1)首先,對中文文字文字進行分詞、去停用詞等預處理。
(2)對文字進行特徵選擇,本文選用了IG 這種常用的的特徵提取演算法來對文字進行特徵提取。
(3)構造向量空間模型(Vector SpaceModel,VSM),本文所採用的是經典TF*IDF 法。
(4)對訓練樣本以歐氏距離用留一法計算出訓練集中每個資料點的先驗知識 K近鄰,並做好標籤,設定此 K 值為 Kp 。
(5)利用 LMNN 演算法對訓練集進行學習,求出對映矩陣 L。
(6)對訓練樣本和測試樣本分別作對映。
(7)跟據上一節中所提出的基於 LMNN 的文字分類演算法對測試集進行分類。
此外,在LMNN的基礎上,又有人提出了基於密度加權的 LMNN 分類演算法(DLMNNC):這是因為在將 LMNN 演算法與 KNN 結合時由於 LMNN 演算法的特點在很大程度上可能會增加樣本密度分佈不均勻,在應用於文字分類仍然會有較大的誤差。
針對此,我們又提出了基於密度加權的 K 近鄰分類演算法和 LMNN 文字分類演算法相結合,稱之為 DLMNNC 演算法.可以一定程度上解決上述由於 LMNN 的引入所造成的密度分佈更加不均勻問題。例如某網站中娛樂類新聞明顯要比歷史類新聞要多的多,這就有可能造成經特徵提取後的資料點在某種度量意義下密度分佈不均衡,特別地在應用 LMNN演算法來對樣本點進行距離度量學習時:
描述了了在目標樣本 i x 在其 K 個近鄰中噪聲點(impostor)的標準,並且以此定義非等價約束條件,對近鄰中的異類點有一個推力作用,使其在馬氏距離度量意義下遠離目標樣本。
密度公式:
其中, i x 為 j x 的 K 近鄰點, (,) Dx c i i 表示 K 近鄰中類標籤為 i y 向量的密度,K 為最近鄰數, i n 為類標籤為 i y 的 K 近鄰中向量個數,K近鄰決策公式表示為:
基於餘弦的距離度量學習(CS-LMNN)演算法:對於文字資料餘弦距離度量要比歐式距離度量要好一些,這主要因為:對於不同向量,方向性要比數值更加重要,而傳統的歐氏距離度量標準只對數值敏感,並沒有利用向量之間的方向性。而餘弦相似度和歐式距離度量相比較,更加註重兩個向量在方向上的差異,而非距離或長度。
根據類標籤相同的點應儘量相近,類標籤不同的點應儘量遠離這兩個條件我們提出了一種新的基於餘弦的距離度量學習演算法,稱之為 CS-LMNN 演算法。該演算法和 LMNN 演算法類似,也需要訓練集的 K 近鄰先驗知識同樣以 Kp表示,它根據餘弦夾角的性質,即任意夾角的餘弦值不可能大於 1,這一條件來構造非等價性約束,然後,在最最佳化表示式中,透過最小化近鄰同類標籤樣本的餘弦距離來構造等價性條件。最終,將兩條件改寫為一個最最佳化問題進行求解。具體演算法流程如下:首先,定義餘弦距離度量,在訓練集 D中任意兩點 ,i j x x 間的餘弦距離度量表示式:
目標樣本 i x 具有類標籤 i c 在其 K 近鄰點中有 l x 類標籤為 l c ,定義噪聲點為對任意目標樣本 i x 有 l i c c ≠ ,滿足:
損失函式:
基於餘弦距離度量(CS-LMNN)的文字分類演算法的具體流程如下:
PFLMNN:Parameter Free Large Margin Nearest Neighbor for DistanceMetric Learning:PFLMNN(無引數大邊界最近鄰)是一種新的度量學習演算法,不同於LMMN將目標鄰居拉到一起,同時將冒名頂替者推開,我們的方法只考慮將冒名頂替者推出鄰居的行為。這種方式與LMNN相比,我們簡化了我們的最佳化問題的任務。
為了提高k個最近鄰之間的距離和查詢的能力,PFLMN是一種利用LMNN忽略的冒名者之間的幾何資訊推送冒名者的新方法。簡而言之,僅考慮每個查詢的最近活動冒名頂替者。根據距離度量,當最近的冒名頂替者不在附近時,所有其他冒名頂替者都不在。透過這種方式,減少了由冒名頂替者顯示的需要被推動的約束,使得所提出的模型在不削弱其約束能力的情況下將更加簡單。
因此,與LMNN相比,PFLMNN模型更容易被最佳化。此外,由於模型只包含一個項,因此不需要調整成本函式中的引數,使得該方法更便於使用。我們比較一下LMNN與PFLMNN的異同,LMNN是k=3鄰域在小半徑內被拉在一起,而具有不同標記的輸入被從小半徑內拉出有限邊距。
LMNN原理圖
PFLMNN原理圖
如圖所示,與LMNN不同的是,PFLMNN只採取拉不同標記輸入的動作。以有限的餘量從小半徑中拉出來,這樣模型更加簡單,易被最佳化。
【總結】:本文從中文文字分類問題出發,介紹了LMNN、DLMNNC、CS-LMNN、PFLMNN等幾種常見的幾種度量學習。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31555081/viewspace-2558428/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 機器學習: Metric Learning (度量學習)機器學習
- 深度學習 DEEP LEARNING 學習筆記(一)深度學習筆記
- Oracle Text 學習筆記(11G)<一> :手工建立TEXTOracle筆記
- Deep Learning(深度學習)學習筆記整理系列之(一)深度學習筆記
- 深度學習 DEEP LEARNING 學習筆記(二)深度學習筆記
- Deep Learning(深度學習)學習筆記整理系列深度學習筆記
- 強化學習-學習筆記8 | Q-learning強化學習筆記
- AI學習筆記之——如何理解機器學習(Machine Learning)AI筆記機器學習Mac
- 讀書筆記-增量學習-Large Scale Incremental Learning筆記REM
- 【深度學習】大牛的《深度學習》筆記,Deep Learning速成教程深度學習筆記
- 學習筆記(一)筆記
- CSS學習筆記:溢位文字省略(text-overflow)CSS筆記
- Zero shot Learning 論文學習筆記(未完待續)筆記
- kitten 學習教程(一) 學習筆記筆記
- Neural Networks and Deep Learning(神經網路與深度學習) - 學習筆記神經網路深度學習筆記
- LaTeX學習筆記:一筆記
- ANFIS學習筆記(一)筆記
- Angular 學習筆記(一)Angular筆記
- GOLang 學習筆記(一)Golang筆記
- oracle學習筆記《一》Oracle筆記
- React 學習筆記【一】React筆記
- Jquery學習筆記(一)jQuery筆記
- goLang學習筆記(一)Golang筆記
- Canvas學習筆記(一)Canvas筆記
- SCSS學習筆記(一)CSS筆記
- vue學習筆記一Vue筆記
- Kettle學習筆記(一)筆記
- kafka學習筆記(一)Kafka筆記
- Cesium學習筆記(一)筆記
- opencv學習筆記(一)OpenCV筆記
- 深度學習 筆記一深度學習筆記
- javaNIO學習筆記一Java筆記
- Maven 學習筆記一Maven筆記
- css學習筆記(一)CSS筆記
- 學習Mysql筆記(一)MySql筆記
- redux 學習筆記(一)Redux筆記
- clojure學習筆記(一)筆記
- git學習筆記(一)Git筆記