1. 程式人生 > >機器學習(資料探勘)面試常考問題(知識點總結)

機器學習(資料探勘)面試常考問題(知識點總結)

應聘資料探勘工程師或機器學習工程師,面試官經常會考量面試者對SVM的理解。

以下是我自己在準備面試過程中,基於個人理解,總結的一些SVM面試常考問題(想到會再更新),如有錯漏,請批評指正。(大神請忽視)

轉載請註明出處:blog.csdn.net/szlcw1

注:基於HOG-SVM演算法的行人檢測流程 見書21頁(實用性目標檢測與跟蹤演算法㢆及應用) 相関概念需要牢記,流程圖

SVM的原理是什麼?

SVM是一種二類分類模型。它的基本模型是在特徵空間中尋找間隔最大化的分離超平面的線性分類器。(間隔最大是它有別於感知機)

(1)當訓練樣本線性可分時,通過硬間隔最大化,學習一個線性分類器,即線性可分支援向量機;

(2)當訓練資料近似線性可分時,引入鬆弛變數,通過軟間隔最大化,學習一個線性分類器,即線性支援向量機;

(3)當訓練資料線性不可分時,通過使用核技巧及軟間隔最大化,學習非線性支援向量機。

注:以上各SVM的數學推導應該熟悉:硬間隔最大化(幾何間隔)---學習的對偶問題---軟間隔最大化(引入鬆弛變數)---非線性支援向量機(核技巧)。

SVM為什麼採用間隔最大化?

當訓練資料線性可分時,存在無窮個分離超平面可以將兩類資料正確分開。

感知機利用誤分類最小策略,求得分離超平面,不過此時的解有無窮多個。

線性可分支援向量機利用間隔最大化求得最優分離超平面,這時,解是唯一的。另一方面,此時的分隔超平面所產生的分類結果是最魯棒

的,對未知例項的泛化能力最強

然後應該藉此闡述,幾何間隔,函式間隔,及從函式間隔—>求解最小化1/2 ||w||^2 時的w和b。即線性可分支援向量機學習演算法—最大間隔法的由來。

為什麼要將求解SVM的原始問題轉換為其對偶問題?

