數據挖掘常見面試題(持續更新中)

1、你理解什麼是數據挖掘?

數據挖掘就是由數據準備,數據挖掘和對結果的解釋評估三部分組成。數據準備包括數據選取,數據預處理和數據變化。數據挖掘部分包括確定挖掘的任務或目的,選擇挖掘算法。最後將結果可視化或者轉化爲易於理解的形式。

2、爲什麼會產生過擬合,有哪些方法可以預防或克服過擬合?(常問問題)

所謂過擬合(Overfit),是這樣一種現象:一個假設在訓練數據上能夠獲得比其他假設更好的擬合,但是在訓練數據外的數據集上卻不能很好的擬合數據。

過擬合產生的原因:出現這種現象的主要原因是訓練數據中存在噪音或者訓練數據太少。

解決方法:

1、 增大數據量

2、 減少feature個數(人工定義留多少個feature或者算法選取這些feature)

3、 正則化(留下所有的feature,但對於部分feature定義其parameter非常小)

4、 交叉驗證,重採樣評價模型效能,K折交叉驗證

5、 保留一個驗證數據集檢驗

幾乎所有集成模型都是爲了防止過擬合的。

3、樣本不平衡處理方法?(好多次)

a、負樣本少,就複製到一定比例

b、或者把正樣本刪除一部分

c、分段逐一訓練(舉例:正樣本10000,負樣本1000,將正樣本隨機分成10份,每份1000,然後拿着負樣本的1000與正樣本的每一份進行訓練,最後進行融合選擇)

d、模型參數調權重(模型裏面有個參數可以調整樣本權重)

e、交叉驗證

f、根據樣本隨機構造新的樣本

4、高維海量數據搜索

KNN(維度20以下)

歐式距離就是指在m維空間中兩個點之間的真實距離,或者向量的自然長度(即該點到原點的距離)。在二維和三維空間中的歐氏距離就是兩點之間的實際距離,所以它實現的是絕對距離。

餘弦相似度是通過計算兩個向量的夾角餘弦值來評估他們的相似度。

Jaccard相似度是用於比較有限樣本集之間的相似性與差異性,其中Jaccard係數值越大,樣本相似度越高。

Pearson相似度是餘弦相似度的升級版,它把每個向量都中心化了,即每個向量會減去所有向量的平均數,來實現數據更好的平衡,所以它實現的是相對距離。

ANN(維度20以上):

  1. LSH(Local Sensitive Hash / 局部敏感度哈希)
  2. K-Means Tree
  3. K-D Tree

https://zhuanlan.zhihu.com/p/58130758

5、邏輯迴歸於SVM的區別

1. 損失函數不同

邏輯迴歸的損失函數:Loss(z)=log⁡( 1+exp⁡(-z))

SVM的損失函數:

損失函數的目的都是增加對分類影響較大的數據點的權重,減少與分類關係較小的數據點的權重。SVM的處理方法是考慮支持向量(距離超平面最近的這幾個滿足 的樣本點),邏輯迴歸通過非線性映射,減小了離分類平面較遠的點的權重,相對增加與分類最相關的數據點的權重。兩者目的一樣。SVM考慮局部(支持向量),而logistic迴歸考慮全局。

6、索引爲什麼能加快查詢速度?

索引的原理:通過不斷的縮小想要獲得數據的範圍來篩選最終想要的結果,同時把隨機的事件變成順序事件,也就是我們總是通過同一種查找方式來鎖定數據。

索引的數據結構:B+樹

目前大部分數據庫系統及文件系統都採用B-Tree和B+Tree作爲索引結構。B+樹提高了磁盤IO性能和遍歷元素的效率

7、連續值轉換爲離散值,有什麼辦法,比如年齡?(好多次)

根據業務知識區分

根據pandas下面qcut和cut方法進行等頻或等寬處理

風控中 可以根據woe和iv 或者卡方檢驗

用聚類來做最優化尺度

8、你在建模過程中遇到過什麼困難?(很多次)

樣本不平衡問題(然後回答解決辦法),樣本過擬合問題(然後回答解決辦法),準確率不高(結合更換特徵,模型調參,換模型等思路回答)

