1. 程式人生 > >數據挖掘面試題(1)

數據挖掘面試題(1)

包括 所有 什麽是 是否 連接 parameter count 同事 索引

數據挖掘分析相關面試題(親身經歷),持續更新中

2018年04月13日 17:50:20 nono19nice 閱讀數:3009

以下大多數都是博主或者博主同事經歷過的面試題喲~關於工作內容的就不寫啦,一些基礎面試題跟大家分享下

多看看面試題也能夠讓你快速了解自己的能力和短缺的地方哦~

本篇博客會持續更新,也希望大家多多提供一些面試題哦~

1、基礎面試

(1) 自我介紹:emmm這個就不多講啦,把大概背景講清楚就可以

(2)自己做過的項目介紹:大家可以選擇最能夠體現自己能力的項目。可以從以下幾個方面來講:

a、簡單介紹下項目

b、自己在項目中的職責及出色業績(貢獻)

c、遇到了哪些問題,如何解決的(如果問題還沒解決,就還是不要說啦哈哈)

d、在這個項目中學到了什麽,比如業務與分析相結合、編程能力、團隊合作能力等

(3)解決問題最重要的能力是哪些?

(4)我在項目中總結了哪些技能點?

(5)你在數據挖掘中的優勢?

(6)你理解什麽是數據挖掘?

2、數據分析與挖掘相關問題(括號內表示被問到的次數哦,有些會提供參考答案,但還是希望大家自己多多研究喔)

以下序號是根據更新狀態來的,所以每個板塊的序號不對應

數據分析與挖掘方面:

(1)為什麽會產生過擬合,有哪些方法可以預防或克服過擬合?(2次)

所謂過擬合(Overfit),是這樣一種現象:一個假設在訓練數據上能夠獲得比其他假設更好的擬合,但是在訓練數據外的數據集上卻不能很好的擬合數據。此時我們就叫這個假設出現了overfit的現象。
過擬合產生的原因:出現這種現象的主要原因是訓練數據中存在噪音或者訓練數據太少。
解決方法:
1、 增大數據量
2、 減少feature個數(人工定義留多少個feature或者算法選取這些feature)
3、 正則化(留下所有的feature,但對於部分feature定義其parameter非常小)
4、 交叉驗證,重采樣評價模型效能,K折交叉驗證
5、保留一個驗證數據集檢驗

(2)無監督和有監督算法的區別?

監督學習(supervised learning):通過已有的訓練樣本(即已知數據以及其對應的輸出)來訓練,從而得到一個最優模型,再利用這個模型將所有新的數據樣本映射為相應的輸出結果,對輸出結果進行簡單的判斷從而實現分類的目的,那麽這個最優模型也就具有了對未知數據進行分類的能力。包括所有的回歸算法分類算法,比如線性回歸、決策樹、KNN、SVM等

無監督學習(unsupervised learning):我們事先沒有任何訓練數據樣本,需要直接對數據進行建模。包括所有的聚類算法,比如k-means 、PCA、 GMM等

(3)tree-base模型是否了解,決策樹和隨機森林區別是什麽,樹節點的分裂都有哪些策略(即節點的選擇)

直接說隨機森林是很多棵決策樹組成的,一定程度上能避免過擬合問題。
樹節點分裂:ID3 : 以信息增益大小來建立。
- C4.5 : 以信息增益率大小來建立。
- CART : 以基尼系數大小來建立。
決策樹的數據最好是離散型的吧?
ID3和C4.5是分類型決策樹,只處理離散型的,CART是分類回歸都可以做的決策樹,支持所有類型

(7)tf-idf的公式

TFIDF實際上是:TF * IDF
詞頻(term frequency,TF)指的是某一個給定的詞語在該文件中出現的頻率。
逆向文件頻率(inverse document frequency,IDF)是一個詞語普遍重要性的度量。某一特定詞語的IDF,可以由總文件數目除以包含該詞語之文件的數目。
這邊的例子以上述的數學公式來計算。詞頻 (TF) 是一詞語出現的次數除以該文件的總詞語數。假如一篇文件的總詞語數是100個,而詞語“母牛”出現了3次,那麽“母牛”一詞在該文件中的詞頻就是3/100=0.03。一個計算文件頻率 (IDF) 的方法是文件集裏包含的文件總數除以測定有多少份文件出現過“母牛”一詞。所以,如果“母牛”一詞在1,000份文件出現過,而文件總數是10,000,000份的話,其逆向文件頻率就是 lg10,000,000 / 1,000)=4。最後的TF-IDF的分數為0.03 * 4=0.12。

