1. 程式人生 > >【秋招】騰訊_資料分析崗_面試題整理

【秋招】騰訊_資料分析崗_面試題整理

1. 二叉樹題目

2. 層序遍歷演算法題

    1)由頂向下逐層訪問

    2)可以用佇列儲存樹,每次列印根節點並將左右節點放進佇列

3. 圖論中的最大團、連通分量,然後問圖劃分的演算法

4. 如何判斷社群活躍度(基於圖),現在想著可能是根據連通分量吧

略。

5. 給定相鄰兩個節點的相似度,怎麼計算該點到其它點的相似度

    1)把這個問題看成多維尺度分析問題(MDS),那麼實際上就是已知點之間的距離,構造一個空間Z,使得這個空間內點之間的距離儘可能保持接近。點在新空間Z中的向量化就是點的表示,然後點到點的距離就可以。

    2)其它:已知節點間距離,將節點embedding。這裡我不太懂,希望大家有思路的可以指點下,謝啦

    3)上訴兩個答案也可能是我沒看懂題意,因為該題的上下文是做複雜網路相關的研究。那麼可能是知道任意兩個相鄰節點的相似度,求非相鄰節點的相似度。這裡可以參考simRank演算法,即兩個點的鄰域越相似(有很多相似鄰居),那麼兩個點越相似。有點像pageRank,是一個迭代的定義。

6. 給一堆學生的成績,將相同學生的所有成績求平均值並排序,讓我用我熟悉的語言,我就用了python的字典+sorted,面試官說不準用sort,然後問會別的排序,我就說了氣泡排序,原理我說了,然後問我還知道其他排序,答堆排序(其實我之前這方面複習了很多),之後問我有沒有實現過(這個問題簡直就是我的死角,就是沒實現過,所以才想找個實習練練啊)

    1)python直接pandas下groupby studentID sort

    2)實現排序演算法

7. 問了我機器學習熟悉的演算法,答svm,講一下原理

    1)一種分類方法,找到一個分類的超平面,將正負例分離,並讓分類間隔儘可能大

    2)過程:

        a. 線性svm:損失函式如下

        b. 對偶學習問題

        c. 核函式:為了實現非線性分類,可以將樣本對映到高維平面,然後用超平面分割。為了減少高維平面計算內積的操作,可以用一些“偷吃步”的方法同時進行高維對映和內積計算,就是核函式。包括多項式核函式、高斯核函式和sigmoid核函式

        d. soft kernel

    3)優點:

        a. 容易抓住特徵和目標之間的非線性關係

        b. 避免陷入區域性解,泛化能力強

        c. 可以解決小樣本高維問題(如文字分類)

        d. 分類時只用到了支援向量,泛化能力強

    4)缺點:

        a. 訓練時的計算複雜度高

        b. 核函式選擇沒有通用方案

        c. 對缺失資料敏感

8. c中struct的對齊,我這個真的沒聽過,面試官讓我之後自己查

    為了提高儲存器的訪問效率,避免讀一個成員資料訪問多次儲存器,作業系統對基本資料型別的合法地址做了限制,要求某種型別物件的地址必須是某個值K的整數倍(K=2或4或8)

    1)Windows給出的對齊要求是:任何K(K=2或4或8)位元組的基本物件的地址都必須是K的整數倍

    2)Linux的對齊要求是:2位元組型別的資料(如short)的起始地址必須是2的整數倍,而較大(int *,int double ,long)的資料型別的地址必須是4的整數倍

9. 機器學習被調資料分析了,因為做推薦的,所以面試一直在聊具體場景的推薦方法,其他方面知識沒有怎麼問

略。

10. 梯度下降和極大似然

    1)梯度下降:

        a. 是解決優化問題的一種方法,較適合於凸函式的優化,可以找到極值(極小值和極大值)

        b. 對於某個引數,計算損失函式對該引數的偏導,該偏導即為下降方向。然後引數沿著該方向更新一個步長(學習率)

    c. 迭代直到滿足迭代次數或者引數不再變化

    d. 包括梯度下降、隨機梯度下降、mini-batch梯度下降

    e. 只用到了一階導資訊,用牛頓法可以引入二階導數資訊

    f. 梯度下降有效性的證明:用泰勒展開看

    2)極大似然估計:

        a. 思想:事件概率A與一個引數θ有關,我們觀察到一系列事件,那麼此時θ的取值應該是能使P(A|θ)最大的那個值。

        b. 過程:

            (1)寫出似然函式

            (2)我們求解的目標是使似然函式最大

            (3)因為是乘法問題,一般log化變成加法問題求解。即對要求的引數θ求偏導,令其為0

