1. 程式人生 > >機器學習面試

機器學習面試

引入對偶的好處

為什麼要引入對偶演算法
1.對偶問題往往更加容易求解(結合拉格朗日和kkt條件)
2.可以很自然的引用核函式(拉格朗日表達式裡面有內積,而核函式也是通過內積進行對映的)

要注意用拉格朗日對偶並沒有改變最優解,而是改變了演算法複雜度:在原問題下,求解演算法的複雜度與樣本維度(等於權值w的維度)有關;而在對偶問題下,求解演算法的複雜度與樣本數量(等於拉格朗日運算元a的數量)有關。
因此,如果你是做線性分類,且樣本維度低於樣本數量的話,在原問題下求解就好了,Liblinear之類的線性SVM預設都是這樣做的;但如果你是做非線性分類,那就會涉及到升維(比如使用高斯核做核函式,其實是將樣本升到無窮維),升維後的樣本維度往往會遠大於樣本數量,此時顯然在對偶問題下求解會更好。

GBDT分類和迴歸的原理:

這裡寫圖片描述

1、無監督和有監督演算法的區別?

所謂的學習,其本質就是找到特徵和標籤間的關係(mapping)。輸入資料有標籤,則為有監督學習,沒標籤則為無監督學習。
A、訓練集有輸入有輸出是有監督,包括所有的迴歸演算法分類演算法,比如線性迴歸、決策樹、KNN、SVM等;
B、訓練集只有輸入沒有輸出是無監督,包括所有的聚類演算法,比如k-means 、PCA、 GMM等

2、SVM 的推導,特性?多分類怎麼處理?

推導過程參見西瓜書

SVM有如下主要幾個特點:

(1) 非線性對映是SVM方法的理論基礎,SVM利用內積核函式代替向高維空間的非線性對映;
(2) 對特徵空間劃分的最優超平面是SVM的目標,最大化分類邊際的思想是SVM方法的核心;
(3) 支援向量是SVM的訓練結果,在SVM分類決策中起決定作用的是支援向量。
(4) SVM 是一種有堅實理論基礎的新穎的小樣本學習方法。它基本上不涉及概率測度及大數定律等,因此不同於現有的統計方法。從本質上看,它避開了從歸納到演繹的傳統過程,實現了高效的從訓練樣本到預報樣本的“轉導推理”,大大簡化了通常的分類和迴歸等問題。
(5) SVM 的最終決策函式只由少數的支援向量所確定,計算的複雜性取決於支援向量的數目,而不是樣本空間的維數,這在某種意義上避免了“維數災難”。
(6) 少數支援向量決定了最終結果,這不但可以幫助我們抓住關鍵樣本、“剔除”大量冗餘樣本,而且註定了該方法不但演算法簡單,而且具有較好的“魯棒”性。這種“魯棒”性主要體現在:
①增、刪非支援向量樣本對模型沒有影響;
②支援向量樣本集具有一定的魯棒性;
③有些成功的應用中,SVM 方法對核的選取不敏感
(7) SVM學習問題可以表示為凸優化問題,因此可以利用已知的有效演算法發現目標函式的全域性最小值。而其他分類方法(如基於規則的分類器和人工神經網路)都採用一種基於貪心學習的策略來搜尋假設空間,這種方法一般只能獲得區域性最優解。
(8) SVM通過最大化決策邊界的邊緣來控制模型的能力。儘管如此,使用者必須提供其他引數,如使用核函式型別和引入鬆弛變數等。
(9) SVM在小樣本訓練集上能夠得到比其它演算法好很多的結果。支援向量機之所以成為目前最常用,效果最好的分類器之一,在於其優秀的泛化能力,這是是因為其本身的優化目標是結構化風險最小,而不是經驗風險最小,因此,通過margin的概念,得到對資料分佈的結構化描述,因此減低了對資料規模和資料分佈的要求。SVM也並不是在任何場景都比其他演算法好,對於每種應用,最好嘗試多種演算法,然後評估結果。如SVM在郵件分類上,還不如邏輯迴歸、KNN、bayes的效果好。
(10) 它基於結構風險最小化原則,這樣就避免了過學習問題,泛化能力強。
(11) 它是一個凸優化問題,因此區域性最優解一定是全域性最優解的優點。
(12) 泛華錯誤率低,分類速度快,結果易解釋

