【面試複習系列】常用機器學習算法知識點及其解析,面試官會考的幾乎都有,歡迎補充

圖片慢慢上傳,看不到圖片的請點這裏:
LR:logistic regression  對數機率迴歸/邏輯迴歸
sigmoid函數的作用就是用於把輸出歸一到1和0,也就是把自變量的線性組合進行歸一化,映射後的值被認爲是屬於y=1的概率。
所以對於一個普通的高斯樣本需要證明sigmoid複合其概率密度規律。

  • 引入sigmoid函數以刻畫y屬於某個類的概率
一開始先引入一個對於某一個y,x符合正態分佈的性質:
因此P(y|x)符合正態分佈:
所以求:
 的話,由貝葉斯:
 得到:
 然後,由於P(x|y)是高斯的,則上式等於:

如果 σ1=σ0σ1=σ0,二次項會抵消,我們得到一個簡單的線性關係:

由上式進一步可以得到:

 就獲得sigmoid函數:

  • 求二分類通用的log-loss函數(只要帶入任意y=g(x)函數就可以求出對應log-loss函數)
然後,對於二分類問題,假設y=g(x),有:
  1. P(y=1|x)=g(x)
  2. P(y=0|x)=1-g(x)
其最大似然函數:
    3.
 
【因爲y要麼就是0要麼就是1,所以這樣的寫法是1和2兩條式子的簡寫,所以稱爲二分類通用】

然後就對3求log,獲得:
 於是求-l(θ)的最小值就可以求得L(θ)的最大值。
也就是說,-l(θ)+正則項就是loss
然後,可以把g(x)=logistic函數帶進去求解,求最小值

  • 優化求最小值
求最小值的方法:牛頓法
牛頓法指出,求使f(θ)=0的θ,只需要一開始先固定一個θ,比如說θ=0,然後輸入其他值使得
θ(t+1)θt-Δθt
其中一維的情況,Δθ=f '(θt)/f(θt)(多維的情況,Δθ 前面要乘以個hassin矩陣的逆)
所以現在要求使得-l(θ)=0的θ,也就是讓loss等於0 ,那麼就令 f(θ)= -l(θ),帶入公式進行求解即可
牛頓法是二階收斂,而梯度下降則爲一階收斂,所以牛頓法更快。
簡單來說,梯度下降是從所處位置選擇一個坡度最大的方向走一步,而牛頓法則在選擇方向時,不僅考慮坡度,還會考慮坡度的坡度,也就是下一步的坡度是否會變得更大。
幾何上來說,牛頓法是用一個二次曲面去擬合當前所處位置的局部曲面,而梯度下降法是用一個平面去擬合當前的局部曲面
其侷限主要在於
1.矩陣的逆計算複雜度爲n的立方,當規模很大時,計算量超大,通常改良做法是採用擬牛頓法如BFGS,L-BFGS等
2.如果初始值離局部極小值太遠,Taylor展開並不能對原函數進行良好的近似

  • 其他優化方法
    • BFGS
    • L-BFGS
    • 優缺點:無需選擇學習率α,更快,但是更復雜

  • 特徵空間非線性的情況
通過特徵組合進行升維。
 左圖是一個線性可分的數據集,右圖在原始空間中線性不可分,但是在特徵轉換
 
後的空間是線性可分的,對應的原始空間中分類邊界爲一條類橢圓曲線。
 

  • 正則化
可以引入權重的n階模進行正則化,防止過擬合,並加入先驗知識,去除野點和噪聲:
實際應用時,由於我們數據的維度可能非常高,L1正則化因爲能產生稀疏解,使用的更爲廣泛一些。
L2用於過擬合
  • 多分類softmax【類別互斥的時候使用】
如果是多分類就不能用sigmoid函數,要用Softmax。
Softmax 迴歸是直接對邏輯迴歸在多分類的推廣,相應的模型也可以叫做多元邏輯迴歸(Multinomial Logistic Regression)。
模型通過 softmax 函數來對概率建模,具體形式如下:
                    
 
 不互斥的時候,應該用k個LR

代碼:
output = sigmoid(train_x * weights)  
error = train_y - output  
weights = weights + alpha * train_x.transpose() * error  


  • 優缺點:
Logistic迴歸優點:

  1. 實現簡單;
  2. 分類時計算量非常小,速度很快,存儲資源低;

缺點:

  1. 容易欠擬合,一般準確度不太高
  2. 只能處理兩分類問題(在此基礎上衍生出來的softmax可以用於多分類),且必須線性可分;

LWLR線性迴歸:linear regression   就是最小二乘法                        

  線性迴歸纔是真正用於迴歸的,而不像logistic迴歸是用於分類,其基本思想是用梯度下降法對最小二乘法形式的誤差函數J進行最小化:

【前面的1/2只是爲了求導的時候更簡單而加上的】

當然也可以由已經推導出的公式直接求得參數的解,對於多變量數據集X,如果XTX是滿秩的,結果爲:

    

多數情況XTX並不是滿秩的正定矩陣,所以會有多個可行解,所以一般會在J中引入正則項以進一步選擇輸出的模型(L1=稀疏的(特徵大於樣本常用),L2=防止過擬合的)。

而其優化算法爲:

   

  由此可見LWLR與LR不同,LWLR是一個非參數模型,因爲每次進行迴歸計算都要遍歷訓練樣本至少一次。

  線性迴歸優點:

  實現簡單,計算簡單;

  缺點:

  不能擬合非線性數據;


SVM:

  • 找到分割兩個樣本“正中間”的超平面,幾何間隔與樣本的誤分次數間存在關係:其中的分母就是樣本到分類間隔距離,分子中的R是所有樣本中的最長向量值
  • C表現離羣點的重要性(可以理解爲權重),越大離羣點越重要
  • gamma是你選擇徑向基函數作爲kernel後,該函數自帶的一個參數。隱含地決定了數據映射到新的特徵空間後的分佈
原理:
求一個斜率,使得其到兩個類別的最近的樣本點(支持向量)的距離相同
這種距離應該用幾何距離:
 有:
 其中||w||爲w的L2範數(範數是一個類似於模的表示長度的概念),
 
是單位向量(一個向量除以它的模稱之爲單位向量),所以幾何間隔不會因爲參數比例的改變而改變 。
所以距離就等於:
 並令這個距離=1(因爲線性,所以w和b成比例縮放,定爲1方便計算)
就可以求出最優平面,把支持向量帶進去令就可以求出b 
 
 證明:
1.求幾何距離的最小值,考慮之前得到的目標函數:

2.升次
由於求的最大值相當於求的最小值:
所以上述目標函數等價於(w由分母變成分子,從而也有原來的max問題變爲min問題,很明顯,兩者問題等價):

    因爲現在的目標函數是二次的,約束條件是線性的,所以它是一個凸二次規劃問題。在一定的約束條件下可解。

    此外,由於這個問題的特殊結構,還可以通過求解與原問題等價的對偶問題得到原始問題的最優解 

