数据挖掘实习
原文:http://aleeee.com/category/it/interview
百度數據挖掘實習工程師一、二現場面試(深圳)
一面
項目
詳細介紹項目。
現場手寫代碼
- 字符串反轉
- 快排
Python
- 如何提高Python的運行效率
- 寫一個簡單的正則匹配表達式(將文本中的123.4匹配出來)
機器學習
- KNN(分類與回歸)
- CART(回歸樹用平方誤差最小化準則,分類樹用基尼指數最小化準則)
- Logistics(推導)
- GBDT(利用損失函數的負梯度在當前模型的值作為回歸問題提升樹算法中的殘差的近似值,擬合一個回歸樹)
- 隨機森林(Bagging+CART)
- SVM與隨機森林比較
- 改變隨機森林的訓練樣本數據量,是否會影響到隨機森林學習到的模型的復雜度
- Logistics與隨機森林比較
- GBDT與隨機森林比較
- 自己實現過什么機器學習算法
- 推薦算法(基于用戶的協同過濾,基于內容的協同過濾)
- 如何做一個新聞推薦
?
其他
- Map-reduce,Hadoop
- 一個袋子里有很多種顏色的球,其中抽紅球的概率為1/4,現在有放回地抽10個球,其中7個球為紅球的概率是多少?(伯努利試驗)
二面
項目
- 詳細介紹項目
- 從項目中在哪一方面體會最深
- 自己項目中有哪些可以遷移到其他領域的東西
- 除了老師的科研課題,是否有做過其他項目
數據結構
- 介紹大頂堆和小頂堆
- 二叉樹的前中后遍歷
- 手寫二叉樹前序遞歸遍歷算法(千萬不要忘記異常處理!)
- 介紹二叉樹前序遍歷非遞歸遍歷算法
編程語言
Python
- list有哪幾種添加元素的方法,能否從表頭插入元素?(append, extend和insert, insert能從表頭插入元素, 但是時間復雜度為O(n).)
- 如何獲取list中最后一個元素
- a = [1, 2, 3, 4], b = a, b[0] = 100, 請問print(a)結果是什么
- list是怎樣實現的
C++
- char a[4] = {1, 2, 3, 4}; char *b = a; b[0] = 100;?請問輸出a的結果是什么?
- STL中vector是怎樣實現的
- 是否有用C++寫過實際的工程項目
總結
一,二面從下午3點一直到5點半,所以題目就記下一部分。感覺百度的要求挺高的,既要理論知識到位,還要寫代碼熟練,對底層、效率等方面也需要有一定的了解,編程方面比較看重C++。
?
百度NLP電面總結(數據挖掘)
編程基礎
C++
- const
- 虛函數:虛函數是C++中用于實現多態(polymorphism)的機制。核心理念就是通過基類訪問派生類定義的函數。
Python
- 常用的數據結構及應用場景(list,dict,tuple)
?
統計知識
給定一個分類器p,它有0.5的概率輸出1,0.5的概率輸出0。
-
Q1:如何生成一個分類器使該分類器輸出1的概率為0.25,輸出0的概率為0.75??Ans:連續進行兩次分類,兩次結果均為1則輸出1,其余情況(10,01,00)均輸出0。
-
Q2:如何生成一個分類器使該分類器輸出1的概率為0.3,輸出0的概率為0.7??Tip:小明正在做一道選擇題,問題只有A、B和C三個選項,通過拋一個硬幣來使選擇3個選項的概率相同。小明只需拋連續拋兩次硬幣,結果正正為A,正負為B,負正為C,負負則重新拋硬幣。?Ans:連續進行4次分類(2^4=16 > 10),結果前3種情況則輸出1,結果接下來7種情況則輸出0,其余情況重新進行分類。
工程應用問題
-
Q1:給定一個1T的單詞文件,文件中每一行為一個單詞,單詞無序且有重復,當前有5臺計算機。請問如何高效地利用5臺計算機完成文件詞頻統計工作??Ans(有問題的):將1T文件切分為5份,分配給5臺計算機。每臺計算機進行詞頻統計工作,輸出一個結果為{單詞:頻數}的字典結果文件。將5臺計算機生成的5個結果文件合并。
-
Q2:每臺計算機需要計算200G左右的文件,內存無法存放200G內容,那么如何統計這些文件的詞頻??Ans(不是最優):首先將文件排序,然后遍歷利用list存儲結果即可。(不能用字典,因為200G統計出來的結果會很大,沒有那么大的內存存放字典。由于經過排序操作,遍歷存儲并不會使結果丟失,所以用list存儲結果即可,每當一個list即將占滿內存,則將其寫入文件,然后清空list繼續存儲結果。)
-
Q3:如何將1T的文件均勻地分配給5臺機器,且每臺機器統計完詞頻生成的文件只需要拼接起來即可(即每臺機器統計的單詞不出現在其他機器中)?Ans1(不是很好):對1T文件中的單詞進行抽樣,獲得其概率分布,遍歷文件,然后根據首字母的概率均勻分配至5臺計算機,如a到e的概率均為0.04, 0.04*5=0.2,則將所有以a-e的單詞放入第1臺計算機,若z的概率為0.2,則把所有以z開頭的單詞放入第5臺計算機。缺點:不具有可擴展性,如果有100臺計算機,那么可能就需要2個字母計算了,則程序就要改變。還有可能出現2臺機器中有相同的單詞。Ans2(不是最優):遍歷文件,對于每一個單詞,獲得單詞中各字母的ASCII碼值,然后將ASCII值之和取余。則每臺機器中的單詞必定是不一樣。
總結
百度NLP部門電面考的基礎很多,但是關于機器學習、數據挖掘方面的知識一個都沒有問,坑爹啊!!!虧我準備了好久關于機器學習方面(特別是SVM,隨機森林和AdaBoost)的東西!!!所以即使是投遞機器學習、數據挖掘和自然語言處理相關的崗位,關于編程基礎(C/C++)和算法還是得準備。
?
阿里巴巴電話面試2面總結_數據挖掘工程師(天貓事業部)
項目相關
- 介紹項目
- 項目相比別人有什么優劣
- 項目的數據從哪里來
- 項目的特征向量的歸一化與異常處理
- 項目的下載量
- 目前在研究什么
- 參加天貓大數據推薦算法成績
機器學習
- 線性分類器與非線性分類器的區別及優劣;
- 特征比數據量還大時,選擇什么樣的分類器?
- 對于維度很高的特征,你是選擇線性還是非線性分類器?
- 對于維度極低的特征,你是選擇線性還是非線性分類器?
- 如何解決過擬合問題?
- L1和L2正則的區別,如何選擇L1和L2正則?
- 隨機森林的學習過程;
- 隨機森林中的每一棵樹是如何學習的;
- 隨機森林學習算法中CART樹的基尼指數是什么?
算法
- 如何找到第k大的數?
?
總結
機器學習知識中問的很細,不僅需要考慮算法本身,還需要考慮應用。
?
LibSVM簡易入門要點備忘
SVM
?
數據預處理
類別特征
使用m個數字來代表一個m類屬性,且m個數字中只有1個為1,其余均為0。例如,一個三類別屬性紅、綠、藍,可以用(0,0,1),(0,1,0)和(1,0,0)表示。只要數值不是太大,這種編碼方式比單個數字更健壯。
Scaling
Scaling的主要優勢是避免大數值屬性主導小數值屬性,另外一個優勢是避免計算中的數值困難。因為Kernel值通常依賴于特征向量的內積,例如對于linear kernel和polynomial kernel,大的屬性值將會造成數值問題。推薦將每個屬性值范圍放縮到[-1, +1]或者[0, 1]。 另外特別注意,訓練集和測試集要用相同的放縮方法。
模型選擇
RBF Kernel
交叉驗證和Grid-Search
RBF kernel有2個參數:C和gamma。The parameter C, common to all SVM kernels, trades off misclassification of training examples against simplicity of the decision surface. A low C makes the decision surface smooth, while a high C aims at classifying all training examples correctly. the gamma parameter defines how far the influence of a single training example reaches, with low values meaning ‘far’ and high values meaning ‘close’. A low C makes the decision surface smooth, while a high C aims at classifying all training examples correctly. (摘自scikit-learn Parameters of the RBF Kernel,RBF SVM parameters。個人粗暴理解:C則是分類器判錯的懲罰權重,C越大,判錯懲罰越大,越擬合,但容易過擬合;C越小,判錯懲罰越小,分界超平面越平滑,但容易欠擬合。gamma影響一個單個的訓練實例徑向的范圍,gamma越小,范圍越大,gamma越大,范圍越小。所以越小的C,決策面越平滑,gamma越大,旨在能夠正確分類所有的訓練實例。) 而Grid-Search則為C和gamma參數尋優的一種方法,推薦使用交叉驗證對C和gamma進行Grid-Search。由于Grid-Search非常耗時,推薦先進行粗略地Grid-Search,然后對于某個區域進行詳細的Grid-Search,從而節省時間。另外對于非常多的數據,可以先隨機抽取出整個數據集的子集,然后子集進行Grid-Search,找到好的范圍,在這個好的范圍內對整個數據集進行Grid-Search。
如何選擇Linear和RBF kernel
前提:只有在找到最優的C和gamma參數條件下,RBF kernel的效果才可能和Linear kernel效果相當或者更好。
實例數量遠小于特征數量
如果特征數量很多,我們可能不需要將輸入空間轉換到一個更高維的空間就能擬合訓練數據。也就是說,非線性轉換并不能明顯提升效果。那么使用Linear kernel就足夠了,而且只需要尋一個最優參數C。
實例數量和特征數量都很大
當然選Linear Kernel啦,因為特征數量足夠多保證Linear kernel效果并不差,而對于實例數量很多,Linear kernel比RBF效率高很多。
實例數量遠大于特征數量
當特征數量很少時,將原來的輸入空間轉換到一個更高維的特征空間就顯得非常必要了(如使用非線性kernel),這樣能更好地擬合訓練數據。所以可以考慮使用RBF kernel,因為它擬合的效果很強大,而使用Linear kernel可能會造成欠擬合情況。
另外,如果要用Linear kernel,LibLinear軟件要比LibSVM軟件效率高很多。
參考文獻:
1.?A Practical Guide to Support Vector Classification
2.?Scikit-Learn RBF parameter
轉載于:https://www.cnblogs.com/zhizhan/p/4550019.html
總結
- 上一篇: JQuery中serialize()、s
- 下一篇: LeetCode:Two Sum