11. 特徵選擇的方法

    1)過濾:計算特徵與標籤之間的卡方、互資訊、相關係數(只能識別線性關係),過濾掉取值較低的特徵。或者使用樹模型建模,通過樹模型的importance進行選擇(包括包外樣本檢驗平均不純度、特徵使用次數等方法)

    2)包裹:認為特徵間的交叉也包含重要資訊,因此計算特徵子集的效果

    3)嵌入法:L1正則化可以將不重要的特徵降到0、樹模型抽取特徵

    4)降維:PCA、LDA等

12. GBDT和xgboost,bagging和boosting

    12.1 GBDT

    1)首先介紹Adaboost Tree,是一種boosting的樹整合方法。基本思路是依次訓練多棵樹,每棵樹訓練時對分錯的樣本進行加權。樹模型中對樣本的加權實際是對樣本取樣機率的加權,在進行有放回抽樣時,分錯的樣本更有可能被抽到

    2)GBDT是Adaboost Tree的改進,每棵樹都是CART(分類迴歸樹),樹在葉節點輸出的是一個數值,分類誤差就是真實值減去葉節點的輸出值,得到殘差。GBDT要做的就是使用梯度下降的方法減少分類誤差值

    在GBDT的迭代中,假設我們前一輪迭代得到的強學習器是ft−1(x), 損失函式是L(y,ft−1(x)), 我們本輪迭代的目標是找到一個CART迴歸樹模型的弱學習器ht(x),讓本輪的損失損失L(y,ft(x)=L(y,ft−1(x)+ht(x))最小。也就是說,本輪迭代找到決策樹,要讓樣本的損失儘量變得更小。

    GBDT的思想可以用一個通俗的例子解釋,假如有個人30歲,我們首先用20歲去擬合,發現損失有10歲,這時我們用6歲去擬合剩下的損失,發現差距還有4歲,第三輪我們用3歲擬合剩下的差距,差距就只有一歲了。如果我們的迭代輪數還沒有完,可以繼續迭代下面,每一輪迭代,擬合的歲數誤差都會減小。

    3)得到多棵樹後,根據每顆樹的分類誤差進行加權投票

    12.2 xgboost

    xgb也是一種梯度提升樹,是gbdt高效實現,差異是:

    1)gbdt優化時只用到了一階導數資訊,xgb對代價函式做了二階泰勒展開。(為什麼使用二階泰勒展開?我這裡認為是使精度更高收斂速度更快,參考李巨集毅的《機器學習》課程,對損失函式使用泰勒一次展開是梯度下降,而進行更多次展開能有更高的精度。但感覺還不完全正確,比如為什麼不三次四次,比如引進二次導會不會帶來計算開銷的增加,歡迎大家討論指正。)

    2)xgb加入了正則項

    3)xgb執行完一次迭代後,會對葉子節點的權重乘上shrinkage(縮減)係數,削弱當前樹的影響,讓後面有更大的學習空間

    4)支援列抽樣等特性

    5)支援並行:決策樹中對特徵值進行排序以選擇分割點是耗時操作,xgb訓練之前就先對資料進行排序,儲存為block結構,後續迭代中重複用該結構,大大減少計算量。同時各個特徵增益的計算也可以開多執行緒進行

    6)尋找最佳分割點時,實現了一種近似貪心法,同時優化了對稀疏資料、缺失值的處理,提高了演算法效率

    7)剪枝:GBDT遇到負損失時回停止分裂,是貪心演算法。xgb會分裂到指定最大深度,然後再剪枝

    12.3 bagging

    1)是一種自舉聚合的方法,隨機有放回地從樣本內抽樣構造分類器,然後多個分類器投票得到最終結果

    2)可以降低方差,用於減少過擬合

    3)常見的隨機森林是bagging方法的應用

    4)是並行的

    5)最終投票一般是一個分類器一票

    12.4 boosting

    1)是一種將弱分類器組合起來形成強分類器的框架,序列結構,後一個分類器根據前一個分類器得到的資訊進行重新訓練,不斷推進得到更好的模型

    2)常見的boost方法有:

        a. Adaboost:對每一次分類錯誤的樣本進行加權,讓下一個分類器更關心這些分錯的樣本

        b. gbdt:每一個分類器都是cart樹,輸出的是分為正類的score。真實值減去score得到殘差,下一棵樹對殘差進行訓練。通過這種方法不斷縮小對真實值差距

    3)可以降低偏差,提高模型的表達能力,減少欠擬合

    4)常見的有Adaboost和GBDT等

    5)是序列的

    6)一般是按照每個分類器的分類正確率進行加權投票