【通過拉格朗日對偶性變換到對偶變量的優化問題 

這就是線性可分條件下支持向量機的對偶算法

【這樣做的優點在於:一者對偶問題往往更容易求解;二者可以自然的引入核函數,進而推廣到非線性分類問題。 

3.採用拉格朗日對偶性轉移到對偶問題

通過給每一個約束條件加上一個拉格朗日乘子,定義拉格朗日函數(即通過拉格朗日函數將約束條件融合到目標函數裏去,從而我們的問題變成

    然後令

   【 容易驗證,當某個約束條件不滿足時,例如
,那麼顯然有只要令即可)。而當所有約束條件都滿足時,則最優值爲亦即最初要最小化的量。】

因此,在要求約束條件得到滿足的情況下最小化實際上等價於直接最小化(當然,這裏也有約束條件,就是≥0,i=1,…,n),因爲如果約束條件沒有得到滿足

會等於無窮大,自然不會是我們所要求的最小值。
    具體寫出來,目標函數變成了:

 


 4.轉移到對偶問題

如果直接求解,那麼一上來便得面對w和b兩個參數,而又是不等式約束,這個求解過程不好做。不妨把最小和最大的位置交換一下,變成:

 這交換以後的新問題是原始問題的對偶問題,這個新問題的最優值用d*來表示。而且有d*≤p*,在滿足某些條件的情況下,這兩者相等,這個時候就可以通過求解對偶問題來間接地求解原始問題。

    換言之,之所以從minmax的原始問題p*,轉化爲maxmin的對偶問題d*,一者因爲d*是p*的近似解,二者,轉化爲對偶問題後,更容易求解。

    下面可以先求wb的極小,再求L對α的極大。


5.d*≤p*的條件——KKT條件(使得非線性規劃有最優解的必要條件)

對於一個一般的非線性規劃問題,其中,f(x)是需要最小化的函數,h(x)是等式約束,g(x)是不等式約束,p和q分別爲等式約束和不等式約束

 然後,有凸優化的概念,凸優化就是找到凸集裏的一個點x,使得凸函數  
即是“最大點”“最凸點”
 KKT條件就是:
 所以因爲原始問題滿足KKT條件,已經轉化成了對偶問題。而求解這個對偶學習問題,分爲3個步驟:首先要讓L(w,b,a) 關於 w 和 b 最小化,然後求對α的極大,最後利用SMO算法求解對偶問題中的拉格朗日乘子。

6.此對偶問題的求解
首先固定α,讓L關於w和b最小化,就是對w和b的偏導數都等於0:
 然帶入得:
然後用SMO算法求對α的極大:
 就可以求出α,然後根據這個求出w和b,終得出分離超平面和分類決策函數
 7.線性分類函數
對於一個數據點 x 進行分類,實際上是通過把 x 帶入到算出結果然後根據其正負號來進行類別劃分的。而前面的推導中我們得到:
 因此分類函數爲:
 
 
這裏的形式的有趣之處在於,對於新點 x的預測,只需要計算它與訓練數據點的內積即可,因爲:
中,非支持向量的紅色部分的大於0的,而α又是非負的,所以α等於0
而事實上,只有支持向量的α≠0,也就是說只要跟支持向量做內積就可以

8.線性不可分的情況——進行高維映射
        事實上,大部分時候數據並不是線性可分的,這個時候滿足這樣條件的超平面就根本不存在。在上文中,我們已經瞭解到了SVM處理線性可分的情況,那對於非線性的數據SVM咋處理呢?
 
一個理想的分界應該是一個“圓圈”而不是一條線(超平面)。如果用 
來表示這個二維平面的兩個座標的話,我們知道一條二次曲線(圓圈是二次曲線的一種特殊情況)的方程可以寫作這樣的形式: 
 如果我們構造另外一個五維的空間,其中五個座標的值分別爲
 那麼顯然,上面的方程在新的座標系下可以寫作:
 於是產生線性方程
也就是說,如果我們做一個映射就能把樣本映射到新的線性可分的空間中。

9.通過核函數在低維空間處理高維維度的內積 
但是這樣就會有維度爆炸的問題。而且如果遇到無窮維的情況,就根本無從計算了。所以就需要 Kernel 出馬了。

將數據非線性映射到特徵空間,就是採用
 
 其中,ϕ:X->F是從輸入空間到某個特徵空間的映射
這意味着建立非線性學習器分爲兩步:
  1. 首先使用一個非線性映射將數據變換到一個特徵空間F,
  2. 然後在特徵空間使用線性學習器分類。

而決策規則就是用測試點和訓練點的內積來表示:
 計算φ(xi · φ(x)的時候,就可以採用核函數,核函數是:
 也就是輸入兩個高維向量,能直接輸出內積,但是,其中φ是從X到內積特徵空間F的映射,也就是說核函數只是接受了低維空間的x和z,還有映射關係φ,就能算出內積。
一般來說,內積爲:
 又注意到:
二者有很多相似的地方,實際上,我們只要把某幾個維度線性縮放一下,然後再加上一個常數維度,具體來說,上面這個式子的計算結果實際上和映射
 
 之後的內積是相等的,但是第3個式子只需要在低維空間中計算,雖然不能獲得映射後的結果,但是能求出相等的內積。
這就是核函數,例如,在剛纔的例子中,我們的核函數爲:
因此,我們的分類函數爲:
 其中α:
 就很容易解決了(爲什麼要用高維映射的時候都是核函數,只需要內積結果就可以呢?可以認爲是一個巧合)。

10.幾種核函數
線性核
特徵遠大於樣本就用線性核,速度最快,特徵樣本都很大也用這個
這實際上就是原始空間中的內積。其實就相當於沒用核函數。
但是隻是講到線性核的時候,就可以作爲一個參數使用,於此,便在形式上統一了起來,不用再分別寫一個線性的,和一個非線性的)

多項式核
適合處理維度爆炸問題,需要的參數比較多
 高斯核/RBF核/徑向基核
這個核就是最開始提到過的會將原始空間映射爲無窮維空間的那個傢伙。
不過,如果σ選得很大的話,高次特徵上的權重實際上衰減得非常快,所以實際上(數值上近似)相當於一個低維的子空間;反過來,如果σ選得很小,則可以將任意的數據映射爲線性可分——當然,這並不一定是好事,因爲隨之而來的可能是非常嚴重的過擬合問題。
不過,總的來說,通過調控參數σ,高斯覈實際上具有相當高的靈活性,也是使用最廣泛的核函數之一。可以擬合線性核

Sigmoid核函數

K(x,xi)=tanh(κ(x,xi)δ)

採用Sigmoid函數作爲核函數時,支持向量機實現的就是一種多層感知器神經網絡,應用SVM方法,隱含層節點數目(它確定神經網絡的結構)、隱含層節點對輸入節點的權值都是在設計(訓練)的過程中自動確定的。而且支持向量機的理論基礎決定了它最終求得的是全局最優值而不是局部最小值,也保證了它對於未知樣本的良好泛化能力而不會出現過學習現象。