不足之處:

(1) SVM演算法對大規模訓練樣本難以實施
SVM的空間消耗主要是儲存訓練樣本和核矩陣,由於SVM是藉助二次規劃來求解支援向量,而求解二次規劃將涉及m階矩陣的計算(m為樣本的個數),當m數目很大時該矩陣的儲存和計算將耗費大量的機器記憶體和運算時間。針對以上問題的主要改進有有J.Platt的SMO演算法、T.Joachims的SVM、C.J.C.Burges等的PCGC、張學工的CSVM以及O.L.Mangasarian等的SOR演算法。
如果資料量很大,SVM的訓練時間就會比較長,如垃圾郵件的分類檢測,沒有使用SVM分類器,而是使用了簡單的naive bayes分類器,或者是使用邏輯迴歸模型分類。

(2) 用SVM解決多分類問題存在困難
經典的支援向量機演算法只給出了二類分類的演算法,而在資料探勘的實際應用中,一般要解決多類的分類問題。可以通過多個二類支援向量機的組合來解決。主要有一對多組合模式、一對一組合模式和SVM決策樹;再就是通過構造多個分類器的組合來解決。主要原理是克服SVM固有的缺點,結合其他演算法的優勢,解決多類問題的分類精度。如:與粗集理論結合,形成一種優勢互補的多類問題的組合分類器。

(3)對缺失資料敏感,對引數和核函式的選擇敏感
支援向量機效能的優劣主要取決於核函式的選取,所以對於一個實際問題而言,如何根據實際的資料模型選擇合適的核函式從而構造SVM演算法.目前比較成熟的核函式及其引數的選擇都是人為的,根據經驗來選取的,帶有一定的隨意性.在不同的問題領域,核函式應當具有不同的形式和引數,所以在選取時候應該將領域知識引入進來,但是目前還沒有好的方法來解決核函式的選取問題.
支援向量機的主要應用和研究的熱點
目前支援向量機主要應用在模式識別領域中的文字識別,中文分類,人臉識別等;同時也應用到許多的工程技術和資訊過濾等方面.

LR 的推導,特性?

推導參見西瓜書或者http://www.itdadao.com/articles/c15a851018p0.html
1) 可用於概率預測,也可用於分類。
並不是所有的機器學習方法都可以做可能性概率預測(比如SVM就不行,它只能得到1或者-1)。可能性預測的好處是結果又可比性:比如我們得到不同廣告被點選的可能性後,就可以展現點選可能性最大的N個。這樣以來,哪怕得到的可能性都很高,或者可能性都很低,我們都能取最優的topN。當用於分類問題時,僅需要設定一個閾值即可,可能性高於閾值是一類,低於閾值是另一類。
2) 僅能用於線性問題
只有在feature和target是線性關係時,才能用Logistic Regression(不像SVM那樣可以應對非線性問題)。這有兩點指導意義,一方面當預先知道模型非線性時,果斷不使用Logistic Regression; 另一方面,在使用Logistic Regression時注意選擇和target呈線性關係的feature。
3) 各feature之間不需要滿足條件獨立假設,但各個feature的貢獻是獨立計算的。
邏輯迴歸不像樸素貝葉斯一樣需要滿足條件獨立假設(因為它沒有求後驗概率)。但每個feature的貢獻是獨立計算的,即LR是不會自動幫你combine 不同的features產生新feature的 (時刻不能抱有這種幻想,那是決策樹,LSA, pLSA, LDA或者你自己要乾的事情)。舉個例子,如果你需要TF*IDF這樣的feature,就必須明確的給出來,若僅僅分別給出兩維 TF 和 IDF 是不夠的,那樣只會得到類似 a*TF + b*IDF 的結果,而不會有 c*TF*IDF 的效果。

GBDT預測時每一棵樹是否能並行?

預測的時候可以並行的。訓練的時候下一輪的目標值依賴上一輪的結果,需要iteratively fits,不能並行。而預測的時候每棵樹都已經建好,輸入是原始資料,輸出是把每棵樹的預測值加在一起,這也MART(muliple additive regression trees)得名的由來,預測過程樹之間並沒有依賴,不存在先算後算的問題,所以可以並行。