13. 過擬合的解決辦法

    1)增加資料

    2)正則項

    3)early stopping

    4)控制模型複雜度:

        a. dropout(我覺得類似於subfeature)

        b. 剪枝、控制樹深

        c. 增大分割平面間隔

    5)bagging

    6)subsampe & subfeature

    7)特徵選擇、特徵降維

    8)資料增強(加包含噪聲的資料)

    9)ensemble

(參考林軒田的《機器學習技法》)

14. 50億個url,找出指定的一個url

    50億個的話是雜湊查詢,考慮到數量比較大會有衝突問題,那麼可以用布隆過濾器。缺點還是會有誤判,把不屬於該集合的認為屬於。

15. CNN和LSTM原理和應用場景介紹

    1)CNN原理:

        a. 在原始圖片上滑動視窗,將取值乘以卷積核進行特徵對映,然後作為神經網路的資料。卷積核實際上是利用了先驗的知識,“圖片中距離較近的畫素才能提供資訊,距離較遠的畫素關係不大”。通過卷積核對圖片中的一些特徵進行抽取,如垂直、水平等

        b. pooling:取視窗內的max或者avg,丟棄資訊較少的數值

        c. padding:補全,避免圖片越抽取越小

    2)CNN應用:

        a. 圖片分類等與圖片有關的問題(影象識別、影象標註、影象主題生成、物體標註、視訊分類等)(利用CNN抽取圖片特徵的能力)

        b. 自然語言處理(實體抽取、關係抽取、問答系統、機器翻譯)(將詞用詞向量表示,因此變成二維結構資料)

    3)LSTM原理:

        a. RNN(Recurrent Neural Network)能夠把上一個時間的資訊記憶,缺點是如果相隔太遠聯絡就很弱了

        b. LSTM(Long-Short Term Memory)在RNN的神經元中加入了一些元件,控制長短期的記憶。元件包括:

            (1) 輸入層門:將新的資訊記錄到細胞狀態中

            (2) 輸出層門:將前面的資訊儲存到隱藏層中

            (3) 忘記門:將細胞中的資訊選擇性遺忘(他今天有事,所以我。。。當處理到‘’我‘’的時候選擇性的忘記前面的’他’,或者說減小這個詞對後面詞的作用。)

    4)LSTM應用:

        a. 自然語言類:機器翻譯、線上問答、情感分析

        b. 圖片類:手寫文字、圖片內容理解

        c. 音訊類:語音識別

16. 為什麼正則化能處理過擬合

    1)懲罰了模型的複雜度,避免模型過度學習訓練集,提高泛化能力

    2)剃刀原理:如果兩個理論都能解釋一件事情,那麼較為簡單的理論往往是正確的

    3)正則項降低了每一次係數w更新的步伐,使引數更小,模型更簡單

    4)貝葉斯學派的觀點,認為加入了先驗分佈(l1拉普拉斯分佈,l2高斯分佈),減少引數的選擇空間

17. 騰訊視訊和優酷的區別

略。

18. 幾大常用檢驗方法與比較

    1)兩樣本均值:t檢驗(樣本量少)、u檢驗(樣本量大)

    2)多樣本均值:F檢驗(方差齊性檢驗)、方差分析

    3)兩樣本事件發生頻數是否關聯:卡方檢驗、秩和檢驗(有序多組多分類)、二項分佈檢驗

    4)序列自相關:DW檢驗、ADF檢驗

    5)面板資料檢驗:F檢驗、H檢驗

    6)相關性分析、迴歸分析這些算麼?