傅立葉核
處理信號問題

11.鬆弛變量處理 outliers
 在我們原來的 SVM 模型裏,outlier 的存在有可能造成很大的影響,因爲超平面本身就是隻有少數幾個 support vector 組成的,如果這些 support vector 裏又存在 outlier 的話,其影響就很大了。
 黑圈圈起來的那個藍點是一個 outlier,因爲有他的存在,分割超平面被擠壓了,變成虛線的那樣。
更嚴重的情況是,如果這個 outlier 再往右上移動一些距離的話,我們將無法構造出能將數據分開的超平面來。
原來的約束條件爲:
(1表示原來約束分界面到支持向量的距離爲1,但是現在約束變小一點,對於某些i,可以小於1,這些i稱爲鬆弛變量)
 變成了:
其中紅色的稱爲鬆弛變量 (slack variable)  ,爲了防止鬆弛變量太大,就控制這些鬆弛變量的總和最小,以便一起優化。
 
 其中C是一個事先確定好的常量,用於控制目標函數中兩項(“尋找 margin 最大的超平面”和“保證數據點偏差量最小”)之間的權重。
算法跟前面一樣,得到相同的目標函數,但是其約束不同,阿爾法必須小於C
所以C越大後面的稀疏項帶來的影響就越明顯,C代表的是在線性不可分的情況下,對分類錯誤的懲罰程度。C值越大,分類器就越不願意允許分類錯誤(“離羣點”)。如果C值太大,分類器就會竭盡全力地在訓練數據上少犯錯誤,而實際上這是不可能/沒有意義的,於是就造成過擬合。而C值過小時,分類器就會過於“不在乎”分類錯誤,於是分類性能就會較差。

因此,在有鬆弛的情況下outline點也屬於支持向量SV,同時,對於不同的支持向量,拉格朗日參數的值也不同
 
對於遠離分類平面的點值爲0;對於邊緣上的點值在[0, 1/L]之間,其中,L爲訓練數據集個數,即數據集大小;對於outline數據和內部的數據值爲1/L
12.損失函數
上面的outliners的公式中,如何衡量outlinear帶來的損失,有幾種損失函數:
0-1損失:非凸不好求解
hinge損失:
採用這個損失可以保證稀疏性,纔會變成上文所說的形式:

指數損失:
logistic損失:
採用這個幾乎就變成了logistic regression,但是對率不能直接轉換到支持向量,所以需要更多的樣本 

13.快速求解SVM的算法——SMO

它選擇凸二次規劃的兩個變量,其他的變量保持不變,然後根據這兩個變量構建一個二次規劃問題,這個二次規劃關於這兩個變量解會更加的接近原始二次規劃的解,通過這樣的子問題劃分可以大大增加整個算法的計算速度,關於這兩個變量:

  1. 其中一個是嚴重違反KKT條件的一個變量
  2. 另一個變量是根據自由約束確定,好像是求剩餘變量的最大化來確定的。

14.多分類問題
  • 直接修改目標函數法
直接在目標函數上進行修改,將多個分類面的參數求解合併到一個最優化問題中,通過求解該優化就可以實現多分類(計算複雜度很高,實現起來較爲困難)
  • One vs Rest
其中某個類爲一類,其餘n-1個類爲另一個類,比如A,B,C,D四個類,第一次A爲一個類,{B,C,D}爲一個類訓練一個分類器,第二次B爲一個類,{A,C,D}爲另一個類,按這方式共需要訓練4個分類器,最後在測試的時候將測試樣本經過這4個分類器f_1(x),f_2(x),f_3(x)f_4(x),取其最大值爲分類器
(這種方式由於是1對M分類,會存在bias,很不實用)
  • One vs One(libsvm實現的方式)
任意兩個類都訓練一個分類器,那麼n個類就需要n*(n-1)/2個svm分類器。
還是以A,B,C,D爲例,那麼需要{A,B},{A,C},{A,D},{B,C},{B,D},{C,D}爲目標共6個分類器,然後在預測的將測試樣本通過這6個分類器之後進行投票選擇最終結果。
(性能好,但是需要n*(n-1)/2個分類器代價太大,不過有好像使用循環圖來進行改進)


15.總結
SVM它本質上即是一個分類方法,用w^T+b定義分類函數,於是求w、b,爲尋最大間隔,引出1/2||w||^2,繼而引入拉格朗日因子,化爲對拉格朗日乘子a的求解(求解過程中會涉及到一系列最優化或凸二次規劃等問題),如此,求w.b與求a等價,而a的求解可以用一種快速學習算法SMO,至於核函數,是爲處理非線性情況,若直接映射到高維計算恐維度爆炸,故在低維計算,等效高維表現


優點:

  可用於線性/非線性分類,也可以用於迴歸;

  低泛化誤差;

  容易解釋;

  計算複雜度較低;

缺點:

  對參數和核函數的選擇比較敏感;


KMeans

半監督聚類算法:
  1. E步(求期望):一開始選k個類中心,更新類中心
  2. M步(求極大):對於每個樣本點,分配到離他最近的類中心 

求類中心的公式:
  • 平均類中心
  • Minkovski
  • 歐氏
  • CityBlock 

初始類簇中心點的選取
  • 最關鍵的就是注意不要選中離羣點
  • 常用技術是:多次運行,每次使用一組不同的隨機初始質心,然後選取具有最小SSE(誤差的平方和)的簇集。 
  • 選擇批次距離儘可能遠的K個點
  • 層次聚類,有效但是適用數據量小
  • Canopy算法進行聚類 
 
優化Kmeans
使用kd樹或者ball tree(這個樹不懂)
將所有的觀測實例構建成一顆kd樹,之前每個聚類中心都是需要和每個觀測點做依次距離計算,現在這些聚類中心根據kd樹只需要計算附近的一個局部區域即可

選擇K值:
逐漸增加K,直到類內間距等衡量簇的指標急劇下降
 

優點:
  • 對處理大數據集,該算法是相對可伸縮的和高效率的,因爲它的複雜度大約是O(nkt),其中n是所有對象的數目,k是簇的數目,t是迭代的次數。通常k<<n。這個算法通常局部收斂。
  • 當簇是密集的且簇與簇之間區別明顯時,聚類效果較好。算法嘗試找出使平方誤差函數值最小的k個劃分。
缺點:
  • k-平均方法只有在簇的平均值被定義的情況下才能使用,且對有些分類屬性的數據不適合。
  • 要求用戶必須事先給出要生成的簇的數目k。
  • 對初值敏感,對於不同的初始值,可能會導致不同的聚類結果。
  • 不適合於發現非凸面形狀的簇,或者大小差別很大的簇。
  • 對於”噪聲”和孤立點數據敏感,少量的該類數據能夠對平均值產生極大影響。

EM