為什麼說bagging是減少variance,而boosting是減少bias?

Bagging 是 Bootstrap Aggregating 的簡稱,意思就是再取樣 (Bootstrap) 然後在每個樣本上訓練出來的模型取平均,所以是降低模型的 variance. Bagging 比如 Random Forest 這種先天並行的演算法都有這個效果。Boosting 則是迭代演算法,每一次迭代都根據上一次迭代的預測結果對樣本進行加權,所以隨著迭代不斷進行,誤差會越來越小,所以模型的 bias 會不斷降低。這種演算法無法並行,例子比如 Adaptive Boosting.

這裡寫圖片描述

xgboost相比傳統gbdt有何不同?xgboost為什麼快?xgboost如何支援並行?

1、傳統GBDT以CART作為基分類器,xgboost還支援線性分類器,這個時候xgboost相當於帶L1和L2正則化項的邏輯斯蒂迴歸(分類問題)或者線性迴歸(迴歸問題)。
2、傳統GBDT在優化時只用到一階導數資訊,xgboost則對代價函式進行了二階泰勒展開,同時用到了一階和二階導數。順便提一下,xgboost工具支援自定義代價函式,只要函式可一階和二階求導。
3、xgboost在代價函式里加入了正則項,用於控制模型的複雜度。正則項裡包含了樹的葉子節點個數、每個葉子節點上輸出的score的L2模的平方和。從Bias-variance tradeoff角度來講,正則項降低了模型的variance,使學習出來的模型更加簡單,防止過擬合,這也是xgboost優於傳統GBDT的一個特性。
4、Shrinkage(縮減),相當於學習速率(xgboost中的eta)。xgboost在進行完一次迭代後,會將葉子節點的權重乘上該係數,主要是為了削弱每棵樹的影響,讓後面有更大的學習空間。實際應用中,一般把eta設定得小一點,然後迭代次數設定得大一點。(補充:傳統GBDT的實現也有學習速率)
4、列抽樣(column subsampling)。xgboost借鑑了隨機森林的做法,支援列抽樣,不僅能降低過擬合,還能減少計算,這也是xgboost異於傳統gbdt的一個特性。
5、對缺失值的處理。對於特徵的值有缺失的樣本,xgboost可以自動學習出它的分裂方向。
6、xgboost工具支援並行。boosting不是一種序列的結構嗎?怎麼並行的?注意xgboost的並行不是tree粒度的並行,xgboost也是一次迭代完才能進行下一次迭代的(第t次迭代的代價函式裡包含了前面t-1次迭代的預測值)。xgboost的並行是在特徵粒度上的。我們知道,決策樹的學習最耗時的一個步驟就是對特徵的值進行排序(因為要確定最佳分割點),xgboost在訓練之前,預先對資料進行了排序,然後儲存為block結構,後面的迭代中重複地使用這個結構,大大減小計算量。這個block結構也使得並行成為了可能,在進行節點的分裂時,需要計算每個特徵的增益,最終選增益最大的那個特徵去做分裂,那麼各個特徵的增益計算就可以開多執行緒進行。可並行的近似直方圖演算法。樹節點在進行分裂時,我們需要計算每個特徵的每個分割點對應的增益,即用貪心法列舉所有可能的分割點。當資料無法一次載入記憶體或者在分散式情況下,貪心演算法效率就會變得很低,所以xgboost還提出了一種可並行的近似直方圖演算法,用於高效地生成候選的分割點。

決策樹的特性?

決策樹(decision tree)是一個樹結構(可以是二叉樹或非二叉樹)。其每個非葉節點表示一個特徵屬性上的測試,每個分支代表這個特徵屬性在某個值域上的輸出,而每個葉節點存放一個類別。使用決策樹進行決策的過程就是從根節點開始,測試待分類項中相應的特徵屬性,並按照其值選擇輸出分支,直到到達葉子節點,將葉子節點存放的類別作為決策結果。
演算法
C4.5
C4.5演算法繼承了ID3演算法的優點,並在以下幾方面對ID3演算法進行了改進:
1) 用資訊增益率來選擇屬性,克服了用資訊增益選擇屬性時偏向選擇取值多的屬性的不足;
2) 在樹構造過程中進行剪枝;
3) 能夠完成對連續屬性的離散化處理;
4) 能夠對不完整資料進行處理。
C4.5演算法有如下優點:產生的分類規則易於理解,準確率較高。其缺點是:在構造樹的過程中,需要對資料集進行多次的順序掃描和排序,因而導致演算法的低效。此外,C4.5只適合於能夠駐留於記憶體的資料集,當訓練集大得無法在記憶體容納時程式無法執行。

