机器学习(二十)——EMD, LSA, HMM
http://antkillerfarm.github.io/
P-R、ROC和AUC
很多學習器是為測試樣本產生一個實值或概率預測,然后將這個預測值與一個分類閾值(threshold)進行比較,若大于閾值則分為正類,否則為反類。這個實值或概率預測結果的好壞,直接決定了學習器的泛化能力。實際上,根據這個實值或概率預測結果,我們可將測試樣本進行排序,“最可能”是正例的排在最前面,“最不可能”是正例的排在最后面。這樣,分類過程就相當于在這個排序中以某個“截斷點”(cut point)將樣本分為兩部分,前一部分判作正例,后一部分則判作反例。
在不同的應用任務中,我們可根據任務需求來采用不同的截斷點,例如若我們更重視 “查準率”(precision),則可選擇排序中靠前的位置進行截斷,若更重視“查全率”(recall,也稱召回率),則可選擇靠后的位置進行截斷。
對于二分類問題,可將樣例根據其真實類別與學習器預測類別的組合劃分為真正例(true positive)、假正例(false positive)、真反例(true negative)和假反例(true negative)。
查準率P和查全率R的定義如下:
P=TPTP+FP,R=TPTP+FN
以P和R為坐標軸,所形成的曲線就是P-R曲線。
ROC(Receiver operating characteristic)曲線的縱軸是真正例率(True Positive Rate,TPR),橫軸是假正例率(False Positive Rate,FPR)。其定義如下:
TPR=TPTP+FN,FPR=FPTN+FP
ROC曲線下方的面積被稱為AUC(Area Under ROC Curve)。
Earth mover’s distance
推土機距離(EMD)是兩個概率分布之間的距離度量的一種方式。如果將區間D的概率分布比作沙堆P,那么Pr和Pθ之間的EMD距離,就是推土機將Pr改造為Pθ所需要的工作量。
EMD的計算公式為:
EMD(Pr,Pθ)=∑mi=1∑nj=1fi,jdi,j∑mi=1∑nj=1fi,j
其中,f表示土方量,d表示運輸距離。
EMD可以是多維分布之間的距離。一維的EMD也被稱為Match distance。
在文本處理中,有一個和EMD類似的編輯距離(Edit distance),也叫做Levenshtein distance。它是指兩個字串之間,由一個轉成另一個所需的最少編輯操作次數。許可的編輯操作包括將一個字符替換成另一個字符,插入一個字符,刪除一個字符。一般來說,編輯距離越小,兩個串的相似度越大。
注:嚴格來說,Edit distance是一系列字符串相似距離的統稱。除了Levenshtein distance之外,還包括Hamming distance等。
Vladimir Levenshtein,1935年生,俄羅斯數學家,畢業于莫斯科州立大學。2006年獲得IEEE Richard W. Hamming Medal。
參考:
https://vincentherrmann.github.io/blog/wasserstein/
http://chaofan.io/archives/earth-movers-distance-%e6%8e%a8%e5%9c%9f%e6%9c%ba%e8%b7%9d%e7%a6%bb
LSA
基本原理
Latent Semantic Analysis(隱式語義分析),也叫Latent Semantic Indexing。它是PCA算法在NLP領域的一個應用。
在TF-IDF模型中,所有詞構成一個高維的語義空間,每個文檔在這個空間中被映射為一個點,這種方法維數一般比較高而且每個詞作為一維割裂了詞與詞之間的關系。
為了解決這個問題,我們要把詞和文檔同等對待,構造一個維數不高的語義空間,每個詞和每個文檔都是被映射到這個空間中的一個點。
LSA的思想就是說,我們考察的概率既包括文檔的概率,也包括詞的概率,以及他們的聯合概率。
為了加入語義方面的信息,我們設計一個假想的隱含類包括在文檔和詞之間,具體思路是這樣的:
1.選擇一個文檔的概率是p(d)
2.找到一個隱含類的概率是p(z|d)
3.生成一個詞w的概率為p(w|z)
實現方法
上圖中,行表示單詞,列表示文檔,單元格的值表示單詞在文檔中的權重,一般可由TF-IDF生成。
聰明的讀者看到這里應該已經反應過來了,這不就是《機器學習(十四)》中提到的協同過濾的商品打分矩陣嗎?
沒錯!LSA的實現方法的確與之類似。多數的blog講解LSA算法原理時,由于單詞-文檔矩陣較小,直接采用了矩陣的SVD分解,少數給出了EM算法實現,實際上就是ALS或其變種。
參考:
http://www.cnblogs.com/kemaswill/archive/2013/04/17/3022100.html
Latent Semantic Analysis(LSA/LSI)算法簡介
http://blog.csdn.net/u013802188/article/details/40903471
隱含語義索引(Latent Semantic Indexing)
http://www.shareditor.com/blogshow/?blogId=90
比TF-IDF更好的隱含語義索引模型是個什么鬼
HMM
和HMM(Hidden Markov Model,隱馬爾可夫模型)模型相關的算法主要分為三類,分別解決三種問題:
1)知道骰子有幾種(隱含狀態數量),每種骰子是什么(轉換概率),根據擲骰子擲出的結果(可見狀態鏈),我想知道每次擲出來的都是哪種骰子(隱含狀態鏈)。
這個問題呢,在語音識別領域呢,叫做解碼問題。這個問題其實有兩種解法,會給出兩個不同的答案。每個答案都對,只不過這些答案的意義不一樣。第一種解法求最大似然狀態路徑,說通俗點呢,就是我求一串骰子序列,這串骰子序列產生觀測結果的概率最大。第二種解法呢,就不是求一組骰子序列了,而是求每次擲出的骰子分別是某種骰子的概率。比如說我看到結果后,我可以求得第一次擲骰子是D4的概率是0.5,D6的概率是0.3,D8的概率是0.2。
2)還是知道骰子有幾種(隱含狀態數量),每種骰子是什么(轉換概率),根據擲骰子擲出的結果(可見狀態鏈),我想知道擲出這個結果的概率。
看似這個問題意義不大,因為你擲出來的結果很多時候都對應了一個比較大的概率。問這個問題的目的呢,其實是檢測觀察到的結果和已知的模型是否吻合。如果很多次結果都對應了比較小的概率,那么就說明我們已知的模型很有可能是錯的,有人偷偷把我們的骰子給換了。問題2的更一般的用法是:從若干種模型中選擇一個概率最大的模型。
3)知道骰子有幾種(隱含狀態數量),不知道每種骰子是什么(轉換概率),觀測到很多次擲骰子的結果(可見狀態鏈),我想反推出每種骰子是什么(轉換概率)。
這個問題很重要,因為這是最常見的情況。很多時候我們只有可見結果,不知道HMM模型里的參數,我們需要從可見結果估計出這些參數,這是建模的一個必要步驟。
參考:
https://www.zhihu.com/question/20962240
如何用簡單易懂的例子解釋隱馬爾可夫模型?
http://www.cnblogs.com/kaituorensheng/archive/2012/11/29/2795499.html
隱馬爾可夫模型
Viterbi算法
Viterbi算法是求解最大似然狀態路徑的常用算法,被廣泛應用于通信(CDMA技術的理論基礎之一)和NLP領域。
注:Andrew James Viterbi,1935年生,意大利裔美國工程師、企業家,高通公司聯合創始人。MIT本碩+南加州大學博士。viterbi算法和CDMA標準的主要發明人。
上圖是一個HMM模型的概率圖表示,其中{‘Healthy’,’Fever’}是隱含狀態,而{‘normal’,’cold’,’dizzy’}是可見狀態,邊是各狀態的轉移概率。
上圖是Viterbi算法的動畫圖。簡單來說就是,從開始狀態之后的每一步,都選擇最大似然狀態的路徑。由于每一步都是最優方案,因此整個路徑也是最優路徑。
前向算法
forward算法是求解問題2的常用算法。
仍以上面的擲骰子為例,要算用正常的三個骰子擲出這個結果的概率,其實就是將所有可能情況的概率進行加和計算。同樣,簡單而暴力的方法就是把窮舉所有的骰子序列,還是計算每個骰子序列對應的概率,但是這回,我們不挑最大值了,而是把所有算出來的概率相加,得到的總概率就是我們要求的結果。
窮舉法的計算量太大,不適用于計算較長的馬爾可夫鏈。但是我們可以觀察一下窮舉法的計算步驟。
上圖是某骰子序列的窮舉計算過程,可以看出第3步計算的概率和公式的某些項,實際上在之前的步驟中已經計算出來了,前向遞推的計算量并沒有想象中的大。
Baum–Welch算法
Baum–Welch算法是求解問題3的常用算法。
HMM在NLP領域的應用
具體到分詞系統,可以將“標簽”當作隱含狀態,“字或詞”當作可見狀態。那么,幾個NLP的問題就可以轉化為:
詞性標注:給定一個詞的序列(也就是句子),找出最可能的詞性序列(標簽是詞性)。如ansj分詞和ICTCLAS分詞等。
分詞:給定一個字的序列,找出最可能的標簽序列(斷句符號:[詞尾]或[非詞尾]構成的序列)。結巴分詞目前就是利用BMES標簽來分詞的,B(開頭),M(中間),E(結尾),S(獨立成詞)
命名實體識別:給定一個詞的序列,找出最可能的標簽序列(內外符號:[內]表示詞屬于命名實體,[外]表示不屬于)。如ICTCLAS實現的人名識別、翻譯人名識別、地名識別都是用同一個Tagger實現的。
AutoML
盡管現在已經有許多成熟的ML算法,然而大多數ML任務仍依賴于專業人員的手工編程實現。
然而但凡做過若干同類項目的人都明白,在算法選擇和參數調優的過程中,有大量的套路可以遵循。
比如有人就總結出參加kaggle比賽的套路:
http://www.jianshu.com/p/63ef4b87e197
一個框架解決幾乎所有機器學習問題
https://mlwave.com/kaggle-ensembling-guide/
Kaggle Ensembling Guide
既然是套路,那么就有將之自動化的可能,比如下面網頁中,就有好幾個AutoML的框架:
https://mp.weixin.qq.com/s/QIR_l8OqvCQzXXXVY2WA1w
十大你不可忽視的機器學習項目
總結
以上是生活随笔為你收集整理的机器学习(二十)——EMD, LSA, HMM的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数学狂想曲(五)——概率分布(2), 自
- 下一篇: 机器学习(二十一)——Optimizer