19. KMP演算法

    1)目標是做字串匹配,將時間複雜度從O(m*n)降為O(m+n)

    2)思想:利用了目標字串內部的重複性,使比較時實現最大的移動量

    3)方法:

        a. 計算next[i]:表示字串第1至i-1個字元的子串中,字首字尾最長重複個數

        b. 對比主串s和目標字串ptr。當相等時,i和j都+1;當不相等時,j更新為next[j]。

20. 哈夫曼編碼

    1)一種編碼方式,讓出現次數越多的字元編碼越短,從而壓縮編碼的長度

    2)過程:

        a. 建立一個加權樹,出現次數越多的字元出現在越上層

        b. 左連線為0,右連線為1

        c. 到達字元的01組合記為該字元的編碼

        d. 由於哈夫曼編碼是字首編碼(如果沒有一個編碼是另一個編碼的字首,則稱這樣的編碼為字首編碼。如0,101和100是字首編碼),因此可以唯一地還原

21. 給出一個商業業務例子,這個例子中使用模型會比資料查詢和簡單的統計分析更有效果

    1)推薦演算法

    2)異常值檢測

    3)精準營銷

    4)信貸發放

    ......

22. 了不瞭解mapreduce

略。

23. 資料庫熟練程度

略。

24. 平時看什麼書

略。

25. 偏差和方差

    1)偏差:預測值與真實值差異,偏差大表示欠擬合。然後引申到計算方式和解決方法

    2)方差:預測值與均值的波動,方差大表示過擬合。然後引申到計算方式和解決方法

26. 有一個類似抖音的app,請你設計推薦演算法

    1)定義目標(評估函式):點贊率、停留時間、下滑概率等

    2)資料:

        a. 使用者屬性

        b. 視訊屬性

        c. 使用者-視訊行為日誌

    3)方法:

        a. 資訊流產品的特徵是內容更新快,因此如果採用協同過濾的話用基於人的協同過濾會比較合適

        b. 如果還是接受不了基於人的協同過濾的更新速度(比如說使用者增長特別快),對於分類問題建立機器學習模型,輸出的是使用者對每個視訊點選可能性的score,本質上還是一個ctr預估問題

        c. 特徵包括:使用者屬性、視訊屬性、統計特徵、時間特徵、使用者id-視訊id交叉項、使用者向量資訊、視訊向量資訊(用SVD、word2vec、fm、基於圖的隨機遊走都可以)、短期行為

        d. 注意1:降低訓練成本,如先粗略計算使用者對視訊的響應概率,只取頭部做召回。然後對召回的視訊再做排序等

        e. 注意2:需要能線上學習,使用者點選後能對視訊進行快速重排序。因此需要支援線上學習的模型,如lr、搖臂老虎機框架等,樹模型在這裡可能就不適用了

        f. 注意3:冷啟動問題

            (1)使用者冷啟動:使用者進來時根據使用者屬性對熱門的內容進行匹配,找到使用者可能最感興趣的內容

            (2)內容冷啟動:這裡首先要涉及到視訊資訊的標註,除了上傳者資訊、視訊標題和標籤,還需要一些視訊理解的演算法,為視訊打標籤。然後計算視訊之間的相似程度,找到這一類視訊的高響應使用者,一定概率向其投放,統計點選率情況,判斷是否進一步擴大投放量。

27. 一個線段上任意取兩點,能組成三角形的概率

    1)設線段長度為1,三個子線段長度為x1,x2,x3

    2)根據三角形兩邊之和大於第三邊,可得:

            a. x1+x2>x3

            b. x1-x2<x3

            c. x2-x1<x3

            d. x1+x2+x3=1

    3)將x3=1-x1-x2帶入abc,然後用x1、x2為軸繪製,可以得到有效面積為1/8