決策樹的優點
相對於其他資料探勘演算法,決策樹在以下幾個方面擁有優勢:
• 決策樹易於理解和實現. 人們在通過解釋後都有能力去理解決策樹所表達的意義。
• 對於決策樹,資料的準備往往是簡單或者是不必要的 . 其他的技術往往要求先把資料一般化,比如去掉多餘的或者空白的屬性。
• 能夠同時處理資料型和常規型屬性。其他的技術往往要求資料屬性的單一。
• 在相對短的時間內能夠對大型資料來源做出可行且效果良好的結果。
• 對缺失值不敏感
• 可以處理不相關特徵資料
• 效率高,決策樹只需要一次構建,反覆使用,每一次預測的最大計算次數不超過決策樹的深度。
決策樹的缺點
1)對連續性的欄位比較難預測。
2)對有時間順序的資料,需要很多預處理的工作。
3)當類別太多時,錯誤可能就會增加的比較快。
4)一般的演算法分類的時候,只是根據一個欄位來分類。
5)在處理特徵關聯性比較強的資料時表現得不是太好

SVM、LR、決策樹的對比?

LR,DT,SVM都有自身的特性,首先來看一下LR,工業界最受青睞的機器學習演算法,訓練、預測的高效效能以及演算法容易實現使其能輕鬆適應工業界的需求。LR還有個非常方便實用的額外功能就是它並不會給出離散的分類結果,而是給出該樣本屬於各個類別的概率(多分類的LR就是softmax),可以嘗試不同的截斷方式來在評測指標上進行同一模型的效能評估,從而得到最好的截斷分數。LR不管是實現還是訓練或者預測都非常高效,很輕鬆的handle大規模資料的問題(同時LR也很適合online learning)。此外,LR對於樣本噪聲是robust的,對於“mild”的多重共線性問題也不會受到太大影響,在特徵的多重共線性很強的情況下,LR也可以通過L2正則化來應對該問題,雖然在有些情況下(想要稀疏特徵)L2正則化並不太適用。

但是,當我們有大量的特徵以及部分丟失資料時,LR就開始費勁了。太多的分類變數(變數值是定性的,表現為互不相容的類別或屬性,例如性別,年齡段(1,2,3,4,5)等)也會導致LR的效能較差(這個時候可以考慮做離散化,其實肯定是要做離散化的)。還有一種論調是LR使用所有的樣本資料用於訓練,這引發了一個爭論:明顯是正例或者負例的樣本(這種樣本離分類邊界較遠,不大會影響分類的curve)不太應該被考慮太多,模型理想情況是由分類邊界的樣本決定的(類似SVM的思想),如下圖。還有一個情況就是當特徵是非線性時,需要做特徵變換,這可能會導致特徵維度急劇上升。下面是我認為的LR的一些利弊:

LR的優勢:

對觀測樣本的概率值輸出
實現簡單高效
多重共線性的問題可以通過L2正則化來應對
大量的工業界解決方案
支援online learning(個人補充)
LR的劣勢

特徵空間太大時表現不太好
對於大量的分類變數無能為力
對於非線性特徵需要做特徵變換
依賴所有的樣本資料

決策樹對於單調的特徵變換是”indifferent”的,也就是說特徵的單調變換對於決策樹來說不會產生任何影響(我本人最早使用決策樹時沒有理解內部的機制,當時還做了特徵歸一化等工作,發現效果沒有任何變化),因為決策樹是通過簡單的使用矩形切分特徵空間的,單調的特徵變換隻是做了特徵空間的縮放而已。由於決策樹是的分支生成是使用離散的區間或類別值的,所以對於不管多少分類變數都能夠輕鬆適應,而且通過決策樹生成出來的模型很直觀而且容易解釋(隨著決策樹的分支解釋即可),而且決策樹也可以通過計算落到該葉子類目的標籤平均值獲得最終類別的概率輸出。但是這就引發了決策樹的最大問題:非常容易過擬合,我們很容易就會生成一個完美擬合訓練集的模型,但是該模型在測試集合上的表現卻很poor,所以這個時候就需要剪枝以及交叉驗證來保證模型不要過擬合了。