9、Dropout 調參

我的經驗是決定dropout之前,需要先判斷是否模型過擬合

先dropout=0, 訓練後得到模型的一些指標(比如:  F1, Accuracy, AP)。比較train數據集和test數據集的指標。

  1. 過擬合:嘗試下面的步驟。
  2. 欠擬合:嘗試調整模型的結構,暫時忽略下面步驟。

dropout設置成0.4-0.6之間, 再次訓練得到模型的一些指標。

  1. 如果過擬合明顯好轉,但指標也下降明顯,可以嘗試減少dropout(0.2)
  2. 如果過擬合還是嚴重,增加dropout(0.2)

重複上面的步驟多次,就可以找到理想的dropout值了

10、VGG優缺點

  1. VGGNet的結構非常簡潔,整個網絡都使用了同樣大小的卷積核尺寸(3x3)和最大池化尺寸(2x2)。
  2. 幾個小濾波器(3x3)卷積層的組合比一個大濾波器(5x5或7x7)卷積層好
  3. 驗證了通過不斷加深網絡結構可以提升性能。

VGG缺點

  1. VGG耗費更多計算資源,並且使用了更多的參數(這裏不是3x3卷積的鍋),導致更多的內存佔用(140M)。其中絕大多數的參數都是來自於第一個全連接層。VGG可是有3個全連接層啊!

PS:有的文章稱:發現這些全連接層即使被去除,對於性能也沒有什麼影響,這樣就顯著降低了參數數量。

注:很多pretrained的方法就是使用VGG的model(主要是16和19),VGG相對其他的方法,參數空間很大,最終的model有500多m,AlexNet只有200m,GoogLeNet更少,所以train一個vgg模型通常要花費更長的時間,所幸有公開的pretrained model讓我們很方便的使用。

11、抽樣的分類

隨機抽樣,分層抽樣(分塊)每一層進行隨機抽樣,系統抽樣(固定規則),整羣抽樣(先聚類,再抽樣)

12、決策樹

ID3.5 -> 熵(entropy),information gain(信息增益),選擇增益最大的屬性,

C4.5

ID3有一些缺陷,就是選擇的時候容易選擇一些比較容易分純淨的屬性,尤其在具有像ID值這樣的屬性,因爲每個ID都對應一個類別,所以分的很純淨,ID3比較傾向找到這樣的屬性做分裂。

C4.5算法定義了分裂信息,表示爲:split_infoA(D)=−∑j=1v|Dj||D|log2(|Dj||D|)

split_infoA(D)=−∑j=1v|Dj||D|log2⁡(|Dj||D|)

很容易理解,這個也是一個熵的定義,pi=|Dj||D|pi=|Dj||D|,可以看做是屬性分裂的熵,分的越多就越混亂,熵越大。

gain_ratio(A)=gain(A)/split_info(A)

CART分類樹:

CART分類樹預測分類離散型數據,採用基尼指數選擇最優特徵,同時決定該特徵的最優二值切分點。分類過程中,假設有K個類,樣本點屬於第k個類的概率爲Pk,則概率分佈的基尼指數定義爲

根據基尼指數定義,可以得到樣本集合D的基尼指數,其中Ck表示數據集D中屬於第k類的樣本子集。

如果數據集D根據特徵A在某一取值a上進行分割,得到D1,D2兩部分後,那麼在特徵A下集合D的基尼係數如下所示。其中基尼係數Gini(D)表示集合D的不確定性,基尼係數Gini(D,A)表示A=a分割後集合D的不確定性。基尼指數越大,樣本集合的不確定性越大。

對於屬性A,分別計算任意屬性值將數據集劃分爲兩部分之後的Gain_Gini,選取其中的最小值,作爲屬性A得到的最優二分方案。然後對於訓練集S,計算所有屬性的最優二分方案,選取其中的最小值,作爲樣本及S的最優二分方案

實現trick

