【面試】面試常見問題整理

weixin_34007886發表於2018-03-13
  1. LR和SVM的區別

相同點:
1、都是監督、分類演算法,且一般處理二分類問題
2、兩個方法都可以增加不同的正則化項,如l1、l2等等
3、都是判別模型
3、如果不考慮核函式,LR和SVM都是線性分類演算法。也就是說他們的分類決策面都是線性的。

不同點:
1、損失函式不同:LR用似然函式;SVM用合頁損失函式。
這兩個損失函式的目的都是增加對分類影響較大的資料點的權重,減少與分類關係較小的資料點的權重
2、SVM只考慮支援向量,也就是和分類最相關的少數點。而邏輯迴歸通過非線性對映,大大減小了離分類平面較遠的點的權重,相對提升了與分類最相關的資料點的權重。所以, 線性SVM不直接依賴於資料分佈,分類平面不受一類點影響;LR則受所有資料點的影響,如果資料不同類別strongly unbalance,一般需要先對資料做balancing。
3、在解決非線性問題時,支援向量機採用核函式的機制,而LR通常不採用核函式的方法,做特徵。因為SVM只有少數幾個點運算,LR要全部(計算量)
4、Linear SVM依賴資料表達的距離測度,所以需要對資料先做歸一化;LR不受其影響,但是如果要正則的話也要歸一化
5、SVM不能產生概率,LR可以產生概率
6、SVM的目標函式就自帶正則(目標函式中的1/2||w||^2項),這就是為什麼SVM是結構風險最小化演算法的原因。而LR必須另外在損失函式上新增正則項。

  1. 正則化;L1正則和L2正則的區別
    http://blog.csdn.net/jinping_shi/article/details/52433975

正則化是針對過擬合而提出的。在模型的經驗風險上加入正則化項作為結構風險,並使用一個比例來權衡模型複雜度與經驗風險的權重。

範數
L0範數:不為0的元素個數
L1範數: 為x向量各個元素絕對值之和。
L2範數: 為x向量各個元素平方和的1/2次方
Lp範數: 為x向量各個元素絕對值p次方和的1/p次方.

作用
L1正則化可以產生稀疏模型,可以用於特徵選擇
L2正則化可以防止模型過擬合
一定程度上,L1也可以防止過擬合

奧卡姆剃刀原理,能夠很好的解釋已知資料並且十分簡單才是最好的模型。

L1和L2正則先驗分別服從什麼分佈,L1是拉普拉斯分佈,L2是高斯分佈

  1. 簡單介紹一下SVM,哪些核函式,哪些引數
    https://www.zhihu.com/question/37928831?sort=created

基本認知:支援向量機(support vector machine,SVM)是一種二類分類模型,其基本模型定義為特徵空間上的間隔最大的線性分類器。模型為分離超平面,策略為間隔最大化,學習演算法為凸二次優化。

核函式有線性核、高斯核、多項式核等,一般使用線性核核高斯核。多項式核有引數p表達p次多項式。高斯核引數高斯徑向基的sigma

使用SVM要做歸一化處理;RBF核耗時

下面是吳恩達的見解:
1.如果Feature的數量很大,跟樣本數量差不多,這時候選用LR或者是Linear Kernel的SVM
2.如果Feature的數量比較小,樣本數量一般,不算大也不算小,選用SVM+Gaussian Kernel
3.如果Feature的數量比較小,而樣本數量很多,需要手工新增一些feature變第一種情況

  1. 過擬合和解決方法

過度擬合訓練資料,使得模型過於複雜導致的。表現為對訓練資料效果良好,對測試資料效果很差。
處理方法有:
1、更多資料:資料量、資料增強、加噪聲
2、正則化:約束模型複雜度
3、減少特徵
4、早停止
5、交叉驗證
6、使用多個模型:如整合方法的Boosting、Bagging;或神經網路的dropout

  1. 分類問題的評價標準

準確率、精確率、召回率、F1值、AUC值;PR曲線、ROC曲線