一、是對偶問題往往更易求解(當我們尋找約束存在時的最優點的時候,約束的存在雖然減小了需要搜尋的範圍,但是卻使問題變得更加複雜。為了使問題變得易於處理,我們的方法是把目標函式和約束全部融入一個新的函式,即拉格朗日函式,再通過這個函式來尋找最優點。

二、自然引入核函式,進而推廣到非線性分類問題。

為什麼SVM要引入核函式?

當樣本在原始空間線性不可分時,可將樣本從原始空間對映到一個更高維的特徵空間,使得樣本在這個特徵空間內線性可分。

引入對映後的對偶問題:

 

在學習預測中,只定義核函式K(x,y),而不是顯式的定義對映函式ϕ。因為特徵空間維數可能很高,甚至可能是無窮維,因此直接計算ϕ(xϕ(y)是比較困難的。相反,直接計算K(x,y)比較容易(即直接在原來的低維空間中進行計算,而不需要顯式地寫出對映後的結果)。

核函式的定義:K(x,y)=<ϕ(x),ϕ(y)>,即在特徵空間的內積等於它們在原始樣本空間中通過核函式K計算的結果。

除了 SVM 之外,任何將計算表示為資料點的內積的方法,都可以使用核方法進行非線性擴充套件。

svm RBF核函式的具體公式?


Gauss徑向基函式則是區域性性強的核函式,其外推能力隨著引數σ的增大而減弱。

這個核會將原始空間對映為無窮維空間。不過,如果 σ 選得很大的話,高次特徵上的權重實際上衰減得非常快,所以實際上(數值上近似一下)相當於一個低維的子空間;反過來,如果 σ 選得很小,則可以將任意的資料對映為線性可分——當然,這並不一定是好事,因為隨之而來的可能是非常嚴重的過擬合問題。不過,總的來說,通過調控引數σ ,高斯核實際上具有相當高的靈活性,也是使用最廣泛的核函式之一。



為什麼SVM對缺失資料敏感?

這裡說的缺失資料是指缺失某些特徵資料,向量資料不完整。SVM沒有處理缺失值的策略(決策樹有)。而SVM希望樣本在特徵空間中線性可分,所以特徵空間的好壞對SVM的效能很重要。缺失特徵資料將影響訓練結果的好壞。

SVM是用的是哪個庫?Sklearn/libsvm中的SVM都有什麼引數可以調節?

用的是sklearn實現的。採用sklearn.svm.SVC設定的引數。本身這個函式也是基於libsvm實現的(PS: libsvm中的二次規劃問題的解決演算法是SMO)。

SVC函式的訓練時間是隨訓練樣本平方級增長,所以不適合超過10000的樣本。

對於多分類問題,SVC採用的是one-vs-one投票機制,需要兩兩類別建立分類器,訓練時間可能比較長。

sklearn.svm.SVC(C=1.0kernel='rbf'degree=3gamma='auto'coef0=0.0shrinking=Trueprobability=False,tol=0.001cache_size=200class_weight=Noneverbose=Falsemax_iter=-1decision_function_shape=None,random_state=None)

引數:

l  C:C-SVC的懲罰引數C?預設值是1.0

C越大,相當於懲罰鬆弛變數,希望鬆弛變數接近0,即對誤分類的懲罰增大,趨向於對訓練集全分對的情況,這樣對訓練集測試時準確率很高,但泛化能力弱。C值小,對誤分類的懲罰減小,允許容錯,將他們當成噪聲點,泛化能力較強。

l  kernel:核函式,預設是rbf,可以是‘linear’, ‘poly’, ‘rbf’, ‘sigmoid’, ‘precomputed’ 

    0 – 線性:u'v

    1 – 多項式:(gamma*u'*v + coef0)^degree

    2 – RBF函式:exp(-gamma|u-v|^2)

    3 –sigmoid:tanh(gamma*u'*v + coef0)

l  degree:多項式poly函式的維度,預設是3,選擇其他核函式時會被忽略。

l  gamma : ‘rbf’,‘poly’ 和‘sigmoid’的核函式引數。預設是’auto’,則會選擇1/n_features

l  coef0 :核函式的常數項。對於‘poly’和 ‘sigmoid’有用。

l  probability是否採用概率估計?.預設為False

l  shrinking:是否採用shrinking heuristic方法,預設為true

l  tol停止訓練的誤差值大小,預設為1e-3

l  cache_size:核函式cache快取大小,預設為200

l  class_weight:類別的權重,字典形式傳遞。設定第幾類的引數Cweight*C(C-SVC中的C)

l  verbose:允許冗餘輸出?

l  max_iter:最大迭代次數。-1為無限制。

l  decision_function_shape‘ovo’, ‘ovr’ or None, default=None3

l  random_state:資料洗牌時的種子值,int

主要調節的引數有:C、kernel、degree、gamma、coef0。

SVM如何處理多分類問題?

一般有兩種做法:一種是直接法,直接在目標函式上修改,將多個分類面的引數求解合併到一個最優化問題裡面。看似簡單但是計算量卻非常的大。

另外一種做法是間接法:對訓練器進行組合。其中比較典型的有一對一,和一對多

一對多,就是對每個類都訓練出一個分類器,由svm是二分類,所以將此而分類器的兩類設定為目標類為一類,其餘類為另外一類。這樣針對k個類可以訓練出k個分類器,當有一個新的樣本來的時候,用這k個分類器來測試,那個分類器的概率高,那麼這個樣本就屬於哪一類。這種方法效果不太好,bias比較高。

svm一對一法(one-vs-one),針對任意兩個類訓練出一個分類器,如果有k類,一共訓練出C(2,k) 個分類器,這樣當有一個新的樣本要來的時候,用這C(2,k) 個分類器來測試,每當被判定屬於某一類的時候,該類就加一,最後票數最多的類別被認定為該樣本的類。

機器學習——貝葉斯樸素貝葉斯 知識點與面試總結

原創 2017年07月12日 20:18:29
  • 926

貝葉斯判定準則:為最小化總體風險,只需在每個樣本上選擇能使條件風險R(c|x)最小的類別標記: 

/-------------------------------極大似然估計---------------------------------/

估計類的常用策略:先假定其具有某種確定的概率分佈形式,再基於訓練樣本對概率分佈的引數進行估計。即概率模型的訓練過程就是引數估計過程。

引數估計兩大學派:頻率主義學派和貝葉斯學派。

1)頻率主義:引數雖然未知,但卻是客觀存在的固定值,因此,可通過優化似然函式等準則來確定引數值(最大似然)。2)貝葉斯學派:引數是未觀察到的隨機變數,本身也可以有分佈,因此,可假定引數服從一個先驗分佈,然後基於觀察到的資料來計算引數的後驗分佈。

/*-----------------------------樸素貝葉斯------------------------------------*/

樸素貝葉斯:

1)思想:對於給定的待分類項x,通過學習到的模型計算後驗概率分佈,即:在此項出現的條件下各個目標類別出現的概率,將後驗概率最大的類作為x所屬的類別。後驗概率根據貝葉斯定理計算。

2)關鍵:為避免貝葉斯定理求解時面臨的組合爆炸、樣本稀疏問題,引入了條件獨立性假設