EM用於隱含變量的概率模型的極大似然估計,它一般分爲兩步:

  1. 求根據極大似然函數的參數求出後驗概率的值(E)
  2. 根據後驗概率的值求極大似然的參數(M) 

優化路徑:每次只更改一個參數

如果概率模型的變量都是觀測變量,那麼給定數據之後就可以直接使用極大似然法或者貝葉斯估計模型參數。
但是當模型含有隱含變量的時候就不能簡單的用這些方法來估計,EM就是一種含有隱含變量的概率模型參數的極大似然估計法。

應用到的地方:混合高斯模型、K-means


GMM

每個樣本都有可能由k個高斯產生,只不過由每個高斯產生的概率不同而已,因此每個樣本都有對應的高斯分佈(k箇中的某一個),此時的隱含變量就是每個樣本對應的某個高斯分佈。

  • E步公式:

對i個樣本,選擇第j個高斯求最大似然
就會獲得第i個樣本屬於這第j個高斯的概率,就可以獲得屬於每一個高斯的概率,也就是說,對每個樣本,進行了一次最大似然分佈計算
把樣本歸類到概率最大的高斯那裏

   

    更具體的計算公式爲:

  

  • M步公式

根據樣本的分佈,計算每個高斯的比重,均值,方差這3個參數

   



Naive Bayes:

關鍵:計算後驗概率
假設每個特徵獨立(Naive)
在樣本集裏統計對各個類進行對應的特徵分佈的統計

樸素貝葉斯的思想基礎:
  1. 對於給出的待分類項,求解在此項出現的條件下各個類別出現的概率。
  2. 哪個最大,就認爲此待分類項屬於哪個類別。

通俗來說,就好比這麼個道理:
  1. 你在街上看到一個黑人(對於黑人這個分類)
  2. 我問你你猜這哥們哪裏來的,你十有八九猜非洲。
        爲什麼呢?因爲黑人中非洲人的比率最高,因爲非洲這個特徵的先驗概率最大,當然人家也可能是美洲人或亞洲人,但在沒有其它可用信息下,我們會選擇條件概率最大的類別,這就是樸素貝葉斯的思想基礎。

原理:
  1. 爲一個樣本集,而每個a爲x的一個特徵屬性。
  2. 有類別集合(即label)
  3. 計算
  4. 如果,則。(對每個類別的樣本,把這些類別歸咎到最常帶有條件概率最大的特徵上)
 
要計算第3步中的條件概率:
  1. 通過貝葉斯公式,把P(y|x)轉化爲P(x|y):,變成在y條件下關於樣本的條件概率的問題
  2. 這個關於樣本的條件概率通過統計可以得到:對於每一個類,計算導致這個類的最頻繁的特徵的次數
  3. 比如,把所有的1類找出來,然後看在這些1類中,最經常帶有的特徵是哪個,然後第二經常帶有的特徵是哪個...

或者換一種表述:

1、找到一個已知分類的待分類項集合,這個集合叫做訓練樣本集。

2、統計得到在各類別下各個特徵屬性的條件概率估計。即。


3、如果各個特徵屬性是條件獨立的,則根據貝葉斯定理有如下推導:

因爲分母對於所有類別爲常數,因爲我們只要將分子最大化皆可。又因爲各特徵屬性是條件獨立的,所以有:

當特徵爲連續值的時候:

把特徵假定爲服從高斯分佈:

  

因此只要計算出訓練樣本中各個類別中此特徵項劃分的各均值和標準差,代入上述公式即可得到需要的估計值。


當出現了概率爲0的情況使得樣本最大似然=0怎麼辦:

Laplace平滑:給分子和分母同時加上一個常數:

可以證明Laplace光滑是滿足凸優化的,於是得到最大似然的近似

平滑因子λ=0即爲最大似然估計,這時會出現在本節開始時提到的0概率問題

λ=1則避免了0概率問題

樸素貝葉斯的優缺點:

對小規模的數據表現很好,適合多分類任務,適合增量式訓練。

缺點:

對輸入數據的表達形式很敏感。


樹模型

分裂節點的選擇
  • ID3算法:
    • 選擇最高信息熵增益的自變量作爲樹枝
    • 信息熵的計算,對於二分類系統:
    • 處理離散值的量,比較全面,對噪聲魯棒,但是隻是對整個系統的衡量,一般用來做全局特徵選擇,容易過擬合
  • C45算法
    • 採用信息熵的增益比例來劃分
    • 處理連續值的量
  • Cart算法:
  • 離散和連續 兩者都合適
  • Gini指標,描述數據的不純度其實就是信息熵在x=1處的一階泰勒展開
  • 選擇不純度變化最大那個

樹剪枝
如何處理因爲噪聲和野點的異常分支
  • C4.5先剪枝,用一個閾值停止樹的構建,但是選擇這個閾值是困難的
  • CART後剪枝,把被剪掉的子樹中最頻繁的類標記作爲樹葉的值


決策樹的優點:

計算量簡單,可解釋性強,比較適合處理有缺失屬性值的樣本,能夠處理不相關的特徵;

缺點:

容易過擬合(後續出現了隨機森林,減小了過擬合現象);


XGBoost:

實際上xgb一切都是圍繞構造loss function來的,一切都是爲了替代GBDT使用的,很難並行化的殘差計算

改進的地方

(也可以說是:如何建立一套不基於上一棵樹的殘差的cost function——通過建立基於複雜度的loss function來實現)

(一部爲了達到分佈式的優點而進行社會主義大改造而且還順便優化了性能的史詩)

  • 二階泰勒展開來近似cost(不是loss)
  • 通過L2和樹模型複雜度衡量項正則化
  • 從cost產生了一個近似的loss function
  • 通過簡單的二項式最優化獲得權值
  • 並根據loss funtion來分裂子葉(而不是信息熵之類的)

解讀——爲什麼具有良好的效果:
  • 最吼的一點:簡化cost function,並實現並行化
  • 從數學的角度,相當於把樹的整個樹模型的參數包含了進去loss funtion裏,而不是傳統中把sigmoid函數跟信息熵兩種不同類別的函數進行分而治之
  • 從優化的角度,可以看成使用了二階特性進行求解

而且通過一系列優化提高速度:
  • 針對cpu和內存的優化
  • 通過MPI等進行分佈式調度(因爲有loss funtion所以纔可以進行這樣分佈式)
  • 實現了基於目標函數的分裂點判別算法。
  • 利用了特徵的稀疏性。
  • 數據事先排序並且以block形式存儲,有利於並行計算


感知機Percepton:

通過正負樣本的不斷懲罰把分界面收斂到最優。
這種算法的基本思想是:
當一個實例點被誤分類,即位於分類超平面錯誤的一側時,則調整w和b,使分類超平面向該誤分類點的一側移動,以減少該誤分類點與超平面的距離,直到超平面越過該誤分類點使其被正確分類爲止。
需要注意的是,這種感知機學習算法得到的模型參數不是唯一的。
爲了得到唯一的分類超平面,需要對分類超平面增加約束條件,線性支持向量機就是這個想法。