過擬合的問題還可以通過使用隨機森林的方式來解決,隨機森林是對決策樹的一個很smart的擴充套件,即使用不同的特徵集合和樣本集合生成多棵決策樹,讓它們來vote預測樣本的標籤值。但是隨機森林並沒有像單純決策樹一樣的解釋能力。
DT的優勢:

直觀的決策過程
能夠處理非線性特徵
考慮了特徵相關性
DT的劣勢

極易過擬合(使用RF可以一定程度防止過擬合,但是隻要是模型就會過擬合!)
無法輸出score,只能給出直接的分類結果

SVM最大的好處就是它只依賴於處於分類邊界的樣本來構建分類面,可以處理非線性的特徵,同時,只依賴於決策邊界的樣本還可以讓他們能夠應對”obvious”樣本缺失的問題。由於SVM能夠輕鬆搞定大規模的特徵空間所以在文字分析等特徵維度較高的領域是比較好的選擇。SVM的可解釋性並不像決策樹一樣直觀,如果使用非線性核函式,SVM的計算代價會高很多。

SVM的優勢:

可以處理高維特徵
使用核函式輕鬆應對非線的性特徵空間
分類面不依賴於所有資料
SVM的劣勢:

對於大量的觀測樣本,效率會很低
找到一個“合適”的核函式還是很tricky的

GBDT 和 決策森林 的區別?

GBDT和隨機森林的相同點:
1、都是由多棵樹組成
2、最終的結果都是由多棵樹一起決定

GBDT和隨機森林的不同點:
1、組成隨機森林的樹可以是分類樹,也可以是迴歸樹;而GBDT只由迴歸樹組成
2、組成隨機森林的樹可以並行生成;而GBDT只能是序列生成
3、對於最終的輸出結果而言,隨機森林採用多數投票等;而GBDT則是將所有結果累加起來,或者加權累加起來
4、隨機森林對異常值不敏感,GBDT對異常值非常敏感
5、隨機森林對訓練集一視同仁,GBDT是基於權值的弱分類器的整合
6、隨機森林是通過減少模型方差提高效能,GBDT是通過減少模型偏差提高效能

如何判斷函式凸或非凸?

很多最優化問題都是在目標函式是凸函式或者凹函式的基礎上進行的。原因很簡單,凸函式的區域性極小值就是其全域性最小值,凹函式的區域性極大值就是其全域性最大值。因此,只要我們依據一個策略,一步步地逼近這個極值,最終肯定能夠到達全域性最值附近。
這裡寫圖片描述

解釋對偶的概念

Roughly speaking, duality provides a different angle to look at some mathematical objects.
教這門課的俄羅斯大叔每次都會舉同樣一個例子:你要證明一個人有罪很容易,找出他犯罪的證據;但是你要證明一個人沒罪很難!不在場證據?高階犯法不一定要在場。對應回我們的線性規劃可不可解的問題,某個解就是這個問題有解的證據。但是如果問題沒有解,你怎麼證明??!!對偶問題是解決這個事情的。這個就聯絡到Farkas lemma和其他一系列定理。全講清楚就很花時間了。大概來講就是說,有牛人找到一個跟原問題的對偶問題密切相關的問題,如果這個問題有解,原問題就沒解。這樣就提供了一個簡單的證明原問題沒解的途徑。

如何進行特徵選擇?

(1) 什麼是特徵選擇

特徵選擇 ( Feature Selection )也稱特徵子集選擇( Feature Subset Selection , FSS ) ,或屬性選擇( Attribute Selection ) ,是指從全部特徵中選取一個特徵子集,使構造出來的模型更好。

(2) 為什麼要做特徵選擇

   在機器學習的實際應用中,特徵數量往往較多,其中可能存在不相關的特徵,特徵之間也可能存在相互依賴,容易導致如下的後果:

Ø 特徵個數越多,分析特徵、訓練模型所需的時間就越長。

Ø 特徵個數越多,容易引起“維度災難”,模型也會越複雜,其推廣能力會下降。