(實際,猜測) TP:真,真;FP:假真;TN:真,假;FN:假假
準確率acc=TP+TN/TP+TN+FP+FN
精確率P=TP/TP+FP
召回率R=TP/TP+FN
F1值=2PR/P+R
AUC值=ROC曲線下的面積

PR曲線,y軸為精確率,x軸為召回率,越偏右上越好(都很高)
ROC曲線,y軸為真正例率,x軸為假正例率,越偏左上越好
真正例率TPR=TP/TP+FP;假正例率FPR=FP/TN+FP

AUC表示正例排在負例前面的概率。
AUC表示,隨機抽取一個正樣本和一個負樣本,分類器正確給出正樣本的score高於負樣本的概率。

另外,為什麼取AUC較好?因為一個二分類問題,如果你取P或R的話,那麼你的評價結果和你閾值的選取關係很大。AUC能很好描述模型整體效能的高低。

  1. 熵、資訊增益、資訊增益比、基尼指數


    7871333-8b1ee0edc99adf7e.png

    7871333-035437b1535d1b2d.png

    7871333-e786434b649c7f08.png

    7871333-56bcda1d56803099.png

    7871333-30e6f684e5663756.png
  2. 介紹LR,為啥用的是似然函式不用最小二乘?


    7871333-b2e72eb404650eee.png
  3. 梯度下降法和擬牛頓法

梯度下降法的優化思想是用當前位置負梯度方向作為搜尋方向,因為該方向為當前位置的最快下降方向,所以也被稱為是”最速下降法“。
批量梯度下降、隨機梯度下降、小批量梯度下降。
最速下降法越接近目標值,步長越小,前進越慢。

從本質上去看,牛頓法是二階收斂,梯度下降是一階收斂,所以牛頓法就更快。
牛頓法目光更加長遠,所以少走彎路;相對而言,梯度下降法只考慮了區域性的最優,沒有全域性思想。
從幾何上說,牛頓法就是用一個二次曲面去擬合你當前所處位置的區域性曲面,而梯度下降法是用一個平面去擬合當前的區域性曲面,通常情況下,二次曲面的擬合會比平面更好,所以牛頓法選擇的下降路徑會更符合真實的最優下降路徑。
牛頓法的優缺點總結:
  優點:二階收斂,收斂速度快;
  缺點:牛頓法是一種迭代演算法,每一步都需要求解目標函式的Hessian矩陣的逆矩陣,計算比較複雜。

擬牛頓法的本質思想是改善牛頓法每次需要求解複雜的Hessian矩陣的逆矩陣的缺陷,它使用正定矩陣來近似Hessian矩陣的逆,從而簡化了運算的複雜度。

  1. 資料不平衡問題

取樣:過取樣、欠取樣
合成資料:SMOTE
模型中的樣本權重
異常點檢測
AUC:因為ROC曲線有個很好的特性:當測試集中的正負樣本的分佈變換的時候,ROC曲線能夠保持不變。在實際的資料集中經常會出現樣本類不平衡,即正負樣本比例差距較大,而且測試資料中的正負樣本也可能隨著時間變化。

  1. 特徵選擇

Filter:過濾法,按照發散性或者相關性對各個特徵進行評分,設定閾值或者待選擇閾值的個數,選擇特徵。
Wrapper:包裝法,根據目標函式(通常是預測效果評分),每次選擇若干特徵,或者排除若干特徵。
Embedded:整合法,先使用某些機器學習的演算法和模型進行訓練,得到各個特徵的權值係數,根據係數從大到小選擇特徵。類似於Filter方法,但是是通過訓練來確定特徵的優劣。

Filter:【自變數、目標變數的聯絡】
方差選擇法,使用方差選擇法,先要計算各個特徵的方差,然後根據閾值,選擇方差大於閾值的特徵。
相關係數法,使用相關係數法,先要計算各個特徵對目標值的相關係數以及相關係數的P值。
卡方檢驗、互資訊法
變數間的相關係數