28. 有uid,app名稱,app類別,資料百億級別,設計演算法算出每個app類別只安裝了一個app的uid總數。

    應該用map reduce吧,但我不會啊。準備寫個sql,結果寫了半天還是寫不出。面試完走到樓下就想出來了,233

    1)小資料量的話直接查詢:

        select count(*) as result from

        (select uid, category, count(app) as c from table

        group by category having c = 1) as t

        group by t.uid having count(category) = 類別數

    2)大資料量下(沒用過hadoop不太清楚,望大家指正)

        a. 原始檔案可以拼接為uid-app-categroy

        b. map階段形成的<k,v>是<uid-category,1>

        c. reduce階段統計key為“uid-category”的count數量

        d. 只保留count為1的資料

        e. 剩下的資料量直接統計uid出現次數=category類別數的資料

29. 有一個網頁訪問的資料,包含uid,ip地址,url,文章資料。設計演算法預測使用者性別

    1)分類問題用機器學習方法解(這裡假設已經有部分使用者的性別標籤)

    2)想到的特徵有:

        a. 文件主題詞(top3)

        c. ip地址

        d. url中引數(如網頁搜尋中的query)

        e. 統計特徵:訪問數量、單頁面平局訪問時間、上網時間等

筆試題

1、對於過擬合有什麼方法處理

    見上文。

2、氣泡排序

    1)時間複雜度O(n)到O(n²)

    2)穩定排序

3、排列組合

    略。

4、大數定律和切比雪夫不等式的式子

    方差越大,X落在區間外的概率越大,X的波動也就越大。

5、迴歸係數的計算

    略。

6、鞍點的Hessian矩陣是否正定

    半正定,含有0特徵值。

7、快速排序的最佳狀況

    O(nlogn)

8、對於svm,梯度消失怎麼在影象上判定

    不懂。

9、超參不敏感

    見下文,有詳細題目。

10、分層抽樣的適用範圍

    略。

11、貝葉斯公式

    略。

12、高數裡的一些求導的知識

    略。

13、線性代數裡的秩、克萊姆法則

    1)向量組中的秩,就是極大線性無關向量組中的向量個數

    2)我們可以認為一個矩陣的秩,是給矩陣按質量排序的依據。

    秩越高的矩陣內容越豐富,冗餘資訊越少。秩越低的矩陣廢資料越多。

(知乎 @苗加加)

14、推導迴歸係數的過程

15、深度優先遍歷

    1)圖的深度優先遍歷:

        a. 首先以一個未被訪問過的頂點作為起始頂點,沿當前頂點的邊走到未訪問過的頂點;

        b. 當沒有未訪問過的頂點時,則回到上一個頂點,繼續試探別的頂點,直到所有的頂點都被訪問過

    2)二叉樹的深度優先遍歷:實際就是前序遍歷

解答題:

1、解釋機器學習中的偏差和方差,對不同的情況應該採取什麼樣的措施?

    見上文。

2、描述假設檢驗的過程

    1)設定原假設H0,備擇假設H1(一般我們的研究假設是H1)

    2)選定檢驗方法

    3)計算觀測到的數值分分佈,如果實際觀察發生的是小概率事件,並且超過顯著性水平,那麼認為可以排除原假設H0

3、如果微信有一個功能是使用者的位置資訊能夠每隔1分鐘上傳一次資料庫,那麼怎麼發揮它的作用?

略。

筆試題

1.深度學習,訓練集誤差不斷變小,測試集誤差變大,要怎麼做(ACD)

A 資料增強 B 增加網路深度 C提前停止訓練 D增加 dropout

2. 鞍點的Hessian矩陣是?

半正定。

3.快排的時間複雜度

O(nlogn)

4 哪個sigmoid函式梯度消失最快?是零點處導數最大的還是最小的?

零點處導數最大。

5. 5 7 0 9 2 3 1 4 做氣泡排序的交換次數?

16?

6. 哪種優化方法對超引數不敏感?(C)

SGD BGD Adadelta Momentum

1)SGD受到學習率α影響

2)BGD受到batch規模m影響

3)Adagrad的一大優勢時可以避免手動調節學習率,比如設定初始的預設學習率為0.01,然後就不管它,另其在學習的過程中自己變化。

為了避免削弱單調猛烈下降的減少學習率,Adadelta產生了1。Adadelta限制把歷史梯度累積視窗限制到固定的尺寸w,而不是累加所有的梯度平方和

4)Momentum:也受到學習率α的影響