特徵選擇能剔除不相關(irrelevant)或亢餘(redundant )的特徵,從而達到減少特徵個數,提高模型精確度,減少執行時間的目的。另一方面,選取出真正相關的特徵簡化了模型,使研究人員易於理解資料產生的過程。

一、特徵選擇和降維
1、相同點和不同點
特徵選擇和降維有著些許的相似點,這兩者達到的效果是一樣的,就是試圖去減少特徵資料集中的屬性(或者稱為特徵)的數目;但是兩者所採用的方式方法卻不同:降維的方法主要是通過屬性間的關係,如組合不同的屬性得新的屬性,這樣就改變了原來的特徵空間;而特徵選擇的方法是從原始特徵資料集中選擇出子集,是一種包含的關係,沒有更改原始的特徵空間。
2、降維的主要方法
Principal Component Analysis(主成分分析),詳細見“簡單易學的機器學習演算法——主成分分析(PCA)”
Singular Value Decomposition(奇異值分解),詳細見“簡單易學的機器學習演算法——SVD奇異值分解”
Sammon’s Mapping(Sammon對映)
二、特徵選擇的目標
引用自吳軍《數學之美》上的一句話:一個正確的數學模型應當在形式上是簡單的。構造機器學習的模型的目的是希望能夠從原始的特徵資料集中學習出問題的結構與問題的本質,當然此時的挑選出的特徵就應該能夠對問題有更好的解釋,所以特徵選擇的目標大致如下:
提高預測的準確性
構造更快,消耗更低的預測模型
能夠對模型有更好的理解和解釋
三、特徵選擇的方法
主要有三種方法:
1、Filter方法
其主要思想是:對每一維的特徵“打分”,即給每一維的特徵賦予權重,這樣的權重就代表著該維特徵的重要性,然後依據權重排序。
主要的方法有:
Chi-squared test(卡方檢驗)
information gain(資訊增益),詳細可見“簡單易學的機器學習演算法——決策樹之ID3演算法”
correlation coefficient scores(相關係數)
2、Wrapper方法
其主要思想是:將子集的選擇看作是一個搜尋尋優問題,生成不同的組合,對組合進行評價,再與其他的組合進行比較。這樣就將子集的選擇看作是一個是一個優化問題,這裡有很多的優化演算法可以解決,尤其是一些啟發式的優化演算法,如GA,PSO,DE,ABC等,詳見“優化演算法——人工蜂群演算法(ABC)”,“優化演算法——粒子群演算法(PSO)”。
主要方法有:recursive feature elimination algorithm(遞迴特徵消除演算法)
3、Embedded方法
其主要思想是:在模型既定的情況下學習出對提高模型準確性最好的屬性。這句話並不是很好理解,其實是講在確定模型的過程中,挑選出那些對模型的訓練有重要意義的屬性。
主要方法:正則化,可以見“簡單易學的機器學習演算法——嶺迴歸(Ridge Regression)”,嶺迴歸就是在基本線性迴歸的過程中加入了正則項。
總結以及注意點
這篇文章中最後提到了一點就是用特徵選擇的一點Trap。個人的理解是這樣的,特徵選擇不同於特徵提取,特徵和模型是分不開,選擇不同的特徵訓練出的模型是不同的。在機器學習=模型+策略+演算法的框架下,特徵選擇就是模型選擇的一部分,是分不開的。這樣文章最後提到的特徵選擇和交叉驗證就好理解了,是先進行分組還是先進行特徵選擇。
答案是當然是先進行分組,因為交叉驗證的目的是做模型選擇,既然特徵選擇是模型選擇的一部分,那麼理所應當是先進行分組。如果先進行特徵選擇,即在整個資料集中挑選擇機,這樣挑選的子集就具有隨機性。
我們可以拿正則化來舉例,正則化是對權重約束,這樣的約束引數是在模型訓練的過程中確定的,而不是事先定好然後再進行交叉驗證的。

為什麼會產生過擬合,有哪些方法可以預防或克服過擬合?

所以過擬合有兩種原因:
訓練集和測試機特徵分佈不一致(白天鵝黑天鵝)
或者模型太過複雜(記住了每道題)而樣本量不足