Wrapper:【目標函式判斷】
遞迴特徵消除法,遞迴消除特徵法使用一個基模型來進行多輪訓練,每輪訓練後,消除若干權值係數的特徵,再基於新的特徵集進行下一輪訓練。【多輪訓練尋優,RFE】

Embedded:【學習模型自身評價】
正則化:使用帶懲罰項的基模型,除了篩選出特徵外,同時也進行了降維。Lasso、Ridge
基於樹模型的特徵選擇法:樹模型中GBDT也可用來作為基模型進行特徵選擇

降維

PCA
LDA

  1. 資料預處理
    唯一值:刪除
    缺失值:直接使用,如決策樹
       : 刪除特徵,對於大量缺失的
       : 缺失值補全
    缺失值補全:均值插補、同類均值插補、建模預測、高維對映(one-hot)、多重插補(估計+噪聲)、壓縮感知和矩陣補全
    特徵編碼:二元化、獨熱編碼(可處理非數值屬性,擴充特徵,屬性稀疏)
    資料標準化:使樣本資料縮放到某個指定範圍。原因:數量級大的屬性佔主導,收斂速度慢,所有依賴於樣本距離的演算法對資料的數量級都比較敏感。方法:min-max,z-score,
    資料正則化:正則化過程針對單個樣本,對核方法計算樣本相似性有效

  2. RF、GBDT、XGBoost調參

GBDT:
Boosting相關:
n_estimators:最大迭代次數,和learning_rate一起考慮.>100
learning_rate:權重縮減係數ν,也稱作步長。作為正則化項。0.01~0.1。小learning_rate,CV合適的n_estimators
subsample:正則化方式(防止過擬合)中的子取樣,不放回抽樣,推薦在[0.5, 0.8]
CART相關:
max_features:特徵太多可用
max_depth:常用的可以取值10-100之間。樣本多可用。
min_samples_split:看樣本數量
min_samples_leaf:看樣本數量
min_weight_fraction_leaf:一般來說,如果我們有較多樣本有缺失值,或者分類樹樣本的分佈類別偏差很大,就會引入樣本權重,這時我們就要注意這個值了。
max_leaf_nodes:與max_depth二選一
min_impurity_split:一般不改
random_state

RF:
Bagging相關:
n_estimators:迭代次數,重要!
oob_score:是否採用袋外樣本來評估模型的好壞,建議True,泛化。
criterion:評價標準,預設分類Gini,可以資訊增益;迴歸mse,可以mae
CART相關:
max_features:重要
max_depth:重要
min_samples_split:重要
min_samples_leaf:重要
min_weight_fraction_leaf
max_leaf_nodes
min_impurity_split

XGBoost:
'booster':'gbtree',
'objective': 'multi:softmax', #多分類的問題
'num_class':10, # 類別數,與 multisoftmax 並用
'gamma':0.1, # 用於控制是否後剪枝的引數,越大越保守,一般0.1、0.2這樣子。
'max_depth':12, # 構建樹的深度,越大越容易過擬合
'lambda':2, # 控制模型複雜度的權重值的L2正則化項引數,引數越大,模型越不容易過擬合。
'subsample':0.7, # 隨機取樣訓練樣本
'colsample_bytree':0.7, # 生成樹時進行的列取樣
'min_child_weight':3,
這個引數預設是 1,是每個葉子裡面 h 的和至少是多少,對正負樣本不均衡時的 0-1 分類而言,假設 h 在 0.01 附近,min_child_weight 為 1 意味著葉子節點中最少需要包含 100 個樣本。
這個引數非常影響結果,控制葉子節點中二階導的和的最小值,該引數值越小,越容易 overfitting。
'silent':0 ,#設定成1則沒有執行資訊輸出,最好是設定為0.
'eta': 0.007, # 如同學習率
'seed':1000,
'nthread':7,# cpu 執行緒數
'eval_metric': 'auc'

  1. LR、SVM調參
    https://www.cnblogs.com/pinard/p/6035872.html
    LR:
    penalty:l1/l2
    solver:liblinear、lbfgs擬牛頓法、newton-cg牛頓法、sag隨機平均梯度下降
    multi_class/class_weight/sample_weight