(8)維度怎麽擴展?

比如時間,那我可能取分段區間。可能單取年份,可能取距離當今多久

(9)特征怎麽選擇?

確定方差最大化,或者通過分類,尋找特征差異最大化。其他就是有具體看業務,要跟業務相結合,有統計性的(比如用tfidf轉換行為軌跡),有直接性的(教育、性別等)

(11)分析原因,某產品6月份的平均日活率比7月多很多,請問你會從哪幾方面分析?

回答 思路+方法(以某個信用app為例)

1、活動原因

(1)分析參與活動的用戶的後續行為

(2)分析未參與活動的用戶的同一時間的行為

(3)對比以上兩數據趨勢,如果發現(1)和(2)有明顯不同的趨勢(如1驟降),那可能是活動的原因

2、功能改版

(1)與往期用量對比

3、當期貸款需求變化(不好定,需要專業分析)

4、歷史同期趨勢對比(多個因素組合,可能說服力不強,但是大致可以看下趨勢)

(12)隨機森林裏面用的哪種決策樹?

參數可選gini或者entropy,不用c4.5,因為會剪枝,隨機森林不需要剪枝
https://blog.csdn.net/zhixiongzhao/article/details/72487284

(18)對數據分析中關鍵指標的定義?

我回答:可解釋的指標都是可以的。比如:用戶網站點擊率,可以定義為單天的點擊次數,也可以定義為一個月的平均點擊次數,關鍵看可解釋業務性

(23)邏輯回歸與線性回歸的區別?

邏輯回歸:叠代求解

線性回歸:直接求解

(24)機器學習是方法,數據挖掘是應用

(27)最大似然估計和最小二乘法的區別

http://blog.csdn.net/lu597203933/article/details/45032607

(28)假設一個房間有5個嬰兒,性別2男3女,現在加入一個性別未知的嬰兒。此時從這6個嬰兒中,隨機抽取一個,發現是男孩子。問後來加入嬰兒性別是男孩子的概率多大?0.6

具體解題步驟之後會補上哦

(29)例如:一座別墅在過去的 20 年裏一共發生過 2 次被盜,別墅的主人有一條狗,狗平均每周晚上叫 3 次,在盜賊入侵時狗叫的概率被估計為 0.9,問題是:在狗叫的時候發生入侵的概率是多少?貝葉斯公式P(A∩B) = P(A)*P(B|A)=P(B)*P(A|B)。如上公式也可變形為:P(B|A) = P(A|B)*P(B) / P(A)。

我們假設 A 事件為狗在晚上叫,B 為盜賊入侵,則以天為單位統計,P(A) = 3/7,P(B) = 2/(20*365) = 2/7300,P(A|B) = 0.9,按照公式很容易得出結果:P(B|A) = 0.9*(2/7300) / (3/7) = 0.00058

(30)采用EM算法求解的模型有哪些?為什麽不用牛頓法或者梯度下降法?

一般有混合高斯、協同過濾、k-means。算法一定會收斂,但是可能會收斂到局部最優。求和的項數會隨著隱變量的數目指數上升,會給梯度計算帶來麻煩。EM算法是一種非梯度優化算法。

(31)用EM算法推導解釋K-means

k-means算法是高斯混合聚類在混合成分方差相等,且每個樣本僅指派一個混合成分時候的特例。k-means算法與EM算法的關系是這樣的:
· k-means是兩個步驟交替進行:確定中心點,對每個樣本選擇最近中心點--> E步和M步。
· E步中將每個點選擇最近的類優化目標函數,分給中心距它最近的類(硬分配),可以看成是EM算法中E步(軟分配)的近似。
· M步中更新每個類的中心點,可以認為是在「各類分布均為單位方差的高斯分布」的假設下,最大化似然值;