怎麼防止過擬合呢?應該用收集多樣化的樣本、cross validation、正則化

採用 EM 演算法求解的模型有哪些,為什麼不用牛頓法或梯度下降法?

  1. 梯度下降法(Gradient Descent)
     梯度下降法是最早最簡單,也是最為常用的最優化方法。梯度下降法實現簡單,當目標函式是凸函式時,梯度下降法的解是全域性解。一般情況下,其解不保證是全域性最優解,梯度下降法的速度也未必是最快的。梯度下降法的優化思想是用當前位置負梯度方向作為搜尋方向,因為該方向為當前位置的最快下降方向,所以也被稱為是”最速下降法“。最速下降法越接近目標值,步長越小,前進越慢
     牛頓法的缺點:
      (1)靠近極小值時收斂速度減慢,如下圖所示;
      (2)直線搜尋時可能會產生一些問題;
      (3)可能會“之字形”地下降。
      這裡寫圖片描述
    從上圖可以看出,梯度下降法在接近最優解的區域收斂速度明顯變慢,利用梯度下降法求解需要很多次的迭代。

      在機器學習中,基於基本的梯度下降法發展了兩種梯度下降方法,分別為隨機梯度下降法和批量梯度下降法
      這裡寫圖片描述
      這裡寫圖片描述
      這裡寫圖片描述
      這裡寫圖片描述

1)牛頓法(Newton’s method)

  牛頓法是一種在實數域和複數域上近似求解方程的方法。方法使用函式f (x)的泰勒級數的前面幾項來尋找方程f (x) = 0的根。牛頓法最大的特點就在於它的收斂速度很快。
  這裡寫圖片描述
  這裡寫圖片描述

牛頓法的優缺點總結:

  優點:二階收斂,收斂速度快;

  缺點:牛頓法是一種迭代演算法,每一步都需要求解目標函式的Hessian矩陣的逆矩陣,計算比較複雜。

最優化問題中,牛頓法為什麼比梯度下降法求解需要的迭代次數更少?

牛頓法是二階收斂,梯度下降是一階收斂,所以牛頓法就更快。如果更通俗地說的話,比如你想找一條最短的路徑走到一個盆地的最底部,梯度下降法每次只從你當前所處位置選一個坡度最大的方向走一步,牛頓法在選擇方向時,不僅會考慮坡度是否夠大,還會考慮你走了一步之後,坡度是否會變得更大。所以,可以說牛頓法比梯度下降法看得更遠一點,能更快地走到最底部。根據wiki上的解釋,從幾何上說,牛頓法就是用一個二次曲面去擬合你當前所處位置的局部曲面,而梯度下降法是用一個平面去擬合當前的局部曲面,通常情況下,二次曲面的擬合會比平面更好,所以牛頓法選擇的下降路徑會更符合真實的最優下降路徑。

這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述

用 EM 演算法推導解釋 Kmeans

k-means演算法與EM演算法的關係是這樣的:k-means是兩個步驟交替進行,可以分別看成E步和M步;
M步中將每類的中心更新為分給該類各點的均值,可以認為是在「各類分佈均為單位方差的高斯分佈」的假設下,最大化似然值;
E步中將每個點分給中心距它最近的類(硬分配),可以看成是EM演算法中E步(軟分配)的近似。

用過哪些聚類演算法,解釋密度聚類演算法

瀚思安信在分析安全大資料時,常見的分析第一步就是把使用者或者行為聚類,找出其中孤立的或者小類,然後作為潛在有問題的使用者或者行為進行進一步分析。
聚類演算法是最常見的機器學習演算法種類,比如大家都熟悉的K-Means,原理或者實現都很簡單。但是在安全大資料分析時,我們期望聚類演算法滿足額外的一些特性:
支援自定義的距離函式:比如衡量使用者行為相識度。很多聚類演算法都不滿足這點,像標準K-Means就只能用歐式距離(很多初學者都沒注意到這點)。
能並行化執行在Spark平臺上。瀚思安全大資料分析即使是一個小系統,每天也輸入接近TB級別的資料,能併發執行是基礎的必需需求。而目前Spark Mllib裡面只有K-Means一種並行聚類實現。
無引數,或者至少對引數不敏感。這點是因為我們資料分析大部分是無監督學習,不需要使用者掌握複雜的調引數知識。前者可以用無引數貝葉斯法,後者就是下面要說的密度聚類演算法。
密度聚類演算法
聚類演算法大致可以分為劃分法(Partitioning Methods)、 層次法(Hierarchical Methods)、基於密度的方法(density-based methods)、 基於網格的方法(grid-based methods)、基於模型的方法(Model-Based Methods)。 而 OPTICS 就是一種基於密度的聚類演算法,這種方法的思想就是當區域內點的密度大於某個閥值, 就把這些點歸於一類,因此這種基於密度的聚類演算法天生就有很強的尋找離群噪音點的能力。