SVM:
C表示模型對誤差的懲罰係數;gamma反映了資料對映到高維特徵空間後的分佈,gamma越大,支援向量越多,gamma值越小,支援向量越少。C越大,模型越容易過擬合;C越小,模型越容易欠擬合。gamma越小,模型的泛化性變好,但過小,模型實際上會退化為線性模型;gamma越大,理論上SVM可以擬合任何非線性資料。
GridSearchCV
1)一般推薦在做訓練之前對資料進行歸一化,當然測試集中的資料也需要歸一化。。
2)在特徵數非常多的情況下,或者樣本數遠小於特徵數的時候,使用線性核,效果已經很好,並且只需要選擇懲罰係數C即可。
3)在選擇核函式時,如果線性擬合不好,一般推薦使用預設的高斯核'rbf'。這時我們主要需要對懲罰係數C和核函式引數γ進行艱苦的調參,通過多輪的交叉驗證選擇合適的懲罰係數C和核函式引數γ。
4)理論上高斯核不會比線性核差,但是這個理論卻建立在要花費更多的時間來調參上。所以實際上能用線性核解決問題我們儘量使用線性核。

  1. RF、GBDT、XGBoost評分
    XGBoost:特徵評分可以看成是被用來分離決策樹的次數
    RF:Gini
    GBDT:平方損失

RF計算某個特徵X的重要性時,具體步驟如下:
1)對每一顆決策樹,選擇相應的袋外資料(out of bag,OOB)​計算袋外資料誤差,記為errOOB1.
所謂袋外資料是指,每次建立決策樹時,通過重複抽樣得到一個資料用於訓練​決策樹,這時還有大約1/3的資料沒有被利用,沒有參與決策樹的建立。這部分資料可以用於對決策樹的效能進行評估,計算模型的預測錯誤率,稱為袋外資料誤差。
​這已經經過證明是無偏估計的,所以在隨機森林演算法中不需要再進行交叉驗證或者單獨的測試集來獲取測試集誤差的無偏估計。
​2)隨機對袋外資料OOB所有樣本的特徵X加入噪聲干擾(可以隨機改變樣本在特徵X處的值),再次計算袋外資料誤差,記為errOOB2。
3)​假設森林中有N棵樹,則特徵X的重要性=∑(errOOB2-errOOB1)/N。這個數值之所以能夠說明特徵的重要性是因為,如果加入隨機噪聲後,袋外資料準確率大幅度下降(即errOOB2上升),說明這個特徵對於樣本的預測結果有很大影響,進而說明重要程度比較高。

  1. 距離度量
    閔可夫斯基距離(歐式、曼哈頓)
    馬氏距離:馬氏距離的計算中考慮了在不同方向上尺度單位。例:判斷未知樣本歸屬哪個樣本集,考慮了不同維度方差資訊。
    互資訊
    餘弦相似度
    相關係數

KL散度

  1. 邏輯迴歸LR的特徵為什麼要先離散化
    http://blog.csdn.net/yang090510118/article/details/39478033

在工業界,很少直接將連續值作為特徵餵給邏輯迴歸模型,而是將連續特徵離散化為一系列0、1特徵交給邏輯迴歸模型,這樣做的優勢有以下幾點:

  1. 稀疏向量內積乘法運算速度快,計算結果方便儲存,容易scalable(擴充套件)。

  2. 離散化後的特徵對異常資料有很強的魯棒性:比如一個特徵是年齡>30是1,否則0。如果特徵沒有離散化,一個異常資料“年齡300歲”會給模型造成很大的干擾。

  3. 邏輯迴歸屬於廣義線性模型,表達能力受限;單變數離散化為N個後,每個變數有單獨的權重,相當於為模型引入了非線性,能夠提升模型表達能力,加大擬合。

  4. 離散化後可以進行特徵交叉,由M+N個變數變為M*N個變數,進一步引入非線性,提升表達能力。

  5. 特徵離散化後,模型會更穩定,比如如果對使用者年齡離散化,20-30作為一個區間,不會因為一個使用者年齡長了一歲就變成一個完全不同的人。當然處於區間相鄰處的樣本會剛好相反,所以怎麼劃分割槽間是門學問。
    李沐少帥指出,模型是使用離散特徵還是連續特徵,其實是一個“海量離散特徵+簡單模型” 同 “少量連續特徵+複雜模型”的權衡。既可以離散化用線性模型,也可以用連續特徵加深度學習。就看是喜歡折騰特徵還是折騰模型了。通常來說,前者容易,而且可以n個人一起並行做,有成功經驗;後者目前看很贊,能走多遠還須拭目以待。
    大概的理解:
    1)計算簡單
    2)簡化模型
    3)增強模型的泛化能力,不易受噪聲的影響

  6. LR並行化

