僞代碼實現:LR、梯度降低、最小二乘、KNN、Kmeans;html
LR,SVM,XGBOOST推公式(手推)java
LR,SVM,RF,KNN,EM,Adaboost,PageRank,GBDT,Xgboost,HMM,DNN,推薦算法,聚類算法,等等機器學習領域的算法node
基本知識:面試
是否有監督(supervised),就看輸入數據是否有標籤(label)。輸入數據有標籤,則爲有監督學習,沒標籤則爲無監督學習。算法
半監督學習:綜合利用有類標的數據和沒有類標的數據,來生成合適的分類函數。利用少許標註樣本和大量未標註樣本進行機器學習,從機率學習角度可理解爲研究如何利用訓練樣本的輸入邊緣機率 P( x )和條件輸出機率P ( y | x )的聯繫設計具備良好性能的分類器。數據庫
(核心:L2對大數,對outlier離羣點更敏感!)編程
降低速度:最小化權值參數L1比L2變化的快數組
模型空間的限制:L1會產生稀疏 L2不會。瀏覽器
L1會趨向於產生少許的特徵,而其餘的特徵都是0,而L2會選擇更多的特徵,這些特徵都會接近於0。微信
監督學習分爲生成模型和判別模型。
生成模型:由數據學習聯合機率分佈,而後求出條件機率分佈做爲預測的模型。給定x產生出y的生成關係。
eg:樸素貝葉斯、隱馬爾科夫
判別模型:由數據直接學習決策函數或者條件機率分佈做爲預測模型。給定x應該預測什麼樣的輸出y。
eg:KNN、感知機、決策樹、邏輯斯蒂迴歸、最大熵、svm、提高方法、條件隨機場
算法的優缺點以及相應解決方案:k-means, KNN, apriori
算法原理:LR、KNN、k-means、apriori、ID3(C45,CART)、SVM、神經網絡,協同過濾,em算法
常見問題:
一、間隔最大的分離超平面
二、min 2/|w| st yi(wi+b)>=1
三、拉格朗日乘子法算凸二次規劃
對偶 max(a)min(w,b)L(w,b,a)
w b
四、f=sign(wx+b)
C間隔(C>0)-間隔越大 錯誤分類懲罰大 間隔越小 對錯誤分類懲罰小
調整C正則化特徵
泛化能力強
2)神經網絡參數相關。好比,參數的範圍?如何防止過擬合?隱藏層點的個數多了怎樣少了怎樣?什麼狀況下參數是負數?
初始權重 -0.5-0.5 0-1
隱藏節點個數
傳輸函數
學習速率(太大不穩定 過小太慢)
減小隱藏節點個數
多了過擬合
不起做用??
邏輯迴歸的優勢:
1.實現簡單;
2.分類計算量小、速度快,存儲資源低
缺點:
一、容易欠擬合,通常準確度不過高
二、只能處理兩分類問題(在此基礎上衍生出來的softmax能夠用於多分類),且必須線性可分;
ID3 信息增益
C4.5 信息增益率
CART 基尼係數(二叉樹)
P(Y|X)=P(X,Y)/P(X)=(P(X|Y)*P(Y))/P(X) –經過樸素貝葉斯條件獨立展開
P(A|B)=P(B|A)*P(A)/P(B)
對於給出的待分類項,求解在此項出現的條件下各個目標類別出現的機率,哪一個最大,就認爲此待分類項屬於哪一個類別
在SVM的應用中,徑向基函數就是指高斯核函數;
exp(-(x-c)^2/r^2) r方差c均值 svm裏面 c爲xj
見上
特徵選擇、生成樹、剪枝 if-then規則
SVM算法優勢:
可用於線性/非線性分類,也能夠用於迴歸;
低泛化偏差;
容易解釋;
缺點:
對參數和核函數的選擇比較敏感;
原始的SVM只比較擅長處理二分類問題;
輸入x
用戶特徵
人口屬性如年齡、性別、收入;興趣標籤;歷史點擊率
廣告特徵
廣告類別、廣告id、廣告主id、行業、素材圖像特徵等
上下文特徵
廣告位、地域、時間、操做系統、瀏覽器等
輸出(h(x))
用戶是否會點擊某個廣告(點擊的機率是多大)
特徵處理-離散化-交叉特徵-歸一-onehot
用戶->從廣告集合裏規則抽取部分->ctr預估這部分廣告
目標->準則->方案
構建對比較矩陣(某一準則比重)
排序計算方案權重
買鋼筆->價格外觀質量->可供選擇的筆
一、掃描數據庫一遍,獲得頻繁項的集合F和每一個頻繁項的支持度。把F按支持度遞降排序。
二、構造原始FPTree 以null爲根 順序插入
三、構建頻繁項集。同一個頻繁項在PF樹中的全部節點的祖先路徑的集合。
好比I3在FP樹中一共出現了3次,其祖先路徑分別是{I2,I1:2(頻度爲2)},{I2:2}和{I1:2}。這3個祖先路徑的集合就是頻繁項I3的條件模式基。
簡化模型-正則化係數
見上
隨機森林是有不少隨機得決策樹構成,它們之間沒有關聯。獲得RF之後,在預測時分別對每個決策樹進行判斷,最後使用Bagging的思想進行結果的輸出
學習過程:
如今有N個訓練樣本,每一個樣本的特徵爲M個,須要建K顆樹
1從N個訓練樣本中有放回的取N個樣本做爲一組訓練集(其他未取到的樣本做爲預測分類,評估其偏差)
2從M個特徵中取m個特徵左右子集特徵(m<M)
決策樹
變量的不肯定性
迭代
初始K箇中心點(第二次開始使用上次生成的中心點)
map計算每一個樣本距離那個近 輸出 中心 樣本
reduce 計算每一個簇的新的中心點 知足中止條件中止 不知足輸出 新中心點
1/2(h(x)-y)求偏導
Bagging
從N樣本中有放回的採樣N個樣本
對這N個樣本在全屬性上創建分類器(CART,SVM)
重複上面的步驟,創建m個分類器
預測的時候使用投票的方法獲得結果
Boosting
boosting在訓練的時候會給樣本加一個權重,而後使loss function儘可能去考慮那些分錯類的樣本(好比給分錯類的樣本的權重值加大)
線性分類器:模型是參數的線性函數,分類平面是(超)平面;
非線性分類器:模型分界面能夠是曲面或者超平面的組合。 能夠解決線性不可分問題(異或問題)
典型的線性分類器有感知機,LDA,邏輯斯特迴歸,SVM(線性核);
典型的非線性分類器有kNN,決策樹,SVM(非線性核)
樸素貝葉斯(有文章說這個本質是線性的, http://dataunion.org/12344.html )
map-每一個map的cleanup()輸出topk
reduce-彙總map topk
HDFS+MapReduce
MapReduce提供Partitioner接口,它的做用就是根據key或value及reduce的數量來決定當前的這對輸出數據最終應該交由哪一個reduce task處理,默認對key hash後再以reduce task數量取模。
Shuffle在map端的過程:一、輸入數據通過mapper輸出key-value對 2通過分區操做、內存的排序、每一個分組合並操做
Shuffle在reduce端的過程:1Copy map結果過程 2 Merge階段 3生成Reducer的輸入文件
splitSize不小於minSize以及不大於blockSiz,若是map任務的文件分割大小splitSize超過blockSize,那麼每一個map任務可能須要跨多個datanode獲取文件,會致使額外增長網絡開銷,由於一般一個map會被分配在該文件所在的datanode上運行,這樣本地讀取文件,則不須要網絡開銷。mapper函數對block的每行數據進行處理
1.增長reduce 的jvm內存 單個值有大量記錄的不適用
2.增長reduce 個數 單個值有大量記錄的不適用 惟一值較多的適用(某些reduce分配了多個較多記錄)
3.明白數據傾斜的分佈本身實現分區
4.單獨處理傾斜數據-實現新的key使不傾斜 特定狀況特殊分析
reduce side join-跨機器傳輸數據量大
map同時讀取兩個文件File1和File2 標籤來自文件1仍是文件2
reduce函數獲取key相同的來自File1和File2文件的value list進行join(笛卡爾乘積)
map side join- 小表連大表
小表複製到每一個map task
map掃描大表 在hash table中查找是否有相同的key的記錄鏈接輸出
SemiJoin-半鏈接優化reduce side join
File1的join的key抽出放入內存中File3(較小)
map期間File2在File3的進行reduce不在的跳過(減小了map端的輸出)
動態規劃:待求解的問題分解爲若干個子階段(下一階段須要上一階段結果)
初始狀態→│決策1│→│決策2│→…→│決策n│→結束狀態
1)問題的階段
2)每一個階段的狀態
3)從前一個階段轉化到後一個階段之間的遞推關係。
樹結構
class TreeNode{
int value;
TreeNode left;
TreeNode right;
}
鏈表結構
每一個節點Node都有一個值val和指向下個節點的連接next
class Node {
int val;
Node next;
Node(int x) {
val = x;
next = null;
}
}
泛化偏差界的公式爲:
R(w)≤Remp(w)+Ф(n/h)
公式中R(w)就是真實風險,Remp(w)就是經驗風險(分類器在給定樣本上的偏差),Ф(n/h)就是置信風險(多大程度上能夠信任分類器在未知數據上分類的結果)。
統計學習的目標從經驗風險最小化變爲了尋求經驗風險與置信風險的和最小,即結構風險最小。
SVM正是這樣一種努力最小化結構風險的算法。
SVM算法要求的樣本數是相對比較少的(小樣本,並非說樣本的絕對數量少)
非線性,是指SVM擅長應付樣本數據線性不可分的狀況,主要經過鬆弛變量(也有人叫懲罰變量)和核函數技術來實現
硬間隔支持向量機(線性分類器)
軟間隔支持向量機(線性分類器)
非線性支持向量機(核技巧與軟間隔最大化)
線性可分:線性核函數
線性不可分:選擇非線性核函數:多項式核函數、高斯核函數、拉普拉斯核函數、sigmoid核函數
PageRank兩個基本假設:
1.數量假設:入鏈數量越多,那麼這個頁面越重要。
2.質量假設:越是質量高的頁面指向頁面A,則頁面A越重要。
利用以上兩個假設,PageRank算法剛開始賦予每一個網頁相同的重要性得分,經過迭代遞歸計算來更新每一個頁面節點的PageRank得分,直到得分穩定爲止。
步驟以下:
1)在初始階段:網頁經過連接關係構建起Web圖,每一個頁面設置相同的PageRank值,經過若干輪的計算,會獲得每一個頁面所得到的最終PageRank值。隨着每一輪的計算進行,網頁當前的PageRank值會不斷獲得更新。
2)在一輪中更新頁面PageRank得分的計算方法:在一輪更新頁面PageRank得分的計算中,每一個頁面將其當前的PageRank值平均分配到本頁面包含的出鏈上,這樣每一個連接即得到了相應的權值。而每一個頁面將全部指向本頁面的入鏈所傳入的權值求和,便可獲得新的PageRank得分。當每一個頁面都得到了更新後的PageRank值,就完成了一輪PageRank計算。
優勢:
是一個與查詢無關的靜態算法,全部網頁的PageRank值經過離線計算得到;有效減小在線查詢時的計算量,極大下降了查詢響應時間。
缺點:
1)人們的查詢具備主題特徵,PageRank忽略了主題相關性,致使結果的相關性和主題性下降
2)舊的頁面等級會比新頁面高。由於即便是很是好的新頁面也不會有不少上游連接,除非它是某個站點的子站點。
http://blog.csdn.net/hguisu/article/details/7996185ROC曲線AUC爲ROC曲線下的面積 越大分類越準
ROC曲線
橫軸:負正類率FPR FP / (FP+TN=N) 直觀解釋:實際是0負中,錯猜多少
縱軸:真正類率TPR TP / (TP+FN=P) 直觀解釋:實際是1正的中,猜對多少
auc的直觀含義是任意取一個正樣本和負樣本,正樣本得分大於負樣本的機率。
分類器能輸出score:
1.先把score排序一邊掃描一邊計算AUC近似的認爲是一個一個矩形面積累加(階梯狀的)計算麻煩
2.統計一下全部的 M×N(M爲正類樣本的數目,N爲負類樣本的數目)個正負樣本對中,有多少個組中的正樣本的score大於負樣本的score。當二元組中正負樣本的 score相等的時候,按照0.5計算。而後除以MN。實現這個方法的複雜度爲O(n^2)。n爲樣本數(即n=M+N)
3.對score從大到小排序,最大score對應的sample 的rank爲n,第二大score對應sample的rank爲n-1,以此類推
而後把全部的正類樣本的rank相加,再減去正類樣本的score爲最小的那M個值的狀況。獲得的就是全部的樣本中有多少對正類樣本的score大於負類樣本的score。而後再除以M×N。即
AUC=((全部的正例位置相加)-(M*(M+1)/2))/(M*N)
http://blog.csdn.net/pzy20062141/article/details/48711355傳統GBDT以CART做爲基分類器,xgboost還支持線性分類器,這個時候xgboost至關於帶L1和L2正則化項的邏輯斯蒂迴歸(分類問題)或者線性迴歸(迴歸問題)。
傳統GBDT在優化時只用到一階導數信息,xgboost則對代價函數進行了二階泰勒展開,同時用到了一階和二階導數。順便提一下,xgboost工具支持自定義代價函數,只要函數可一階和二階求導。
xgboost在代價函數里加入了正則項,用於控制模型的複雜度。正則項裏包含了樹的葉子節點個數、每一個葉子節點上輸出的score的L2模的平方和。從Bias-variance tradeoff角度來說,正則項下降了模型的variance,使學習出來的模型更加簡單,防止過擬合,這也是xgboost優於傳統GBDT的一個特性。
Shrinkage(縮減),至關於學習速率(xgboost中的eta)。xgboost在進行完一次迭代後,會將葉子節點的權重乘上該係數,主要是爲了削弱每棵樹的影響,讓後面有更大的學習空間。實際應用中,通常把eta設置得小一點,而後迭代次數設置得大一點。(補充:傳統GBDT的實現也有學習速率)
列抽樣(column subsampling)。xgboost借鑑了隨機森林的作法,支持列抽樣,不只能下降過擬合,還能減小計算,這也是xgboost異於傳統gbdt的一個特性。
對缺失值的處理。對於特徵的值有缺失的樣本,xgboost能夠自動學習出它的分裂方向。
xgboost工具支持並行。boosting不是一種串行的結構嗎?怎麼並行的?注意xgboost的並行不是tree粒度的並行,xgboost也是一次迭代完才能進行下一次迭代的(第t次迭代的代價函數裏包含了前面t-1次迭代的預測值)。xgboost的並行是在特徵粒度上的。咱們知道,決策樹的學習最耗時的一個步驟就是對特徵的值進行排序(由於要肯定最佳分割點),xgboost在訓練以前,預先對數據進行了排序,而後保存爲block結構,後面的迭代中重複地使用這個結構,大大減少計算量。這個block結構也使得並行成爲了可能,在進行節點的分裂時,須要計算每一個特徵的增益,最終選增益最大的那個特徵去作分裂,那麼各個特徵的增益計算就能夠開多線程進行。
可並行的近似直方圖算法。樹節點在進行分裂時,咱們須要計算每一個特徵的每一個分割點對應的增益,即用貪心法枚舉全部可能的分割點。當數據沒法一次載入內存或者在分佈式狀況下,貪心算法效率就會變得很低,因此xgboost還提出了一種可並行的近似直方圖算法,用於高效地生成候選的分割點。
https://www.zhihu.com/question/41354392/answer/128008021?group_id=773629156532445184標準化
數據歸一化規範化Normalization
特徵二值化Binarization
類別數據編碼 OneHot 編碼
標籤二值化
類別編碼
生成多項式特徵
我的理解是按照不一樣的思路來組合基礎模型,在保證準確度的同時也提高了模型防止過擬合的能力。針對弱學習器(泛化能力弱)效果明顯,個體學習器知足:1好而不一樣,具備多樣性2不能太壞
Boosting(串行-減小誤差)
Bagging(並行-減小方差)
Stacking
不一樣模型之間有差別,體現不一樣表達能力
KD樹,聚類,hash
散列分治:大文件散列映射多個小文件-小文件top-合併大文件top堆排序/快排
找出5億個int型數的中位數:
首先將這5億個int型數劃分爲2^16個區域,而後讀取數據統計落到各個區域裏的數的個數,根據統計結果就能夠判斷中位數落到哪一個區域,並知道這個區域中的第幾大數恰好是中位數。而後,第二次掃描只統計落在這個區域中的那些數就能夠了。
http://www.epubit.com.cn/article/290目的是它可以讓它符合咱們所作的假設,使咱們可以在已有理論上對其分析
LR更適合處理稀疏數據
邏輯迴歸屬於廣義線性模型,表達能力受限;單變量離散化爲N個後,每一個變量有單獨的權重,至關於爲模型引入了非線性,可以提高模型表達能力,加大擬合;(啞變量)
特徵離散化之後,起到了簡化了邏輯迴歸模型的做用,下降了模型過擬合的風險。
反正這些基本都是加強了特徵的表達能力,或者說更容易線性可分吧
算法的思想是設定兩個指針p, q,其中p每次向前移動一步,q每次向前移動兩步。那麼若是單鏈表存在環,則p和q相遇;不然q將首先遇到null。
(p和q同時在操場跑步,其中q的速度是p的兩倍,當他們兩個同時出發時,p跑一圈到達起點,而q此時也剛 好跑完兩圈到達起點。)
http://www.cnblogs.com/chengyeliang/p/4454290.html從大數據中找出topk
http://www.epubit.com.cn/article/290http://blog.csdn.net/google19890102/article/details/50522945 http://blog.csdn.net/shenxiaoming77/article/details/51614601
http://www.tuicool.com/articles/EfInM3Q
經過一趟排序將要排序的數據分割成獨立的兩部分,其中一部分的全部數據都比另一部分的全部數據都要小,而後再按此方法對這兩部分數據分別進行快速排序
能夠開始尋找比6小的數從右往左找第二次比較,此次要變成找比k大的了,並且要從前日後找
全部元素比基準值小的擺放在基準前面,全部元素比基準值大的擺在基準的後面(相同的數能夠到任一邊)。在這個分區退出以後,該基準就處於數列的中間位置
歸併操做(merge),也叫歸併算法,指的是將兩個順序序列合併成一個順序序列的方法。
第一次歸併後:{6,202},{100,301},{8,38},{1},比較次數:3;
第二次歸併後:{6,100,202,301},{1,8,38},比較次數:4;
堆其實是一棵徹底二叉樹
即任何一非葉節點的關鍵字不大於或者不小於其左右孩子節點的關鍵字。
即每次調整都是從父節點、左孩子節點、右孩子節點三者中選擇最大者跟父節點進行交換
先將序列的第1個記錄當作是一個有序的子序列,而後從第2個記錄逐個進行插入,直至整個序列有序爲止O(n^2).
插入排序—希爾排序
選擇一個增量序列
按增量序列個數k,對序列進行k 趟排序;
自上而下對相鄰的兩個數依次進行比較和調整,讓較大的數往下沉,較小的往上冒
把數據分組,放在一個個的桶中,而後對每一個桶裏面的在進行排序。
能夠把桶設爲大小爲10的範圍 算hash值分桶
對A[1..n]從頭至尾掃描一遍,把每一個A[i]放入對應的桶B[j]中
再對這100個桶中每一個桶裏的數字排序,這時可用冒泡,選擇,乃至快排
最後,依次輸出每一個桶裏面的數字,且每一個桶中的數字從小到大輸出,這 樣就獲得全部數字排好序的一個序列了。
Java虛擬機運行時數據區分爲如下幾個部分:
方法區、Java棧、Java堆、程序計數器。
程序計數器CPU必須具備某些手段來肯定下一條指令的地址使其保持的老是將要執行的下一條指令的地址 用來計數的,指示指令在存儲器的存放位置,也就是個地址信息
Java棧
線程私有 保存一個方法的局部變量、操做數棧、常量池指針
方法區
保存裝載的類信息 類型的常量池 方法信息
Java堆
Java堆是全部線程共享的存放對象實例被成爲GC堆 應用系統對象都保存在Java堆中
標記清除–首先經過根節點,標記全部從根節點開始的可達對象未被標記的對象就是未被引用的垃圾對象。而後,在清除階段,清除全部未被標記的對象。
標記壓縮–將全部的存活對象壓縮到內存的一端。以後,清理邊界外全部的空間。
複製算法–將原有的內存空間分爲兩塊,每次只使用其中一塊,在垃圾回收時,將正在使用的內存中的存活對象複製到未使用的內存塊中,以後,清除正在使用的內存塊中的全部對象,交換兩個內存的角色,完成垃圾回收
分代思想
依據對象的存活週期進行分類,短命對象歸爲新生代,長命對象歸爲老年代。
根據不一樣代的特色,選取合適的收集算法
少許對象存活,適合複製算法
大量對象存活,適合標記清理或者標記壓縮
java基礎
線程進程共享內存
一個進程中能夠包含若干個線程 進程做爲分配資源的基本單位 進程間相互獨立 進程在執行過程當中擁有獨立的內存單元
線程做爲獨立運行和獨立調度的基本單位
子進程和父進程有不一樣的代碼和數據空間,而多個線程則共享數據空間
操做系統的設計,所以能夠歸結爲三點:
(1)以多進程形式,容許多個任務同時運行;
(2)以多線程形式,容許單個任務分紅不一樣的部分運行;
(3)提供協調機制,一方面防止進程之間和線程之間產生衝突,另外一方面容許進程之間和線程之間共享資源。
sma[t]= mean(ts[1:t])
wma[t]= sum( ts[(t-k+1):t] * weight )
k期移動平均法(簡單移動平均法的優化,取最近K期的均值)
kwma[t]= mean(ts[(t-k+1):t])
ewma[t]= a*ts[t] + (1-a)*ewma[t-1]
當時間數列無明顯的趨勢變化,可用一次指數平滑預測。
二次指數平滑預測
二次指數平滑是對一次指數平滑的再平滑。它適用於具線性趨勢的時間數列。
三次指數平滑預測
三次指數平滑預測是二次平滑基礎上的再平滑。
它們的基本思想都是:預測值是之前觀測值的加權和,且對不一樣的數據給予不一樣的權,新數據給較大的權,舊數據給較小的權。
reduce side join 重分區鏈接 reduce端鏈接
map函數同時讀取兩個文件File1和File2對每條數據打一個標籤(tag)
在reduce階段,reduce函數獲取key相同的來自File1和File2文件的value list, 而後對於同一個key,對File1和File2中的數據進行join
map side join 小表連大表
Semi Join 半鏈接 另外一個map端鏈接 鏈接的數據集中有一個數據集很是大,但同時這個數據集能夠被過濾成小到能夠放在內存中。
File1,將其參與join的key抽取出來,保存到文件File3 將File2中不在File3中的key對應的記錄過濾掉,剩下的reduce階段的工做與reduce side join相同
int值排序
int+出現次數
hive
spark
RDD做爲數據結構,本質上是一個只讀的分區記錄集合
數據分區的集合,能根據本地性快速訪問到數據的偏好位置,依賴關係,計算方法,是不是哈希/範圍分區的元數據
1 0 3 1 6
4 8 7 9 5
4 6
K V
1 1 a 1 1 a第一行 b第一列 a矩陣 a第一列 值
1 2 a 1 1 a第一行 b第二列 a矩陣 a第一列 值
1 1 a 3 3 a第一行 b第一列 a矩陣 a第三列 值
1 2 a 3 3 a第一行 b第二列 a矩陣 a第三列 值
把要乘的數放在一塊兒
mahout推薦
協同過濾
基於物品推薦
創建物品的同現矩陣-AB物品同時出現的次數
創建用戶對物品的評分矩陣
同現矩陣X評分矩陣=物品推薦分數
優化:壓縮輸出文件、合併小文件har 讀入多個文件做爲一條input
自定義排序 自定義分組 自定義分區
top k 有序樹
問企業公司專一於哪裏學習哪方面知識
面試結果
面積經驗
1.國內互聯網公司和國外FLAGS的面試有很大不一樣,前者重視項目、實習經驗、專業積累,後者看重的是你聰不聰明與編程題刷得多很少。在求職開始的時候內心得有個譜,合理分配時間、精力,並理性看待本身掛了筆試或面試。
2.簡歷講究簡單粗暴有逼格,簡歷包含聯繫方式、教育背景、實習經歷、項目介紹、牛逼的榮譽、崗位相關的技能就好,謂之簡單粗暴,有逼格則指的是實習、項目多用數字量化描述,省去敘事的過程,結果導向。還有一點經驗,能夠適當裝逼,但不能裝逼得超過可掌控範圍。
投簡歷的時候,多走內推渠道,省去大部分筆試或者電話面試,不吃力又討好。內推渠道有如下幾種,我按照靠譜程度排個序:1) 總監如下的內部技術員工 2) HR 3)總監以上的高管 4)北郵人論壇 5)Linked In 6)知乎 7)NLP job 8)微信公衆號。1)和2)是比較靠譜的,3)~7)只能做爲備胎。還有一個非主流但頗有效的捷徑是參加企業舉辦的比賽並取得好名次。
面試時要抓住提問環節問一些實質性的問題,好比具體的技術問題、部門組織架構、部門戰略地位、之後的工做團隊、對我的的定位、KPI怎樣給出等,尤以部門組織架構、戰略地位、團隊這類大又可說的問題最佳。京東面試官給我講了百度架構部門的痛點,在以後的面試中我就常常和麪試官聊關於架構部門和業務部門的話題,學到不少,大局觀也慢慢改善。
5.在精力容許的狀況下多面,多拿offer,一方面漲見識、談資,一方面在談理想公司的offer時能爭取到更好的薪資待遇。
1.筆試題
- 在互聯網分析中,一般會關注用戶的【第N日激活率】來衡量用戶質量。用戶的第N日激活指的是用戶在註冊的第N天登陸網站或App,即算爲該用戶的第N日激活。第N日激活率指的是某日註冊用戶在第N天激活的數量除以該日全部註冊用戶數量。
「赤兔」是領英中國針對中國職場人士推出的一款本土化的社交應用。若是你是領英中國的數據分析師,你會從哪些方面和維度來設計各項指標,給產品的設計和運營提供數據上的支持?請給出具體的維度和指標,並說明緣由。
- 網易遊戲的一道筆試題是給定一條包含3個join的SQL語句,要求寫代碼模擬實現SQL的功能。
2.編程題
- 最少時間複雜度求數組中第k大的數,寫code
- 去除字符串S1中的字符使得最終的字符串S2不包含’ab’和’c’,寫code
- 長度爲N的序列Sequence=abc….Z,問有多少不一樣的二叉樹形態中序遍歷是這個,寫遞推公式
- 給定整數n和m,問能不能找出整數x,使得x之後的全部整數均可以由整數n和m組合而成
- 中序遍歷二叉樹,利用O(1)空間統計遍歷的每一個節點的層次,寫bug free的code
- 排序二叉樹轉雙向鏈表
- 一個運算序列只有+、*、數字,計算運算序列的結果
3.機器學習&數據挖掘問題
- L1和L2正則項 >> 它們間的比較
- 各個模型的Loss function,牛頓學習法、SGD如何訓練
-介紹LR、RF、GBDT ,分析它們的優缺點,是否寫過它們的分佈式代碼
- 介紹SVD、SVD++
- 是否瞭解線性加權、bagging、boosting、cascade等模型融合方式
- 推薦系統的冷啓動問題如何解決
- 是否瞭解A/B Test以及A/B Test結果的置信度
- 特徵工程經驗
- 是否瞭解mutual infomation、chi-square、LR先後向、樹模型等特徵選擇方式
4.解決方案類題目
- 爲今日頭條設計一個熱門評論系統,支持實時更新
給定淘寶上同類目同價格範圍的兩個商品A和B,如何利用淘寶已有的用戶、商品數據、搜索數據、評論數據、用戶行爲數據等全部能拿到的數據進行建模,判斷A和B統計平均性價比高低。統計平均性價比的衡量標準是大量曝光,購買者多則高。
- 有n個elements和1個Compare(A, B)函數,用Compare函數做爲排序算法中的比較算子給elements排序。Compare函數有p的可能比較錯。排序完取Top m個元素,原本就在Top m並被正確分在Top m的元素個數是x。問x的數學指望。
- 如何預測雙十一支付寶的負載峯值。