3)工作原理: 

4)工作流程:1)準備階段:確定特徵屬性,並對每個特徵屬性進行適當劃分,然後由人工對一部分待分類項進行分類,形成訓練樣本。 2)訓練階段:對每個類別計算在樣本中的出現頻率p(y),並且計算每個特徵屬性劃分對每個類別的條件概率p(yi | x); 3)應用階段:使用分類器進行分類,輸入是分類器和待分類樣本,輸出是樣本屬於的分類類別。

採用了屬性條件獨立性假設,

d:屬性數目,xi為x在第i個屬性上的取值。

貝葉斯估計:

極大似然估計中,直接用連乘計算出的概率值為0,該樣本的其他屬性值將失效。為了避免其他屬性攜帶的資訊被訓練集中未出現的屬性值“抹去”,在估計概率值需要“平滑”,

優點:高效、易於訓練。對小規模的資料表現很好,適合多分類任務,適合增量式訓練。

缺點:分類的效能不一定很高,對輸入資料的表達形式很敏感。(離散、連續,值極大之類的)

Note:為什麼屬性獨立性假設在實際情況中很難成立,但樸素貝葉斯仍能取得較好的效果?

1)對於分類任務來說,只要各類別的條件概率排序正確、無需精準概率值即可導致正確分類;

2)如果屬性間依賴對所有類別影響相同,或依賴關係的影響能相互抵消,則屬性條件獨立性假設在降低計算開銷的同時不會對效能產生負面影響。

/*---------------------------半樸素貝葉斯-----------------------------------*/

提出:現實任務中,條件獨立性假設很難成立,於是,人們對屬性獨立性假設進行一定程度的放鬆。

想法:適當考慮一部分屬性間的相互依賴資訊,從而既不需進行聯合概率計算,又不至於徹底忽略了比較強的屬性依賴關係。

/*-----------------------------貝葉斯網------------------------------------*/

/*-------------------------------面試篇---------------------------------*/

1、貝葉斯分類器與貝葉斯學習不同:

前者:通過最大後驗概率進行單點估計;後者:進行分佈估計。

2、後驗概率最大化準則意義?

3、樸素貝葉斯需要注意的地方?

1)給出的特徵向量長度可能不同,這是需要歸一化為通長度的向量(這裡以文字分類為例),比如說是句子單詞的話,則長度為整個詞彙量的長度,對應位置是該單詞出現的次數。

2)計算要點:

4、經典提問:Navie Bayes和Logistic迴歸區別是什麼?

前者是生成式模型,後者是判別式模型,二者的區別就是生成式模型與判別式模型的區別。

1)首先,Navie Bayes通過已知樣本求得先驗概率P(Y), 及條件概率P(X|Y), 對於給定的例項,計算聯合概率,進而求出後驗概率。也就是說,它嘗試去找到底這個資料是怎麼生成的(產生的),然後再進行分類。哪個類別最有可能產生這個訊號,就屬於那個類別。

優點:樣本容量增加時,收斂更快;隱變數存在時也可適用。

缺點:時間長;需要樣本多;浪費計算資源

2)相比之下,Logistic迴歸不關心樣本中類別的比例及類別下出現特徵的概率,它直接給出預測模型的式子。設每個特徵都有一個權重,訓練樣本資料更新權重w,得出最終表示式。梯度法。

優點:直接預測往往準確率更高;簡化問題;可以反應資料的分佈情況,類別的差異特徵;適用於較多類別的識別。

缺點:收斂慢;不適用於有隱變數的情況。