由邏輯迴歸問題的求解方法中可以看出,無論是梯度下降法、牛頓法、擬牛頓法,計算梯度都是其最基本的步驟,並且L-BFGS通過兩步迴圈計算牛頓方向的方法,避免了計算海森矩陣。因此邏輯迴歸的並行化最主要的就是對目標函式梯度計算的並行化。
目標函式的梯度向量計算中只需要進行向量間的點乘和相加,可以很容易將每個迭代過程拆分成相互獨立的計算步驟,由不同的節點進行獨立計算,然後歸併計算結果。

  1. LR與線性迴歸

邏輯迴歸和線性迴歸首先都是廣義的線性迴歸,
其次經典線性模型的優化目標函式是最小二乘,而邏輯迴歸則是似然函式,
另外線性迴歸在整個實數域範圍內進行預測,敏感度一致,而分類範圍,需要在[0,1]。邏輯迴歸就是一種減小預測範圍,將預測值限定為[0,1]間的一種迴歸模型,因而對於這類問題來說,邏輯迴歸的魯棒性比線性迴歸的要好。

  1. FM/FFM
    FM解決的問題:大規模稀疏資料下的特徵組合問題。
    在傳統的線性模型如LR中,每個特徵都是獨立的,如果需要考慮特徵與特徵直接的互動作用,可能需要人工對特徵進行交叉組合;


    7871333-30495086801299c5.png
    image.png

    這是因為在稀疏條件下,這樣的表示方法打破了特徵的獨立性,能夠更好地挖掘特徵之間的相關性。以上述電影為例,我們要估計使用者A和電影ST的關係w(A&ST)以更好地預測y,如果是簡單地考慮特徵之間的共現情況來估計w(A&ST),從已有的訓練樣本來看,這兩者並沒有共現,因此學習出來的w(A&ST)=0。而實際上,A和ST應該是存在某種聯絡的,從使用者角度來看,A和B都看過SW,而B還看過ST,說明A也可能喜歡ST,說明A很有可能也喜歡ST。而通過向量v來表示使用者和電影,任意兩兩之間的互動都會影響v的更新,從前面舉的例子就可以看過,A和B看過SW,這樣的互動關係就會導致v(ST)的學習更新,因此通過向量v的學習方式能夠更好的挖掘特徵間的相互關係,尤其在稀疏條件下。
    FM 對比 SVM
    看到上面的式子,是不是覺得跟FM特別像?SVM和FM的主要區別在於,SVM的二元特徵交叉引數是獨立的,如wij,而FM的二元特徵交叉引數是兩個k維的向量vi、vj,這樣子的話,<vi,vj>和<vi,vk>就不是獨立的,而是相互影響的。
    為什麼線性SVM在和多項式SVM在稀疏條件下效果會比較差呢?線性svm只有一維特徵,不能挖掘深層次的組合特徵在實際預測中並沒有很好的表現;而多項式svn正如前面提到的,交叉的多個特徵需要在訓練集上共現才能被學習到,否則該對應的引數就為0,這樣對於測試集上的case而言這樣的特徵就失去了意義,因此在稀疏條件下,SVM表現並不能讓人滿意。而FM不一樣,通過向量化的交叉,可以學習到不同特徵之間的互動,進行提取到更深層次的抽象意義。
    此外,FM和SVM的區別還體現在:1)FM可以在原始形式下進行優化學習,而基於kernel的非線性SVM通常需要在對偶形式下進行;2)FM的模型預測是與訓練樣本獨立,而SVM則與部分訓練樣本有關,即支援向量。
    FFM在FM的基礎上,增加了特徵與場(特徵型別)的交叉關係,

  2. AdaBoost
        這裡對Adaboost演算法的優缺點做一個總結。
        Adaboost的主要優點有:
        1)Adaboost作為分類器時,分類精度很高
        2)在Adaboost的框架下,可以使用各種迴歸分類模型來構建弱學習器,非常靈活。
        3)作為簡單的二元分類器時,構造簡單,結果可理解。
        4)不容易發生過擬合
        Adaboost的主要缺點有:
        1)對異常樣本敏感,異常樣本在迭代中可能會獲得較高的權重,影響最終的強學習器的預測準確性。

  3. 介紹GBDT

  4. 介紹RF

  5. 介紹XGBoost
    xgboost相比傳統gbdt有何不同?xgboost為什麼快?xgboost如何支援並行?
    看了陳天奇大神的文章和slides,略抒己見,沒有面面俱到,不恰當的地方歡迎討論:
    傳統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還提出了一種可並行的近似直方圖演算法,用於高效地生成候選的分割點。