原理:
1.對一個隨機的線性分界面,用其與樣本間的函數距離求解其loss,其距離爲
2.就通過確定感知機模型中的參數w和b,需要定義一個損失函數並通過將損失函數最小化來求w和b
3.將誤分類點的距離相加,並直接省略獲得損失函數:
 
爲什麼可以直接省略? 
(1).因爲感知機模型是以誤分類點爲驅動的,最後損失函數的值必然爲零,即無誤分類點。既然函數距離能判斷樣本點的分類正確性,我們何必用幾何距離呢?實際上我們並不關心lost function具體數值的變化,我們只在乎還有沒有誤分類點。 
(2).去掉,我們得到的lost function是關於w,b的連續可導線性函數,可以用梯度下降法輕鬆地進行優化。

求解方法:
可通過隨機梯度下降方法求解
對L求w和b的偏導,然後對誤分類點帶入求解w和b的梯度,並乘以學習率後更新w和b

當然,也可以通過拉格朗日對偶並通過核技巧求解

跟SVM的區別:

SVM就像是原始的感知機的孫子(不是兒子)

我認爲實際上區別在於:

衡量分界面的時候原始的感知機用L1範數(函數距離),SVM用L2範數(幾何距離)

由L2範數對分界面的限制帶了穩定的分界面,帶來的拉格朗日對偶性,核方法,非線性分界面的處理,各種防止過擬合的性能,甚至支持向量的概念都是從這個改動而來的。


L1範數(函數距離)