(32)如何進行特征選擇?

https://www.zhihu.com/question/28641663/answer/41653367

(33)SVM和LR的區別

http://blog.csdn.net/yan456jie/article/details/52524942

數據庫方面:

(6)有什麽sql調優的手段,了解多少

索引、條件先後等等,具體可自行百度sql調優方法

(10)sql,多個班級,取不同班級的每個班級的前3名(3次)

sql是rownumber:

select * from

(select row_number() over (partition by class order by score desc) 排名,* from sc) t

where 排名<=3 order by class asc,score desc

mysql用定義變量的方式:

SELECT * from (

SELECT @x:=if(b.cla=@y,@x+1,1) rn,@y:= b.cla , b.* from
(SELECT @x:=0,@y:=‘‘ )a
JOIN
(SELECT * from class order by cla,grade desc )b ) d where d.rn<4

(13)數據庫時間轉換函數

dataformat是時間轉字符串 unix_timestamp時間轉時間戳 str_to_date字符串轉時間 unix_timestamp字符串轉時間戳

(14)當出現數據重復時,用最簡單的方法查詢出哪些數據重復

數據量小時,group by count(1)大於1的
數據量大時,用rownumber(針對sql)

(15)什麽情況下索引會失效,假設字段A加了索引

只要索引的字段A不是 A >,<,=之類的,都會失效。比如兩個字段 A 和 B,A上有索引,查詢條件如果是 where A = < > XXX就不會失效,即失效的意思是不用索引,不是異常等問題。當然,還有別的,,,比如索引不能這麽寫 where B = xxx and A = 0,因為索引字段要優先被查找。(只有 [><]?= 這種模式)
而且>和<也只能在樹索引等有序索引上起作用,如果索引是hash索引,就只能用=

(16)三張表,查詢部門薪水最高的?

#方法一
SELECT dname,sum(salary) s from (
SELECT a.*,b.salary from (
SELECT n.id,n.name,d.dname from ntable n ,dtable d where n.dpid = d.did )a,stable b where a.id = b.id)c GROUP BY dname ORDER BY s desc
#方法二 left join
SELECT dname,sum(salary) s from (
SELECT n.id,n.name,d.dname,s.salary from ntable n LEFT JOIN dtable d on n.dpid = d.did LEFT JOIN stable s on n.id = s.id)
a GROUP BY dname ORDER BY s desc
或者
SELECT d.dname,sum(s.salary)s from ntable n LEFT JOIN dtable d on n.dpid = d.did LEFT JOIN stable s on n.id = s.id
GROUP BY d.dname ORDER BY s desc
#方法三 inner join
SELECT d.dname,sum(s.salary) s FROM (ntable n INNER JOIN dtable d ON n.dpid =d.did) INNER JOIN stable s ON n.id=s.id GROUP BY d.dname ORDER BY s desc
#方法四 join
SELECT d.dname,sum(s.salary) s FROM (ntable n JOIN dtable d ON n.dpid =d.did) JOIN stable s ON n.id=s.id GROUP BY d.dname ORDER BY s desc

(19)mysql 關於join的用法與區別(left join right join 等)

舉個例子說明區別就可以

(20)主鍵重復插入更新 replace into 或者on duplicate key update

https://www.cnblogs.com/chenmh/p/5392540.html

(21)數據庫的外建的作用是什麽?

聯表查詢

(22)什麽是左連接,右連接?

Left join right join,具體可自行百度

數倉方面:

(17)數倉的過程,了解數倉嗎?數倉用什麽搭建的?(2次)

關於數倉的問題,之後還會有個專題詳解哦

(25)Etl的緩慢數據維

http://blog.csdn.net/ye1142262478/article/details/58589078

數據開發方面:

(4)有序數組查找用什麽方法?

二分查找,時間復雜度log2n,(是以2為底,n的對數)

(5)list和tuple的區別

List是可變對象,tuple是不可變,tuple的性能好,效率高

(26)為什麽要使用裝飾器

http://python.jobbole.com/85393/

數據挖掘面試題(1)