xgboost使用經驗總結

  • 多類別分類時,類別需要從0開始編碼
  • Watchlist不會影響模型訓練。
  • 類別特徵必須編碼,因為xgboost把特徵預設都當成數值型的
  • 調參:Notes on Parameter Tuning 以及 Complete Guide to Parameter Tuning in XGBoost (with codes in Python)
  • 訓練的時候,為了結果可復現,記得設定隨機數種子。
  • XGBoost的特徵重要性是如何得到的?某個特徵的重要性(feature score),等於它被選中為樹節點分裂特徵的次數的和,比如特徵A在第一次迭代中(即第一棵樹)被選中了1次去分裂樹節點,在第二次迭代被選中2次…..那麼最終特徵A的feature score就是 1+2+….
  1. GBDT、RF、XGBoost的區別

  2. XGBoost和lightGBM

  3. 資料傾斜
    在計算資料的時候,資料的分散度不夠,導致大量的資料集中到了一臺或者幾臺機器上計算,這些資料的計算速度遠遠低於平均計算速度,導致整個計算過程過慢。
    如:表Join的Key集中;groupby的維度太小;count distinct的某特殊值太多;
    三個方面解決:
    業務:特殊的,有大資料量的部分單獨計算;
    程式:做好剪裁後
    引數:Hive防傾斜的引數;hive.groupby.skewindata
    例子:
    採用sum() group by的方式來替換count(distinct)完成計算。
    空值過多導致傾斜的,Join時不考慮空值,或者加隨機數打散
    不同型別資料關聯導致傾斜的,統一資料型別
    做好剪裁工作Join

  4. MapReduce


    7871333-fe4772e3acf52f9c.png

    Input 代表的是需要處理的原始資料,一共有3行。
    Splitting 表示分配任務,這裡把任務分給3臺機器同時處理,每臺機器只負責處理一行的資料。
    Mapping 表示這3臺機器具體要做的事情。在這裡每臺機器要做的就是統計一行文字裡的單詞頻率。這裡就涉及到比較重要的一個概念,就是key和value。這裡key就是單詞,value就是這個單詞在這一行出現的次數。
    Shuffling 表示對Mapping步驟產生的9行資料,按照key進行分組。這裡分成了4組,每組交給一臺電腦去處理。
    Reducing 表示把相同key對應的value相加,每個key最終只輸出一行,依然是key,value的形式輸出。
    Final result 表示把Reducing的輸出合併。

Mapper每次只處理一行資料。即Mapper的Input是資料庫中的一條記錄。
Reducer每次要處理的是相同key下的所有記錄,通常會是多行的。

相關文章