L2範數(幾何距離



BP神經網絡:

誤差從後面開始傳播,每一層的Loss定義爲向量的方差:
 對這個方差求偏導,進而更新權值:
 一開始讓W,b=0【實際上會給一個初始分佈】
然後對各層進行更新
可能會梯度消失,因爲sigmoid的導數在0時最高=1/4 ,如果把爲了求前面的權值而把梯度(也就是導數)進行累乘,每一層的權值一定會比前面一層減小1/4
解決:
  • ReLU,不用乘法,在0保持很高,稀疏性
  • Xavier 
       爲了讓輸出值在很多層之後依然保持着良好的分佈,需要保證前向傳播和反向傳播時每一層的方差一致,應滿足:
 
 
      所以
        He initialization
        0.5爲dropout的時候,方差爲1/2,所以在Xavier上除以2
 

  • batch normalization 讓每一層網絡的輸入保持相同的分佈
        BN給數據帶來零均值(加快收斂)和數據去相關(提高數據區分度)
        其方法就是進行0均值和加入單位方差
       爲了避免在sigmoid函數中0均值單位方差把sigmoid兩邊的摧毀的問題,增加參數gamma,beta
 這樣就可以恢復原來的特徵
每一步進去的時候用Batch的E和Var作爲總體的估計,並進行計算,啓發我們大Batch可以帶來更精確的BatchNorm跟更好的全局最優解
整個算法就是對mini-batch求均值和方差並進行scale
         上訴兩個參數對於x的每一維都具有相應的參數,故假設X.shape = [N,D],那麼gamma.shape = [D,]
    

  • Dropout
       dropout在每一個batch的數據上使用不同的網絡,相當於生成了一堆不同的分類器,預測的時候把dropout設爲1並進行inferrance,表示把這些不同的分類器esemable起來,因此Dropout的最大作用就是訓練子分類器並進行組合預測,降低過擬合和訓練成本。
       dropout等價於在原始樣本中加入部分置0的樣本並加以學習,即加入了使dropout層變成0的樣本,也就是說,增加了樣本的數據稀疏性,同時又增加了樣本量。在非線性空間中,數據量少的情況下,用帶稀疏性的低維度樣本的集合進行訓練能達到好的效果,等同於在不同的降維空間中單獨學習並訓練整體的分類器,類似於樹模型。啓發我們在數據不充分的情況下,隨機把部分數據置零進行訓練也可以達到好的效果

  • 不用均方誤差MSE而用交叉熵其中y爲期望的輸出,a爲神經元實際輸出
    因其導數只跟誤差的一次方有關,不跟其導數有關
  • 用更換誤差函數的方法,使得求導的目標改變,不再以誤差的導數而是以誤差本身進行Loss的BP傳遞
  • 一般用softmax做最後一層而用log-likelihood作爲誤差函數,log誤差就是交叉熵的二類別分類情況
  • Batch:    
    大batch size在顯存能允許的情況下收斂速度是比較快的但有時的確會有陷入局部最小的情況,達到相同精度需要更多epoch
    小batch size引入的隨機性會更大些(超大的batch中梯度抵消),有時候能有更好的效果,但是就是收斂速度慢一些甚至不收斂
    一般要求是8的倍數
    
  •  


KNN算法的優點:

1、思想簡單,理論成熟,既可以用來做分類也可以用來做迴歸;

2、可用於非線性分類;

3、訓練時間複雜度爲O(n)

4、準確度高,對數據沒有假設,對outlier不敏感;

缺點:

1、計算量大;

2、樣本不平衡問題(即有些類別的樣本數量很多,而其它樣本的數量很少);

3、需要大量的內存;

Adaboost

1、訓練第一個分類器,樣本的權值D爲相同的均值。通過一個弱分類器,得到這5個樣本(請對應書中的例子來看,依舊是machine learning in action)的分類預測標籤。與給出的樣本真實標籤對比,就可能出現誤差(即錯誤)。如果某個樣本預測錯誤,則它對應的錯誤值爲該樣本的權重,如果分類正確,則錯誤值爲0. 最後累加5個樣本的錯誤率之和,記爲ε

4、循環步驟1,2,3來繼續訓練多個分類器,只是其D值不同而已。

測試過程如下:

輸入一個樣本到訓練好的每個弱分類中,則每個弱分類都對應一個輸出標籤,然後該標籤乘以對應的α,最後求和得到值的符號即爲預測標籤值。

Boosting算法的優點:

低泛化誤差;

容易實現,分類準確率較高,沒有太多參數可以調;

缺點:

outlier比較敏感;

FM(因式分解機)和FFM(領域感知因式分解機)

FM:
基於矩陣分解,把稀疏的特徵進行性能合理的二階組合的機器
通過把二階組合矩陣分解成兩個隱向量矩陣實現(一個權值矩陣分解成兩個權值矩陣)
其二階特徵矩陣W分解成:
 因此
 其中,vi是第 i維特徵的隱向量,通過隱向量的點積表示特徵因子的W
與線性模型相比,FM(Factorization Machine)的模型就多了後面特徵組合的部分
輔助向量的維度k值的限定,反映了FM模型的表達能力

FFM:
引入特徵類別標籤,在進行性能合理的二階組合時,對每個隱向量,先求取其與類別標籤矩陣的內積
該類別標籤通過引入一列表示類別類型的特徵實現

注意:
省略0值
歸一化到【0,1】
FM: O(kn)  FFM: O(kn2)

意義:
減少了對兩項都有的樣本的依賴
線性時間複雜度
適用於稀疏值
減少了人工特徵測試的工作量

FTRL:

一個SGD這樣的在線訓練算法的魔改版,可以產生稀疏解(降低模型體積)並保持很好的精度【並因爲每個維度單獨更哦學習率,能很好地利用每個樣本】
業內常用LR(Logistic Regression)和FM(Factorization Machines)爲點擊率預估建模。對LR、FM這類模型的參數學習,傳統的學習算法是batch learning算法,它無法有效地處理大規模的數據集,也無法有效地處理大規模的在線數據流。這時,有效且高效的online learning算法顯得尤爲重要。
Clipboard Image.png
FTRL是對w每一維分開訓練更新的,每一維使用的是不同的學習速率,也是上面代碼中lamda2之前的那一項。與w所有特徵維度使用統一的學習速率相比,這種方法考慮了訓練樣本本身在不同特徵上分佈的不均勻性,如果包含w某一個維度特徵的訓練樣本很少,每一個樣本都很珍貴,那麼該特徵維度對應的訓練速率可以獨自保持比較大的值,每來一個包含該特徵的樣本,就可以在該樣本的梯度上前進一大步,而不需要與其他特徵維度的前進步調強行保持一致。

UBM

通用背景模型

因爲每個說話人的數據不足無法覆蓋所有的GMM分量,所以採用把所有的訓練一個GMM稱爲UBM,並用每個說話人的特徵向量作爲單個人的模型,覆蓋不到的維度用UBM填補,這樣通過比較測試語音的特徵向量和個人模型,UBM,就可以比較出個人向量和信道向量的乘積,用LDA降維後可得跟個人向量的相似度。
至於特徵向量經過一個發展過程,一開始是高斯的均值,後來是對這個高斯均值進行因子分解SVD:
Gauss=Person*Channel*Loss
然後就出現了把Channel*Loss作爲一個I-vector的方法,用I-vector表徵每個個人
對於信道特徵,注意到UBM模型的I-vector跟個人都有此特徵,所以用LDA等降維方法進行消去

至此,對每個模型和UBM計算cosine距離,即可得最後得分

Active-SVM

在Version space裏
所有函數必須升維到線性可分狀態,否則影響【怎麼升維?】

Duality
對偶性
通過對偶性定義可以把空間轉換到樣本作爲線的空間【version space】,由此距離分界面的距離就變成距離黑色點的距離
 所以未標籤樣本是這樣的:
 

 我們想要比較能保持樣本的距離的【半徑比較大】,所以黑線如果是三角,那麼圓圈在A,要麼樣本在B
複雜的情況中:
會選擇最靠近核心的樣本:B
 標記B後:
 即選擇最接近現有分界面的樣本:

另一種方法:Ratio Margin
對每一個樣本,判爲+1和-1並進行線性組合,從而發現哪一個組合能取得最大的分界面和樣本的距離
【在特徵空間就是把所有迷糊樣本進行正負例判定,選擇能讓特徵距離最大的集,並把最近的扔出來要求打標】
【在version空間上就是在所有的空白區域畫一個圓,並選擇具有最大的圓半徑的那個】
大多數會採用這種方法,實際上也可以看出如果繼續對A圓分割會變成很小的空間
 
查看一下那個github裏面的分解是什麼樣的
幾種優化:
保護負樣本的加權ratio margin
基於因子分解的加速
對偶空間裏也可以做優化
過濾:

  羣體/個體 計算代價 適用場景 冷啓動 可解釋性 實時性
user-based 更依賴於當前用戶相近的用戶羣體的社會化行爲 適用於用戶數較少的場合 時效性強,用戶個性化興趣不太顯著的場合 新加入的物品能很快進入推薦列表 用戶新的行爲不一定導致推薦結果的變化
item-based 更側重用戶自身的個體行爲 適用於物品數較少的場合 長尾物品豐富,用戶個性化需求強烈的場合 新加入的用戶能很快得到推薦 用戶新的行爲一定導致推薦結果的變化

技巧:
  • 清除作弊、刷單、代購等噪聲數據。這些數據的存在會嚴重影響算法的效果,因此要在第一步的數據清洗中就將這些數據剔除。

  • 合理選取訓練數據。選取的訓練數據的時間窗口不宜過長,當然也不能過短。具體的窗口期數值需要經過多次的實驗來確定。同時可以考慮引入時間衰減,因爲近期的用戶行爲更能反映用戶接下來的行爲動作。

  • 嘗試不同的相似度計算方法。在實踐中,我們採用了一種稱作loglikelihood

  • location-based,query(搜索請求)-based,graph-based,實時用戶行爲


 

優化器的選擇:

梯度下降
 用整個數據集的梯度方向更新

SGD
1
一次只用一個樣本點,對於每個樣本求它的梯度,然後乘以α來更新θ
缺點是對於損失方程有比較嚴重的振盪,並且容易收斂到局部最小值

{

對數據集中每個樣本

計算該樣本的梯度

使用alpha xgradient來更新迴歸係數

 }

可以隨機選擇樣本降低波動 

Momentum

爲了克服SGD振盪比較嚴重的問題,Momentum將物理中的動量概念引入到SGD當中,通過積累之前的動量來替代梯度。即:

1
1

相較於SGD,Momentum就相當於在從山坡上不停的向下走,當沒有阻力的話,它的動量會越來越大,但是如果遇到了阻力,速度就會變小。也就是說,在訓練的時候,在梯度方向不變的維度上,訓練速度變快,梯度方向有所改變的維度上,更新速度變慢,這樣就可以加快收斂並減小振盪。

Adagrad

相較於SGD,Adagrad相當於對學習率多加了一個約束,即:

1

Adagrad的優點是,在訓練初期,由於gt較小,所以約束項能夠加速訓練。而在後期,隨着gt的變大,會導致分母不斷變大,最終訓練提前結束。

Adam

Adam是一個結合了Momentum與Adagrad的產物,它既考慮到了利用動量項來加速訓練過程,又考慮到對於學習率的約束。利用梯度的一階矩估計和二階矩估計動態調整每個參數的學習率。Adam的優點主要在於經過偏置校正後,每一次迭代學習率都有個確定範圍,使得參數比較平穩。其公式爲:

1

其中:

1

小結

通過實踐證明,Adam結合了Adagrad善於處理稀疏梯度和Momentum善於處理非平穩目標的優點,相較於其他幾種優化器效果更好。同時,我們也注意到很多論文中都會引用SGD,Adagrad作爲優化函數。但相較於其他方法,在實踐中,SGD需要更多的訓練時間以及可能會被困到鞍點的缺點,都制約了它在很多真實數據上的表現。


損失函數的選擇

我們發現Cross Entropy相比於在線性模型中表現比較好的平方差函數有着比較明顯的優勢。

其主要原因是在深度學習通過反向傳遞更新Wb的同時,激活函數Sigmoid的導數在取大部分值時會落入左、右兩個飽和區間,造成參數的更新非常緩慢。具體的推導公式如下:

一般的MSE被定義爲:

1

其中y是我們期望的輸出,a爲神經元的實際輸出a=σ(Wx+b)。由於深度學習反向傳遞的機制,權值W與偏移量b的修正公式被定義爲:

1

因爲Sigmoid函數的性質,導致σ′(z)z取大部分值時會造成飽和現象。

Cross Entropy的公式爲:

1

如果有多個樣本,則整個樣本集的平均交叉熵爲:

1

其中n表示樣本編號,i表示類別編號。 如果用於Logistic分類,則上式可以簡化成:

1

與平方損失函數相比,交叉熵函數有個非常好的特質:

1

可以看到,由於沒有了σ′這一項,這樣一來在更新wb就不會受到飽和性的影響。當誤差大的時候,權重更新就快,當誤差小的時候,權重的更新就慢。



Wide&Deep Learning
解決了兩種性質的協同,通過一個網絡比較兩者之間哪個更好,誰更好誰積分高誰排前面
性質 需要的能力 實現方式 算法 例子
Memorization  從現有的訓練數據item或者特徵的共現或者相關性 共性,局部性 LR 炸雞跟啤酒經常一起使用(是熱門CP)
Generalization 相關性的傳遞 新特徵組合,多樣性 DNN+embedding 吃炸雞的人也會喜歡漢堡(類似)
基本架構理解:
wdl

實際實現的情況:
  • 數據生成:用戶瀏覽的app,如果安裝了1,否則就是0.一些基本的特徵處理,也在這裏做了,比如將app映射到id,將實數特徵離散化到0-1.
  • 模型訓練:詳細的模型如下圖所示。wide部分是包括用戶安裝的app和瀏覽過的app特徵組合,而deep部分 使用了32維的向量來表達各個categorical特徵,之後組合得到了1200維向量,最後使用logistic迴歸。模型使用了5000億樣本,每次新來了一組訓練數據,模型都要被重新訓練,但是都是在上一個模型基礎上訓練(FTRL)。模型上線之前還會和之前的模型做個對比,保證安全
  • 模型服務:模型訓練並且驗證完了之後,就放到model servers上。每次請求來了,都會從數據庫中獲取一堆app並獲取用戶的特徵,之後用模型進行排序。爲了快速響應,使用分佈式的預估。

wdnn_04.png



LSTM:
特長是記憶長期信息【橫向那條C的黑線就是一直傳遞的長程記憶】
  行爲 實現方法 圖例 對長程記憶的影響 例子
忘記門 用從上一次的輸出和本次的記憶的組合控制久遠的記憶中要保留什麼 sigmoid 變換後點乘 忘卻 根據新的主語的性別來替代舊的需要忘記的主語
【選擇主語】
輸入門 決定要輸入哪些新的值 Sigmund變換

tanh進行選擇
添加 丟棄舊代詞的性別信息並添加新的信息
【替代主語】
輸出門 通過現有的狀態選擇長程記憶裏要輸出的東西 Sigmund變換
後繼續tanh變換以進行選擇
瞞報 可能這此輸入是一個新主語,輸出卻要求是一個動詞,因此要根據主語做詞性變化
【根據新的主語輸出相關信息】
GRU:
  • 將忘記門和輸入門合成了一個單一的更新門
  • 同樣還混合了細胞狀態和隱藏狀態
  • 其他一些改動
  • 最終的模型比標準的 LSTM 模型要簡單

Attention機制:

用於encoder-decoder模型【常用於seq2seq任務】
即由固定的中間語義表示C換成了根據當前輸出單詞來調整成加入注意力模型的變化的Ci
 
 每個Ci包含了不同的  源句中單詞的   注意力分配的  概率分佈
這個概率分佈計算出來的效果如下,描繪了生成目標單詞時,每個輸入單詞的權重

其計算的方法:
讓每個encoder的輸出到後面decoder的輸出訓練一個神經網絡,因此現在每個解碼器輸出的詞語yt取決於所有輸入狀態的一個權重組合(通過一個小型神經網絡訓練得到,訓練一個語句轉換間源語句的影響力的權重計算網絡),而不只是最後一個狀態
 

 

主題模型:

SVD:
奇異值分解方法:把一個矩陣用幾個小得多的矩陣表達
奇異值也可以用來做PCA

NMF:
一種矩陣分解,要求輸入矩陣元素非負,目標和 SVD 一樣。

LSA:
應用SVD進行文章的簡化
U:一行表示意思相關的一類詞,其中每個詞的值表示它在這一類中的重要性(即相關性)
E:詞和文章間的相關性
V:文章的類別及其重要性
pLSA:
LSA 的一種概率解釋方法,不用SVD——要求矩陣元素是非負整數。
通過對文章中的主題和詞語的概率成分建模,優化目標是是KL-divergence最小,而不是依賴於最小均方誤差等準則 
通過EM迭代

LDA:主題模型
按照文檔生成的過程,使用貝葉斯估計統計學方法,將文檔用多個主題來表示。
LDA就是pLSA 加上 topics 的 Dirichlet 先驗分佈後得到的 Bayesian model,數學上更漂亮。爲什麼是 Dirichlet 先驗分佈,主要是利用了 Dirichlet 和 multinomial 分佈的共軛性,方便計算
基於EM和 差分貝葉斯方法

TFIDF:

詞頻

(term frequency,TF)指的是某一個給定的詞語在該文件中出現的頻率。這個數字是對詞數(term count)的歸一化,以防止它偏向長的文件。(同一個詞語在長文件裏可能會比短文件有更高的詞數,而不管該詞語重要與否。)對於在某一特定文件裏的詞語 t_{i} 來說,它的重要性可表示爲:

\mathrm{tf_{i,j}} = \frac{n_{i,j}}{\sum_k n_{k,j}}

其中,n_{i,j} 是該詞t_{i} 在文件d_{j}中的出現次數,而分母則是在文件d_{j}中所有字詞的出現次數之和


逆向文件頻率

(inverse document frequency,IDF)是一個詞語普遍重要性的度量。某一特定詞語的IDF,可以由總文件數目除以包含該詞語之文件的數目,再將得到的商取對數得到:

\mathrm{idf_{i}} =  \log \frac{|D|}{|\{j: t_{i} \in d_{j}\}|}

其中

  • |D|:語料庫中的文件總數
  • |\{ j: t_{i} \in d_{j}\}|包含詞語t_{i}的文件數目(即n_{i,j} \neq 0的文件數目)如果該詞語不在語料庫中,就會導致被除數爲零,因此一般情況下使用1 + |\{j : t_{i} \in d_{j}\}|
爲什麼用倒數:如果詞在各個文檔中出現的可能性越少,那麼他就越重要,所以使用這個出現的概率的倒數使其變成遞增的參數
爲什麼用log,因爲如果數字很大,有可能出現大數問題

然後

\mathrm{tf{}idf_{i,j}} = \mathrm{tf_{i,j}} \times  \mathrm{idf_{i}}



含義

關鍵詞只在很少的網頁中出現,我們通過它就容易鎖定搜索目標,它的權重也就應該大。反之如果一個詞在大量網頁中出現,我們看到它仍然不很清楚要找什麼內容,因此它應該小

某一特定文件內的高詞語頻率,以及該詞語在整個文件集合中的低文件頻率,可以產生出高權重的TF-IDF。因此,TF-IDF傾向於過濾掉常見的詞語,保留重要的詞語 

根據每一個詞在指定文本中的分數,可以進行排序,得分最高的詞就成爲文本的主題詞

停用詞的權重應該是0


文本距離:

獲取關鍵詞的TF-IDF權重後,取出top 20個關鍵詞,計算詞頻【詞出現次數/文章長度】,然後計算兩個參數的餘弦距離【點乘/兩個向量長度的積】


時域TF-IDF:

把TF-IDF的時域權重對應起來,處理突發詞並進行過濾

 
決定詞語頻率的應該爲F1共振峯,通過對頻域進行高通濾波的方法處理,減少突發【週期】詞的TF-IDF
沒有時域標籤的問題,通過應用DTW算法進行對齊
採用的時間窗口分別爲2天,7天,15天分別對應【100點,350點,750點】
性能上升了1%
https://wenku.baidu.com/view/ec54b2514028915f814dc204.html

技巧:
短文本可以不用TF-IDF權重而用bool權重

Word2VEC

什麼是word2vec

把詞映射到向量空間也是一種對文本進行編碼的方式,但比onehot更能表現詞之間的關係

可以進行詞向量建模,可以回答
king is to queen as father is to ?
這樣的問題

映射到向量空間有兩種:

  • LSA等統計模型
  • Word2Vec等預測模型


Word2Vec有兩種模式:

  • 適用於小數據集的CBOW
  • 適用於大數據集的skip-gram

預測模型通常用最大似然的方法,根據當前已經有的詞語和接下來的詞語訓練分類器

如何構建數據集:
隨機組合生成大量的樣本,並作爲負樣本,此方法稱爲Negative Sampling
python中的dict查詢複雜度爲O(1)
當採用CBOW模型:
the blown fox jump over the lazy dog.
把連續的詞對(the→blown,blown→the,blown→fox)扔進去訓練,label爲高
同時隨機構造大量隨機詞對(over→fox,fox→the,label爲低

當採用skip-gram模型:
the blown fox jump over the lazy dog.
skip-gram構造目標詞彙[dog]到語境[blown,fox]的映射
因此就會構造出dog->blown,dog->fox等映射

直接把訓練數據等扔進去tf.nn.nce_loss就能計算loss,等同於計算目標是正確跟錯誤的二分類器,目標值越真實,概率越大然後用SGD優化即可
 


一些優化的trick
  • 轉化爲onehot這件事,在gpu中沒有很好的實現,所以用:
with tf.device("/cpu:0"):
    to_one_hot
這樣的把這件事限定在cpu上
  • 因爲分詞的過程一般都會去掉停用詞,所以不用在意the之類的詞語生成大量的數據對

embedding
只要滿足
  • injective(單射函數,X跟Y一一對應)
  • structure-preserving(保形性)
即可算是embedding,詞語做embedding主要是想在不過多增加維度的同時保存詞語間相互的結構
其中,word2vec就是通過訓練DNN模型參數的方法訓練不同詞語(輸入向量)對應的輸出(最相關的詞語)
而模型的權重就保存了詞語的embedding關係

CountVectorizer

就是上面提到的LSA等計數模型的最基礎版本(或者說,最基礎部分),通過計數來將一個文檔轉換爲向量



降維:

SVD也是這裏的:
LDA:線性判別分析 
 損失函數:
目標是,使得類別內的點距離m越近越好(集中),類別間的點s越遠越好
求出的就是這根曲線的斜率wi


PCA
LDA的輸入數據是帶標籤的,而PCA的輸入數據是不帶標籤的,所以PCA是一種unsupervised learning
目標:使得降維後的數據間方差最大/即投影誤差最小
其仍然是給出一個權重,然後讓樣本點投影到上面並求方差最小

特徵值分解法求PCA:
求樣本的協方差矩陣裏最大的M個特徵值的特徵向量,從而降維,使得降維後的數據的協方差最大化【特徵值分解必須是方陣】

ICA
PCA的擴展
目標函數:樣本數據 x 經過參數矩陣 W 線性變換後的結果的L1範數
加入標準正交性約束後,即求這樣的優化問題:
 用梯度下降等方法求解

區別
PCA認爲數據是冗餘的,要提取出不相關的特徵,因此它找到這樣一組分量表示,使得重構誤差最小,即最能代表原事物的特徵。
ICA認爲數據是其中的獨立元素的組合,因此將原始數據降維並提取出相互獨立的向量,使得每個分量最大化獨立,能夠發現一些隱藏因素

SNE
在高維空間相似的數據點,映射到低維空間距離也是相似的。常規的做法是用歐式距離表示這種相似性,而SNE把這種距離關係轉換爲一種條件概率來表示相似性。
隱含高斯分佈假設並建模:
然後把兩個類分佈的距離用KL距離表示
 
用重力聚類表示:【同類引力,異類斥力】
低維空間中點yiyi的位置是由其他所有點對其作用力的合力所決定的。其中某個點yjyj對其作用力是沿着yiyjyi−yj方向的,具體是引力還是斥力佔主導就取決於yjyjyiyi之間的距離了,其實就與(pjiqji+pijqij)(pj∣i−qj∣i+pi∣j−qi∣j)這一項有關。

t-SNE
在SNE基礎上做優化:
1.在上面的分佈假設添加對稱性:
在原始的SNE中,也是不相等的,這是不合理的,因此定義對稱的概率分佈函數如下:
    
2.解決聚類後數據都堆積在一起的擁擠問題
t分佈更適合處理有野點的情況
因此用自由度爲1的t分佈重新定義概率分佈函數
 


HMM
隱馬爾可夫模型(Hidden Markov Model,HMM)是統計模型,它用來描述一個含有隱含未知參數的馬爾可夫過程
主要應用於兩種問題
語音解碼:
    已知概率和可見狀態求隱含狀態:最大似然,Viterbi
【從前面的開始推斷概率並把最大的(昨天天氣的概率*今天朋友做這個事的概率*兩者的轉移概率),因爲前天的可能有很多種,取結果最大的那種作爲今天的概率】
Viterbi算法就是求解HMM狀態轉換圖上的最短路徑(-log(prob),也即是最大概率)
知道幾種隱含狀態,知道可見狀態鏈,求轉換概率
    Baum-Welch 鮑姆-韋爾奇比較複雜 

PageRank
發佈了51 篇原創文章 · 獲贊 65 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章