決策樹的構建過程是一個遞歸的過程,所以需要確定停止條件,否則過程將不會結束。一種最直觀的方式是當每個子節點只有一種類型的記錄時停止,但是這樣往往會使得樹的節點過多,導致過擬合問題(Overfitting)。另一種可行的方法是當前節點中的記錄數低於一個最小的閥值,那麼就停止分割,將max(P(i))對應的分類作爲當前葉節點的分類。

過擬合

優化方案1:修剪枝葉

決策樹過渡擬合往往是因爲太過“茂盛”,也就是節點過多,所以需要裁剪(Prune Tree)枝葉。裁剪枝葉的策略對決策樹正確率的影響很大。主要有兩種裁剪策略。

前置裁剪 在構建決策樹的過程時,提前停止。那麼,會將切分節點的條件設置的很苛刻,導致決策樹很短小。結果就是決策樹無法達到最優。實踐證明這中策略無法得到較好的結果。

後置裁剪 決策樹構建好後,然後纔開始裁剪。採用兩種方法:

1)用單一葉節點代替整個子樹,葉節點的分類採用子樹中最主要的分類;

2)將一個子樹完全替代另外一顆子樹。後置裁剪有個問題就是計算效率,有些節點計算後就被裁剪了,導致有點浪費。

優化方案2:K-Fold Cross Validation

首先計算出整體的決策樹T,葉節點個數記作N,設i屬於[1,N]。對每個i,使用K-Fold Validataion方法計算決策樹,並裁剪到i個節點,計算錯誤率,最後求出平均錯誤率。(意思是說對每一個可能的i,都做K次,然後取K次的平均錯誤率。)這樣可以用具有最小錯誤率對應的i作爲最終決策樹的大小,對原始決策樹進行裁剪,得到最優決策樹。

優化方案3:Random Forest

Random Forest是用訓練數據隨機的計算出許多決策樹,形成了一個森林。然後用這個森林對未知數據進行預測,選取投票最多的分類。實踐證明,此算法的錯誤率得到了經一步的降低。這種方法背後的原理可以用“三個臭皮匠定一個諸葛亮”這句諺語來概括。一顆樹預測正確的概率可能不高,但是集體預測正確的概率卻很高。RF是非常常用的分類算法,效果一般都很好。

13、梯度消失與爆炸

概念:在深度神經網絡中的梯度是不穩定的,在靠近輸入層的隱藏層中或會消失,或會爆炸。這種不穩定性纔是深度神經網絡中基於梯度學習的根本問題。

產生梯度不穩定的根本原因前面層上的梯度是來自後面層上梯度的乘積。當存在過多的層時,就會出現梯度不穩定場景,比如梯度消失和梯度爆炸。

梯度消失:在神經網絡中,當前面隱藏層的學習速率低於後面隱藏層的學習速率,即隨着隱藏層數目的增加,分類準確率反而下降了。這種現象叫梯度消失。

梯度爆炸:在神經網絡中,當前面隱藏層的學習速率高於後面隱藏層的學習速率,即隨着隱藏層數目的增加,分類準確率反而下降了。這種現象叫梯度爆炸。

其實梯度消失和梯度爆炸是一回事,只是表現的形式,以及產生的原因不一樣。

14.梯度消失與梯度爆炸的產生原因

根本原因是反向傳播算法

梯度消失:(1)隱藏層的層數過多;(2)採用了不合適的激活函數sigmoid(更容易產生梯度消失,但是也有可能產生梯度爆炸)

梯度爆炸:(1)隱藏層的層數過多;(2)權重的初始化值過大

15.梯度消失與梯度爆炸的解決方案

梯度消失和梯度爆炸問題都是因爲網絡太深,網絡權值更新不穩定造成的,本質上是因爲梯度反向傳播中的連乘效應。對於更普遍的梯度消失問題,可以考慮一下三種方案解決:

(1)用ReLU、Leaky-ReLU、P-ReLU、R-ReLU、Maxout等替代sigmoid函數。(幾種激活函數的比較見我的博客)

(2)用Batch Normalization。(對於Batch Normalization的理解可以見我的博客)

(3)LSTM的結構設計也可以改善RNN中的梯度消失問題。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章