K-means優缺點以及dbscan虛擬碼

  1. 基於劃分的聚類:

      K-means, k-medoids(每一個類別中找一個樣本點來代表),CLARANS.

      k-means是使下面的表示式值最小:

       k-means演算法的優點:

      (1)k-means演算法是解決聚類問題的一種經典演算法,演算法簡單、快速。

      (2)對處理大資料集,該演算法是相對可伸縮的和高效率的,因為它的複雜度大約是O(nkt),其中n是所有物件的數目,k是簇的數目,t是迭代的次數。通常k遠小於n。這個演算法通常區域性收斂。

      (3)演算法嘗試找出使平方誤差函式值最小的k個劃分。當簇是密集的、球狀或團狀的,且簇與簇之間區別明顯時,聚類效果較好。

       缺點:

      (1)k-平均方法只有在簇的平均值被定義的情況下才能使用,且對有些分類屬性的資料不適合。

      (2)要求使用者必須事先給出要生成的簇的數目k。

      (3)對初值敏感,對於不同的初始值,可能會導致不同的聚類結果。

      (4)不適合於發現非凸面形狀的簇,或者大小差別很大的簇。

      (5)對於”噪聲”和孤立點資料敏感,少量的該類資料能夠對平均值產生極大影響。

      2. 基於層次的聚類:

      自底向上的凝聚方法,比如AGNES。

      自上向下的分裂方法,比如DIANA。

      3. 基於密度的聚類:

      DBSACN,OPTICS,BIRCH(CF-Tree),CURE.

      4. 基於網格的方法:

      STING, WaveCluster.

      5. 基於模型的聚類:

      EM,SOM,COBWEB.
     
     虛擬碼:
     這裡寫圖片描述

1、DBSCAN簡介

DBSCAN(Density-Based Spatial Clustering of Applications with Noise,具有噪聲的基於密度的聚類方法)是一種基於密度的空間聚類演算法。該演算法將具有足夠密度的區域劃分為簇,並在具有噪聲的空間資料庫中發現任意形狀的簇,它將簇定義為密度相連的點的最大集合。

該演算法利用基於密度的聚類的概念,即要求聚類空間中的一定區域內所包含物件(點或其他空間物件)的數目不小於某一給定閾值。DBSCAN演算法的顯著優點是聚類速度快且能夠有效處理噪聲點和發現任意形狀的空間聚類。但是由於它直接對整個資料庫進行操作且進行聚類時使用了一個全域性性的表徵密度的引數,因此也具有兩個比較明顯的弱點:

(1)當資料量增大時,要求較大的記憶體支援I/O消耗也很大;

(2)當空間聚類的密度不均勻、聚類間距差相差很大時,聚類質量較差。

2、DBSCAN和傳統聚類演算法對比

DBSCAN演算法的目的在於過濾低密度區域,發現稠密度樣本點。跟傳統的基於層次的聚類和劃分聚類的凸形聚類簇不同,該演算法可以發現任意形狀的聚類簇,與傳統的演算法相比它有如下優點:

(1)與K-MEANS比較起來,不需要輸入要劃分的聚類個數;

(2)聚類簇的形狀沒有偏倚;

(3)可以在需要時輸入過濾噪聲的引數;

這裡寫圖片描述

資料歸一化好處:

歸一化化定義:我是這樣認為的,歸一化化就是要把你需要處理的資料經過處理後(通過某種演算法)限制在你需要的一定範圍內。首先歸一化是為了後面資料處理的方便,其次是保正程式執行時收斂加快。
相關解釋參考:http://dataunion.org/15046.html

資訊增益率相比資訊增益的好處

這裡寫圖片描述