机器学习面经
機器學習面經
1. 機器學習常見面試問題
- 算法要從以下幾個方面來掌握:
- 產生背景,適用場合(數據規模,特征維度,是否有 Online 算法,離散/連續特征處理等角度);
- 原理推導(最大間隔,軟間隔,對偶);
- 求解方法(隨機梯度下降、擬牛頓法等優化算法);
- 優缺點,相關改進;
- 和其他基本方法的對比;
1.1 各模型優缺點
SVM
特性:
- 非線性映射是SVM方法的理論基礎,SVM利用內積核函數代替向高維空間的非線性映射;
- 對特征空間劃分的最優超平面是SVM的目標,最大化分類邊際的思想是SVM方法的核心;
- 支持向量是SVM的訓練結果,在SVM分類決策中起決定作用的是支持向量;
- SVM 是一種有堅實理論基礎的新穎的小樣本學習方法。它基本上不涉及概率測度及大數定律,因此不同于現有的統計方法。從本質上看,它避開了從歸納到演繹的傳統過程,實現了高效的從訓練樣本到預報樣本的 “轉導推理”,大大簡化了通常的分類和回歸等問題。
- SVM 的最終決策函數只由少數的支持向量所確定,計算的復雜性取決于支持向量的數目,而不是樣本空間的維數,這在某種意義上避免了 “維數災難”。
- 少數支持向量決定了最終結果,這不但可以幫助我們抓住關鍵樣本、“剔除”大量冗余樣本,而且注定了該方法不但算法簡單,而且具有較好的“魯棒”性。這種“魯棒”性主要體現在:
a. 增、刪非支持向量樣本對模型沒有影響;
b. 支持向量樣本集具有一定的魯棒性;
c. 有些成功的應用中,SVM 方法對核的選取不敏感; - SVM學習問題可以表示為凸優化問題,因此可以利用已知的有效算法發現目標函數的全局最小值。而其他分類方法(如基于規則的分類器和人工神經網絡)都采用一種基于貪心學習的策略來搜索假設空間,這種方法一般只能獲得局部最優解。
- SVM通過最大化決策邊界的邊緣來控制模型的能力。盡管如此,用戶必須提供其他參數,如使用核函數類型和引入松弛變量等。
- SVM在小樣本訓練集上能夠得到比其它算法好很多的結果。支持向量機之所以成為目前最常用,效果最好的分類器之一,在于其優秀的泛化能力,這是是因為其本身的優化目標是結構化風險最小,而不是經驗風險最小,因此,通過margin的概念,得到對數據分布的結構化描述,因此減低了對數據規模和數據分布的要求。SVM也并不是在任何場景都比其他算法好,對于每種應用,最好嘗試多種算法,然后評估結果。如SVM在郵件分類上,還不如邏輯回歸、KNN、bayes的效果好。
- 它基于結構風險最小化原則,這樣就避免了過學習問題,泛化能力強。
- 它是一個凸優化問題,因此局部最優解一定是全局最優解的優點。
- 泛華錯誤率低,分類速度快,結果易解釋
不足:
- SVM算法對大規模訓練樣本難以實施
SVM的空間消耗主要是存儲訓練樣本和核矩陣,由于SVM是借助二次規劃來求解支持向量,而求解二次規劃將涉及 m 階矩陣的計算(m為樣本的個數),當 m 數目很大時該矩陣的存儲和計算將耗費大量的機器內存和運算時間。針對以上問題的主要改進有有J.Platt的SMO算法、T.Joachims的SVM、C.J.C.Burges等的PCGC、張學工的CSVM以及O.L.Mangasarian等的SOR算法。
如果數據量很大,SVM的訓練時間就會比較長,如垃圾郵件的分類檢測,沒有使用SVM分類器,而是使用了簡單的naive bayes分類器,或者是使用邏輯回歸模型分類。 - 用SVM解決多分類問題存在困難
經典的支持向量機算法只給出了二類分類的算法,而在數據挖掘的實際應用中,一般要解決多類的分類問題。可以通過多個二類支持向量機的組合來解決。主要有一對多組合模式、一對一組合模式和SVM決策樹;再就是通過構造多個分類器的組合來解決。主要原理是克服SVM固有的缺點,結合其他算法的優勢,解決多類問題的分類精度。如:與粗集理論結合,形成一種優勢互補的多類問題的組合分類器。 - 對缺失數據敏感,對參數和核函數的選擇敏感
支持向量機性能的優劣主要取決于核函數的選取,所以對于一個實際問題而言,如何根據實際的數據模型選擇合適的核函數從而構造SVM算法。目前比較成熟的核函數及其參數的選擇都是人為的,根據經驗來選取的,帶有一定的隨意性。在不同的問題領域,核函數應當具有不同的形式和參數,所以在選取時候應該將領域知識引入進來,但是目前還沒有好的方法來解決核函數的選取問題。 - 支持向量機的主要應用和研究的熱點
目前支持向量機主要應用在模式識別領域中的文本識別,中文分類,人臉識別等;同時也應用到許多的工程技術和信息過濾等方面。
當前研究的熱點主要是對支持向量機中算法的優化,包括解決SVM中二次規劃求解問題,對大規模SVM的求解問題,對SVM中QP問題的求解問題等,另外就是如何更好的構造基于SVM的多類分類器,如何提高SVM的歸納能力和分類速度等,如何根據實際問題確定核函數也是一個重要的研究熱點。
LR
優點
- 實現簡單,廣泛的應用于工業問題上;
- 分類時計算量非常小,速度很快,存儲資源低;
- 便利的觀測樣本概率分數;
- 對邏輯回歸而言,多重共線性并不是問題,它可以結合L2正則化來解決該問題;
不足
決策樹
優點
- 決策樹易于理解和實現. 人們在通過解釋后都有能力去理解決策樹所表達的意義。
- 需要準備的數據量不大,而其他的技術往往需要很大的數據集,需要創建虛擬變量,去除不完整的數據,但是該算法對于丟失的數據不能進行準確的預測
- 決策樹算法的時間復雜度(即預測數據)是用于訓練決策樹的數據點的對數
- 對于決策樹,數據的準備往往是簡單或者是不必要的。其他的技術往往要求先把數據一般化,比如去掉多余的或者空白的屬性。
- 能夠同時處理數據型和常規型屬性。其他的技術往往要求數據屬性的單一。
- 在相對短的時間內能夠對大型數據源做出可行且效果良好的結果。
- 對缺失值不敏感
- 可以處理不相關特征數據
- 效率高,決策樹只需要一次構建,反復使用,每一次預測的最大計算次數不超過決策樹的深度。
不足
1.2 過擬合原因
數據:數據不規范,數據量少,數據穿越,統計特征用到了未來的信息或者標簽信息
算法:算法過于復雜
解決:
1. 將數據規范化,處理缺失值,增加數據量,采樣,添加噪聲數據
2. 正則化,控制模型復雜程度
3. early stoping,減少迭代次數,減少樹的深度
4. 學習率調大/小點
5. 融合幾個模型
6. dropout、regularization、batch normalizatin
1.3 L1和L2的區別
L1范數相當于加入了一個Laplacean先驗;
L2范數相當于加入了一個Gaussian先驗。
L2對大數的懲罰更大,但是解相對來說比較均勻。
1.4 生成模型和判別模型區別
對于輸入x,類別標簽y:
生成式模型先求它們的聯合概率分布P(x,y)P(x,y),然后根據貝葉斯定理求 P(y|x)P(y|x)判別式模型直接求條件概率分布P(y|x)P(y|x)
常見的判別模型有:K近鄰、SVM、決策樹、感知機、線性判別分析(LDA)、線性回歸、傳統的神經網絡、邏輯斯蒂回歸、boosting、條件隨機場
- 常見的生成模型有:樸素貝葉斯、隱馬爾可夫模型、高斯混合模型、文檔主題生成模型(LDA)、限制玻爾茲曼機
1.5 SVM 算法
既希望松弛變量存在以解決異常點問題,又不希望松弛變量太大導致分類解決太差。
1.6 LR和SVM的聯系與區別
- 聯系:
- LR和SVM都可以處理分類問題,且一般都用于處理線性二分類問題(在改進的情況下可以處理多分類問題)
- 兩個方法都可以增加不同的正則化項,如 L1、L2 等等。所以在很多實驗中,兩種算法的結果是很接近的。
- 區別:
- LR是參數模型,SVM是非參數模型。
- 從目標函數來看,區別在于邏輯回歸采用的是 logistical loss,SVM采用的是 hinge loss。這兩個損失函數的目的都是增加對分類影響較大的數據點的權重,減少與分類關系較小的數據點的權重。
- SVM的處理方法是只考慮 support vectors,也就是和分類最相關的少數點,去學習分類器。而邏輯回歸通過非線性映射,大大減小了離分類平面較遠的點的權重,相對提升了與分類最相關的數據點的權重。
- 邏輯回歸相對來說模型更簡單,好理解,特別是大規模線性分類時比較方便。而SVM的理解和優化相對來說復雜一些,SVM轉化為對偶問題后,分類只需要計算與少數幾個支持向量的距離,這個在進行復雜核函數計算時優勢很明顯,能夠大大簡化模型和計算。
- LR 能做的 SVM 能做,但可能在準確率上有問題,SVM 能做的 LR 有的做不了。
1.7 RF GBDT XGBoost的區別與聯系
Gradient boosting(GB)
機器學習中的學習算法的目標是為了優化或者說最小化 Loss Function, Gradient boosting 的思想是迭代生多個(M個)弱的模型,然后將每個弱模型的預測結果相加,后面的模型 Fm+1(x)Fm+1(x) 基于前面學習模型的 Fm(x)Fm(x) 的效果生成的。Gradient boosting Decision Tree(GBDT)
GB 算法中最典型的基學習器是決策樹,尤其是 CART,正如名字的含義,GBDT是GB和DT的結合。要注意的是這里的決策樹是回歸樹,GBDT中的決策樹是個弱模型,深度較小一般不會超過5,葉子節點的數量也不會超過 10,對于生成的每棵決策樹乘上比較小的縮減系數(學習率 < 0.1),有些GBDT的實現加入了隨機抽樣(subsample0.5≤f≤0.8subsample0.5≤f≤0.8)提高模型的泛化能力。通過交叉驗證的方法選擇最優的參數。XGBoost
XGBoost是 GB 算法的高效實現,XGBoost中的基學習器除了可以是CART(GB tree)也可以是線性分類器(GB linear)。- XGBoost在目標函數中顯示的加上了正則化項,基學習為CART時,正則化項與樹的葉子節點的數量 TT 和葉子節點的值有關。
- GB中使用 Loss Function 對 f(x)f(x) 的一階導數計算出偽殘差用于學習生成 fm(x)fm(x),XGBoost 不僅使用到了一階導數,還使用二階導數。
上面提到 CART 回歸樹中尋找最佳分割點的衡量標準是最小化均方差,XGBoost 尋找分割點的標準是最大化,lamda,gama與正則化項相關。
XGBoost 算法的步驟和 GB 基本相同,都是首先初始化為一個常數,GB 是根據一階導數riri,XGBoost 是根據一階導數 gigi 和二階導數 hihi,迭代生成基學習器,相加更新學習器。
XGBoost 與 GBDT 除了上述三點的不同,XGBoost 在實現時還做了許多優化:
- 在尋找最佳分割點時,考慮傳統的枚舉每個特征的所有可能分割點的貪心法效率太低,XGBoost 實現了一種近似的算法。大致的思想是根據百分位法列舉幾個可能成為分割點的候選者,然后從候選者中根據上面求分割點的公式計算找出最佳的分割點。
- XGBoost 考慮了訓練數據為稀疏值的情況,可以為缺失值或者指定的值指定分支的默認方向,這能大大提升算法的效率,paper 提到50倍。 特征列排序后以塊的形式存儲在內存中,在迭代中可以重復使用;雖然 XGBoost 算法迭代必須串行,但是在處理每個特征列時可以做到并行。 按照特征列方式存儲能優化尋找最佳的分割點,但是當以行計算梯度數據時會導致內存的不連續訪問,嚴重時會導致 cache miss,降低算法效率。paper中提到,可先將數據收集到線程內部的buffer,然后再計算,提高算法的效率。
- xgboost 還考慮了當數據量比較大,內存不夠時怎么有效的使用磁盤,主要是結合多線程、數據壓縮、分片的方法,盡可能的提高算法的效率。
Random Forest:
bagging (原本叫Bootstrap aggregating)
bagging 的關鍵是重復的對經過 bootstrapped 采樣來的觀測集子集進行擬合。然后求平均。一個 bagged tree 充分利用近2/3的樣本集。所以就有了OOB預估(out of bag estimation)
學習隨機森林模型前,一定要先了解決策樹模型。樹越深,模型越復雜。
- 決策樹模型的優點如下:
- 容易理解和解釋,樹可以被可視化。
- 不需要太多的數據預處理工作,即不需要進行數據歸一化,創造啞變量等操作。
- 隱含地創造了多個聯合特征,并能夠解決非線性問題。
- 優點:
- 容易理解和解釋,樹可以被可視化。
- 不需要太多的數據預處理工作,即不需要進行數據歸一化,創造啞變量等操作。
- 隱含地創造了多個聯合特征,并能夠解決非線性問題。
- 和決策樹模型,GBDT模型相比,隨機森林模型不容易過擬合。
- 自帶out-of-bag (oob)錯誤評估功能。
- 易于并行化。
GBDT和隨機森林的相同點與不同點:
相同點:
- 都是由多棵樹組成
- 最終的結果都是由多棵樹一起決定
不同點:
XBGoost 比 GBDT 好的地方:
二階泰勒展開
節點分數懲罰
增益計算不同,GBDT 是 gini,XBGoost 是優化推導公式
XGBoost 泰勒展開的優勢
XGBoost 使用了一階和二階偏導, 二階導數有利于梯度下降的更快更準. 使用泰勒展開取得二階倒數形式, 可以在不選定損失函數具體形式的情況下用于算法優化分析.本質上也就把損失函數的選取和模型算法優化/參數選擇分開了. 這種去耦合增加了 XGBoost 的適用性。
1.8 優化算法及其優缺點
- 隨即梯度下降
- 優點:
- 可以一定程度上解決局部最優解的問題
- 優點:
- 缺點:
- 收斂速度較慢
- 優點:
- 容易陷入局部最優解
綜合隨即梯度下降和批量梯度下降的優缺點,提取的一個中和的方法。
- 優點:
- 缺點:
- 優點:
- 缺點:
啟發式的優化算法有遺傳算法,粒子群算法等。這類算法的主要思想就是設定一個目標函數,每次迭代根據相應的策略優化種群。直到滿足什么樣的條件為止。
1.9 梯度消失和梯度膨脹
梯度消失:
- 根據鏈式法則,如果每一層神經元對上一層的輸出的偏導乘上權重結果都小于1的話,那么即使這個結果是0.99,在經過足夠多層傳播之后,誤差對輸入層的偏導會趨于0
- 可以采用ReLU激活函數有效的解決梯度消失的情況
梯度膨脹:
- 根據鏈式法則,如果每一層神經元對上一層的輸出的偏導乘上權重結果都大于1的話,在經過足夠多層傳播之后,誤差對輸入層的偏導會趨于無窮大
- 可以通過激活函數來解決
1.20 歐氏距離與曼哈頓距離
- 歐氏距離,最常見的兩點之間或多點之間的距離表示法,又稱之為歐幾里得度量,它定義于歐幾里得空間中,對應于L2
- 曼哈頓距離,我們可以定義曼哈頓距離的正式意義為 L1-距離 或城市區塊距離,也就是在歐幾里得空間的固定直角坐標系上兩點所形成的線段對軸產生的投影的距離總和。
- 通俗來講,想象你在曼哈頓要從一個十字路口開車到另外一個十字路口,駕駛距離是兩點間的直線距離嗎?顯然不是,除非你能穿越大樓。而實際駕駛距離就是這個“曼哈頓距離”,這也是曼哈頓距離名稱的來源, 同時,曼哈頓距離也稱為城市街區距離(City Block distance)。
1.21 數據歸一化
歸一化為什么能提高梯度下降法求解最優解的速度?
當使用梯度下降法尋求最優解時,很有可能走“之字型”路線(垂直等高線走),從而導致需要迭代很多次才能收斂;
對原始特征進行了歸一化,其對應的等高線顯得很圓,在梯度下降進行求解時能較快的收斂。歸一化有可能提高精度
一些分類器需要計算樣本之間的距離(如歐氏距離),例如KNN。如果一個特征值域范圍非常大,那么距離計算就主要取決于這個特征,從而與實際情況相悖(比如這時實際情況是值域范圍小的特征更重要)。
1.22 邏輯斯特回歸為什么要對特征進行離散化
- 在工業界,很少直接將連續值作為邏輯回歸模型的特征輸入,而是將連續特征離散化為一系列 0、1 特征交給邏輯回歸模型,這樣做的優勢有以下幾點:
- 離散特征的增加和減少都很容易,易于模型的快速迭代;
- 稀疏向量內積乘法運算速度快,計算結果方便存儲,容易擴展;
- 離散化后的特征對異常數據有很強的魯棒性:比如一個特征是年齡>30是1,否則0。如果特征沒有離散化,一個異常數據“年齡300歲”會給模型造成很大的干擾;
- 邏輯回歸屬于廣義線性模型,表達能力受限;單變量離散化為N個后,每個變量有單獨的權重,相當于為模型引入了非線性,能夠提升模型表達能力,加大擬合;
- 離散化后可以進行特征交叉,由M+N個變量變為M*N個變量,進一步引入非線性,提升表達能力;
- 特征離散化后,模型會更穩定,比如如果對用戶年齡離散化,20-30作為一個區間,不會因為一個用戶年齡長了一歲就變成一個完全不同的人。當然處于區間相鄰處的樣本會剛好相反,所以怎么劃分區間是門學問;
- 特征離散化以后,起到了簡化了邏輯回歸模型的作用,降低了模型過擬合的風險。
1.23 XGBoost 和 GBDT 的區別
算法層面的:
- XGB加了正則項,普通GBDT沒有。為了防止過擬合
- XGBoost損失函數是誤差部分是二階泰勒展開,GBDT 是一階泰勒展開。因此損失函數近似的更精準。
- 對每顆子樹增加一個參數,使得每顆子樹的權重降低,防止過擬合,這個參數叫shrinkage對特征進行降采樣,靈感來源于隨機森林,除了能降低計算量外,還能防止過擬合。
- 實現了利用分捅/分位數方法,實現了全局和局部的近似分裂點算法,降低了計算量,并且在eps參數設置合理的情況下,能達到窮舉法幾乎一樣的性能
- 提出并實現了特征帶權重的分位數的方法(好像是用到rank 場景下的,沒太懂。。。)
- 增加處理缺失值的方案(通過枚舉所有缺失值在當前節點是進入左子樹,還是進入右子樹更優來決定一個處理缺失值默認的方向)。
系統層面:
- 對每個特征進行分塊(block)并排序,使得在尋找最佳分裂點的時候能夠并行化計算。這是xgboost比一般GBDT更快的一個重要原因。
- 通過設置合理的block的大小,充分利用了 CPU 緩存進行讀取加速(cache-aware access)。使得數據讀取的速度更快。因為太小的block的尺寸使得多線程中每個線程負載太小降低了并行效率。太大的block尺寸會導致CPU的緩存獲取miss掉。
- out-of-core 通過將block壓縮(block compressoin)并存儲到硬盤上,并且通過將block分區到多個硬盤上(block Sharding)實現了更大的IO 讀寫速度,因此,因為加入了硬盤存儲block讀寫的部分不僅僅使得xgboost處理大數據量的能力有所提升,并且通過提高IO的吞吐量使得xgboost相比一般實利用這種技術實現大數據計算的框架更快。
2. 機器學習、大數據面試經驗、答題思路
你在研究/項目/實習經歷中主要用過哪些機器學習/數據挖掘的算法?
A、最好是在項目/實習的大數據場景里用過,比如推薦里用過 CF、LR,分類里用過 SVM、GBDT
B、一般用法是什么,是不是自己實現的,有什么比較知名的實現,使用過程中踩過哪些坑
C、優缺點分析
你熟悉的機器學習/數據挖掘算法主要有哪些?
A、基礎算法要多說,其它算法要挑熟悉程度高的說,不光列舉算法,也適當說說應用場合;
B、面試官和你的研究方向可能不匹配,不過在基礎算法上你們還是有很多共同語言的,你說得太高大上可能效果并不好,一方面面試官還是要問基礎的,另一方面一旦面試官突發奇想讓你給他講解高大上的內容,而你只是泛泛的了解,那就傻叉了。
你用過哪些機器學習/數據挖掘工具或框架?
A、主流的分布式框架如 Hadoop,Spark,Graphlab,Parameter Server 等擇一或多使用了解;
B、通用算法包,如 mahout,scikit,weka 等;
C、專用算法包,如 OpenCV,theano,torch7,ICTCLAS 等。
基礎知識
A、無監督和有監督算法的區別?
B、SVM 的推導,特性?多分類怎么處理?
C、LR 的推導,特性?
D、決策樹的特性?
E、SVM、LR、決策樹的對比?
F、GBDT 和 決策森林 的區別?
G、如何判斷函數凸或非凸?
H、解釋對偶的概念。
I、如何進行特征選擇?
J、為什么會產生過擬合,有哪些方法可以預防或克服過擬合?
K、介紹卷積神經網絡,和 DBN 有什么區別?
L、采用 EM 算法求解的模型有哪些,為什么不用牛頓法或梯度下降法?
M、用 EM 算法推導解釋 Kmeans。
N、用過哪些聚類算法,解釋密度聚類算法。
O、聚類算法中的距離度量有哪些?
P、如何進行實體識別?
Q、解釋貝葉斯公式和樸素貝葉斯分類。
R、寫一個 Hadoop 版本的 wordcount。
開放問題
A、給你公司內部群組的聊天記錄,怎樣區分出主管和員工?
B、如何評估網站內容的真實性(針對代刷、作弊類)?
C、深度學習在推薦系統上可能有怎樣的發揮?
D、路段平均車速反映了路況,在道路上布控采集車輛速度,如何對路況做出合理估計?
E、采集數據中的異常值如何處理?
F、如何根據語料計算兩個詞詞義的相似度?
G、在百度貼吧里發布 APP 廣告,問推薦策略?
H、如何判斷自己實現的 LR、Kmeans 算法是否正確?
I、100億數字,怎么統計前100大的?
騰訊2017年春招內推面試(一)
1、詢問實驗室具體情況,偏向于做哪一塊;
2、分布式并行化的了解,sklearn庫的運用;
3、GBDT和隨機森林的區別;
4、模型的方法和偏差的區別;
5、ROC和AUC分別代表的是什么,ROC的取值范圍;(AUC是ROC下面的面積!!)
6、過擬合是怎么解決的(基本的算法、神經網絡的算法中)
7、神經網絡防治過擬合除了dropout還有什么方法;(early stopping,augmentation,正則化)
8、L1和L2產生的結果有什么區別;
9、神經網絡梯度消失的問題是怎么產生的;
10、深度學習平常有使用到嗎?(問得不深入)
11、文本的使用?(問得不深入)
12、spark的MLlib的使用過嗎?
13、PageRank的實現原理,大概思想?(網頁排序算法)
14、前面提到了有向圖,那么樹的葉子結點和邊結點有什么關系?(對于二叉樹來說,葉子結點和內部結點是什么關系,這個回答得不好)
15、什么是平衡二叉樹?什么是紅黑樹?紅黑樹有哪些實際應用場景呢?(回答了STL的兩個底層,實際場景沒有回答出來)
16、哈希沖突的解決方法?(開放定址法、鏈地址法,其它的沒有答出來)
17、布隆過濾器有沒有使用過?原理?(提示與哈希相關)
18、數據結構里堆的定義和,基本模型是怎樣的?時間復雜度是多少?(最大堆、最小堆)
19、Java和Python哪個用的比較多(答C++,面試官說做大數據C++用的不多吧)
20、設計模式了解過嗎?工廠模式主要解決什么問題?(答了一點,然后gg)
21、介紹了一下他們BG的主要工作(文章推薦、部落推薦、提升轉化、挖掘群用戶信息)
30.請簡要說說一個完整機器學習項目的流程
??@寒小陽、龍心塵
??1 抽象成數學問題
??明確問題是進行機器學習的第一步。機器學習的訓練過程通常都是一件非常耗時的事情,胡亂嘗試時間成本是非常高的。
??這里的抽象成數學問題,指的我們明確我們可以獲得什么樣的數據,目標是一個分類還是回歸或者是聚類的問題,如果都不是的話,如果劃歸為其中的某類問題。
??2 獲取數據
??數據決定了機器學習結果的上限,而算法只是盡可能逼近這個上限。
??數據要有代表性,否則必然會過擬合。
??而且對于分類問題,數據偏斜不能過于嚴重,不同類別的數據數量不要有數個數量級的差距。
??而且還要對數據的量級有一個評估,多少個樣本,多少個特征,可以估算出其對內存的消耗程度,判斷訓練過程中內存是否能夠放得下。如果放不下就得考慮改進算法或者使用一些降維的技巧了。如果數據量實在太大,那就要考慮分布式了。
??3 特征預處理與特征選擇
??良好的數據要能夠提取出良好的特征才能真正發揮效力。
特征預處理、數據清洗是很關鍵的步驟,往往能夠使得算法的效果和性能得到顯著提高。歸一化、離散化、因子化、缺失值處理、去除共線性等,數據挖掘過程中很多時間就花在它們上面。這些工作簡單可復制,收益穩定可預期,是機器學習的基礎必備步驟。
??篩選出顯著特征、摒棄非顯著特征,需要機器學習工程師反復理解業務。這對很多結果有決定性的影響。特征選擇好了,非常簡單的算法也能得出良好、穩定的結果。這需要運用特征有效性分析的相關技術,如相關系數、卡方檢驗、平均互信息、條件熵、后驗概率、邏輯回歸權重等方法。
??4 訓練模型與調優
??直到這一步才用到我們上面說的算法進行訓練。現在很多算法都能夠封裝成黑盒供人使用。但是真正考驗水平的是調整這些算法的(超)參數,使得結果變得更加優良。這需要我們對算法的原理有深入的理解。理解越深入,就越能發現問題的癥結,提出良好的調優方案。
??5 模型診斷
??如何確定模型調優的方向與思路呢?這就需要對模型進行診斷的技術。
過擬合、欠擬合 判斷是模型診斷中至關重要的一步。常見的方法如交叉驗證,繪制學習曲線等。過擬合的基本調優思路是增加數據量,降低模型復雜度。欠擬合的基本調優思路是提高特征數量和質量,增加模型復雜度。
??誤差分析 也是機器學習至關重要的步驟。通過觀察誤差樣本,全面分析誤差產生誤差的原因:是參數的問題還是算法選擇的問題,是特征的問題還是數據本身的問題……
診斷后的模型需要進行調優,調優后的新模型需要重新進行診斷,這是一個反復迭代不斷逼近的過程,需要不斷地嘗試, 進而達到最優狀態。
??6 模型融合
??一般來說,模型融合后都能使得效果有一定提升。而且效果很好。
工程上,主要提升算法準確度的方法是分別在模型的前端(特征清洗和預處理,不同的采樣模式)與后端(模型融合)上下功夫。因為他們比較標準可復制,效果比較穩定。而直接調參的工作不會很多,畢竟大量數據訓練起來太慢了,而且效果難以保證。
??7 上線運行
??這一部分內容主要跟工程實現的相關性比較大。工程上是結果導向,模型在線上運行的效果直接決定模型的成敗。 不單純包括其準確程度、誤差等情況,還包括其運行的速度(時間復雜度)、資源消耗程度(空間復雜度)、穩定性是否可接受。
??這些工作流程主要是工程實踐上總結出的一些經驗。并不是每個項目都包含完整的一個流程。這里的部分只是一個指導性的說明,只有大家自己多實踐,多積累項目經驗,才會有自己更深刻的認識。
總結
- 上一篇: VS2013 工具包修复记录
- 下一篇: SpringBoot时间戳与MySql数