- LR和SVM的區(qū)別
相同點(diǎn):
1、都是監(jiān)督、分類算法,且一般處理二分類問題
2、兩個(gè)方法都可以增加不同的正則化項(xiàng),如l1、l2等等
3、都是判別模型
3、如果不考慮核函數(shù),LR和SVM都是線性分類算法。也就是說他們的分類決策面都是線性的。
不同點(diǎn):
1、損失函數(shù)不同:LR用似然函數(shù);SVM用合頁損失函數(shù)。
這兩個(gè)損失函數(shù)的目的都是增加對(duì)分類影響較大的數(shù)據(jù)點(diǎn)的權(quán)重,減少與分類關(guān)系較小的數(shù)據(jù)點(diǎn)的權(quán)重
2、SVM只考慮支持向量,也就是和分類最相關(guān)的少數(shù)點(diǎn)。而邏輯回歸通過非線性映射,大大減小了離分類平面較遠(yuǎn)的點(diǎn)的權(quán)重,相對(duì)提升了與分類最相關(guān)的數(shù)據(jù)點(diǎn)的權(quán)重。所以, 線性SVM不直接依賴于數(shù)據(jù)分布,分類平面不受一類點(diǎn)影響;LR則受所有數(shù)據(jù)點(diǎn)的影響,如果數(shù)據(jù)不同類別strongly unbalance,一般需要先對(duì)數(shù)據(jù)做balancing。
3、在解決非線性問題時(shí),支持向量機(jī)采用核函數(shù)的機(jī)制,而LR通常不采用核函數(shù)的方法,做特征。因?yàn)镾VM只有少數(shù)幾個(gè)點(diǎn)運(yùn)算,LR要全部(計(jì)算量)
4、Linear SVM依賴數(shù)據(jù)表達(dá)的距離測度,所以需要對(duì)數(shù)據(jù)先做歸一化;LR不受其影響,但是如果要正則的話也要?dú)w一化
5、SVM不能產(chǎn)生概率,LR可以產(chǎn)生概率
6、SVM的目標(biāo)函數(shù)就自帶正則(目標(biāo)函數(shù)中的1/2||w||^2項(xiàng)),這就是為什么SVM是結(jié)構(gòu)風(fēng)險(xiǎn)最小化算法的原因。而LR必須另外在損失函數(shù)上添加正則項(xiàng)。
- 正則化;L1正則和L2正則的區(qū)別
http://blog.csdn.net/jinping_shi/article/details/52433975
正則化是針對(duì)過擬合而提出的。在模型的經(jīng)驗(yàn)風(fēng)險(xiǎn)上加入正則化項(xiàng)作為結(jié)構(gòu)風(fēng)險(xiǎn),并使用一個(gè)比例來權(quán)衡模型復(fù)雜度與經(jīng)驗(yàn)風(fēng)險(xiǎn)的權(quán)重。
范數(shù)
L0范數(shù):不為0的元素個(gè)數(shù)
L1范數(shù): 為x向量各個(gè)元素絕對(duì)值之和。
L2范數(shù): 為x向量各個(gè)元素平方和的1/2次方
Lp范數(shù): 為x向量各個(gè)元素絕對(duì)值p次方和的1/p次方.
作用
L1正則化可以產(chǎn)生稀疏模型,可以用于特征選擇
L2正則化可以防止模型過擬合
一定程度上,L1也可以防止過擬合
奧卡姆剃刀原理,能夠很好的解釋已知數(shù)據(jù)并且十分簡單才是最好的模型。
L1和L2正則先驗(yàn)分別服從什么分布,L1是拉普拉斯分布,L2是高斯分布
- 簡單介紹一下SVM,哪些核函數(shù),哪些參數(shù)
https://www.zhihu.com/question/37928831?sort=created
基本認(rèn)知:支持向量機(jī)(support vector machine,SVM)是一種二類分類模型,其基本模型定義為特征空間上的間隔最大的線性分類器。模型為分離超平面,策略為間隔最大化,學(xué)習(xí)算法為凸二次優(yōu)化。
核函數(shù)有線性核、高斯核、多項(xiàng)式核等,一般使用線性核核高斯核。多項(xiàng)式核有參數(shù)p表達(dá)p次多項(xiàng)式。高斯核參數(shù)高斯徑向基的sigma
使用SVM要做歸一化處理;RBF核耗時(shí)
下面是吳恩達(dá)的見解:
1.如果Feature的數(shù)量很大,跟樣本數(shù)量差不多,這時(shí)候選用LR或者是Linear Kernel的SVM
2.如果Feature的數(shù)量比較小,樣本數(shù)量一般,不算大也不算小,選用SVM+Gaussian Kernel
3.如果Feature的數(shù)量比較小,而樣本數(shù)量很多,需要手工添加一些feature變第一種情況
- 過擬合和解決方法
過度擬合訓(xùn)練數(shù)據(jù),使得模型過于復(fù)雜導(dǎo)致的。表現(xiàn)為對(duì)訓(xùn)練數(shù)據(jù)效果良好,對(duì)測試數(shù)據(jù)效果很差。
處理方法有:
1、更多數(shù)據(jù):數(shù)據(jù)量、數(shù)據(jù)增強(qiáng)、加噪聲
2、正則化:約束模型復(fù)雜度
3、減少特征
4、早停止
5、交叉驗(yàn)證
6、使用多個(gè)模型:如集成方法的Boosting、Bagging;或神經(jīng)網(wǎng)絡(luò)的dropout
- 分類問題的評(píng)價(jià)標(biāo)準(zhǔn)
準(zhǔn)確率、精確率、召回率、F1值、AUC值;PR曲線、ROC曲線
(實(shí)際,猜測) TP:真,真;FP:假真;TN:真,假;FN:假假
準(zhǔn)確率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表示正例排在負(fù)例前面的概率。
AUC表示,隨機(jī)抽取一個(gè)正樣本和一個(gè)負(fù)樣本,分類器正確給出正樣本的score高于負(fù)樣本的概率。
另外,為什么取AUC較好?因?yàn)橐粋€(gè)二分類問題,如果你取P或R的話,那么你的評(píng)價(jià)結(jié)果和你閾值的選取關(guān)系很大。AUC能很好描述模型整體性能的高低。
-
熵、信息增益、信息增益比、基尼指數(shù)
-
介紹LR,為啥用的是似然函數(shù)不用最小二乘?
梯度下降法和擬牛頓法
梯度下降法的優(yōu)化思想是用當(dāng)前位置負(fù)梯度方向作為搜索方向,因?yàn)樵摲较驗(yàn)楫?dāng)前位置的最快下降方向,所以也被稱為是”最速下降法“。
批量梯度下降、隨機(jī)梯度下降、小批量梯度下降。
最速下降法越接近目標(biāo)值,步長越小,前進(jìn)越慢。
從本質(zhì)上去看,牛頓法是二階收斂,梯度下降是一階收斂,所以牛頓法就更快。
牛頓法目光更加長遠(yuǎn),所以少走彎路;相對(duì)而言,梯度下降法只考慮了局部的最優(yōu),沒有全局思想。
從幾何上說,牛頓法就是用一個(gè)二次曲面去擬合你當(dāng)前所處位置的局部曲面,而梯度下降法是用一個(gè)平面去擬合當(dāng)前的局部曲面,通常情況下,二次曲面的擬合會(huì)比平面更好,所以牛頓法選擇的下降路徑會(huì)更符合真實(shí)的最優(yōu)下降路徑。
牛頓法的優(yōu)缺點(diǎn)總結(jié):
優(yōu)點(diǎn):二階收斂,收斂速度快;
缺點(diǎn):牛頓法是一種迭代算法,每一步都需要求解目標(biāo)函數(shù)的Hessian矩陣的逆矩陣,計(jì)算比較復(fù)雜。
擬牛頓法的本質(zhì)思想是改善牛頓法每次需要求解復(fù)雜的Hessian矩陣的逆矩陣的缺陷,它使用正定矩陣來近似Hessian矩陣的逆,從而簡化了運(yùn)算的復(fù)雜度。
- 數(shù)據(jù)不平衡問題
采樣:過采樣、欠采樣
合成數(shù)據(jù):SMOTE
模型中的樣本權(quán)重
異常點(diǎn)檢測
AUC:因?yàn)镽OC曲線有個(gè)很好的特性:當(dāng)測試集中的正負(fù)樣本的分布變換的時(shí)候,ROC曲線能夠保持不變。在實(shí)際的數(shù)據(jù)集中經(jīng)常會(huì)出現(xiàn)樣本類不平衡,即正負(fù)樣本比例差距較大,而且測試數(shù)據(jù)中的正負(fù)樣本也可能隨著時(shí)間變化。
- 特征選擇
Filter:過濾法,按照發(fā)散性或者相關(guān)性對(duì)各個(gè)特征進(jìn)行評(píng)分,設(shè)定閾值或者待選擇閾值的個(gè)數(shù),選擇特征。
Wrapper:包裝法,根據(jù)目標(biāo)函數(shù)(通常是預(yù)測效果評(píng)分),每次選擇若干特征,或者排除若干特征。
Embedded:集成法,先使用某些機(jī)器學(xué)習(xí)的算法和模型進(jìn)行訓(xùn)練,得到各個(gè)特征的權(quán)值系數(shù),根據(jù)系數(shù)從大到小選擇特征。類似于Filter方法,但是是通過訓(xùn)練來確定特征的優(yōu)劣。
Filter:【自變量、目標(biāo)變量的聯(lián)系】
方差選擇法,使用方差選擇法,先要計(jì)算各個(gè)特征的方差,然后根據(jù)閾值,選擇方差大于閾值的特征。
相關(guān)系數(shù)法,使用相關(guān)系數(shù)法,先要計(jì)算各個(gè)特征對(duì)目標(biāo)值的相關(guān)系數(shù)以及相關(guān)系數(shù)的P值。
卡方檢驗(yàn)、互信息法
變量間的相關(guān)系數(shù)
Wrapper:【目標(biāo)函數(shù)判斷】
遞歸特征消除法,遞歸消除特征法使用一個(gè)基模型來進(jìn)行多輪訓(xùn)練,每輪訓(xùn)練后,消除若干權(quán)值系數(shù)的特征,再基于新的特征集進(jìn)行下一輪訓(xùn)練。【多輪訓(xùn)練尋優(yōu),RFE】
Embedded:【學(xué)習(xí)模型自身評(píng)價(jià)】
正則化:使用帶懲罰項(xiàng)的基模型,除了篩選出特征外,同時(shí)也進(jìn)行了降維。Lasso、Ridge
基于樹模型的特征選擇法:樹模型中GBDT也可用來作為基模型進(jìn)行特征選擇
降維
PCA
LDA
數(shù)據(jù)預(yù)處理
唯一值:刪除
缺失值:直接使用,如決策樹
???: 刪除特征,對(duì)于大量缺失的
???: 缺失值補(bǔ)全
缺失值補(bǔ)全:均值插補(bǔ)、同類均值插補(bǔ)、建模預(yù)測、高維映射(one-hot)、多重插補(bǔ)(估計(jì)+噪聲)、壓縮感知和矩陣補(bǔ)全
特征編碼:二元化、獨(dú)熱編碼(可處理非數(shù)值屬性,擴(kuò)充特征,屬性稀疏)
數(shù)據(jù)標(biāo)準(zhǔn)化:使樣本數(shù)據(jù)縮放到某個(gè)指定范圍。原因:數(shù)量級(jí)大的屬性占主導(dǎo),收斂速度慢,所有依賴于樣本距離的算法對(duì)數(shù)據(jù)的數(shù)量級(jí)都比較敏感。方法:min-max,z-score,
數(shù)據(jù)正則化:正則化過程針對(duì)單個(gè)樣本,對(duì)核方法計(jì)算樣本相似性有效RF、GBDT、XGBoost調(diào)參
GBDT:
Boosting相關(guān):
n_estimators:最大迭代次數(shù),和learning_rate一起考慮.>100
learning_rate:權(quán)重縮減系數(shù)ν,也稱作步長。作為正則化項(xiàng)。0.01~0.1。小learning_rate,CV合適的n_estimators
subsample:正則化方式(防止過擬合)中的子采樣,不放回抽樣,推薦在[0.5, 0.8]
CART相關(guān):
max_features:特征太多可用
max_depth:常用的可以取值10-100之間。樣本多可用。
min_samples_split:看樣本數(shù)量
min_samples_leaf:看樣本數(shù)量
min_weight_fraction_leaf:一般來說,如果我們有較多樣本有缺失值,或者分類樹樣本的分布類別偏差很大,就會(huì)引入樣本權(quán)重,這時(shí)我們就要注意這個(gè)值了。
max_leaf_nodes:與max_depth二選一
min_impurity_split:一般不改
random_state
RF:
Bagging相關(guān):
n_estimators:迭代次數(shù),重要!
oob_score:是否采用袋外樣本來評(píng)估模型的好壞,建議True,泛化。
criterion:評(píng)價(jià)標(biāo)準(zhǔn),默認(rèn)分類Gini,可以信息增益;回歸mse,可以mae
CART相關(guān):
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, # 類別數(shù),與 multisoftmax 并用
'gamma':0.1, # 用于控制是否后剪枝的參數(shù),越大越保守,一般0.1、0.2這樣子。
'max_depth':12, # 構(gòu)建樹的深度,越大越容易過擬合
'lambda':2, # 控制模型復(fù)雜度的權(quán)重值的L2正則化項(xiàng)參數(shù),參數(shù)越大,模型越不容易過擬合。
'subsample':0.7, # 隨機(jī)采樣訓(xùn)練樣本
'colsample_bytree':0.7, # 生成樹時(shí)進(jìn)行的列采樣
'min_child_weight':3,
這個(gè)參數(shù)默認(rèn)是 1,是每個(gè)葉子里面 h 的和至少是多少,對(duì)正負(fù)樣本不均衡時(shí)的 0-1 分類而言,假設(shè) h 在 0.01 附近,min_child_weight 為 1 意味著葉子節(jié)點(diǎn)中最少需要包含 100 個(gè)樣本。
這個(gè)參數(shù)非常影響結(jié)果,控制葉子節(jié)點(diǎn)中二階導(dǎo)的和的最小值,該參數(shù)值越小,越容易 overfitting。
'silent':0 ,#設(shè)置成1則沒有運(yùn)行信息輸出,最好是設(shè)置為0.
'eta': 0.007, # 如同學(xué)習(xí)率
'seed':1000,
'nthread':7,# cpu 線程數(shù)
'eval_metric': 'auc'
- LR、SVM調(diào)參
https://www.cnblogs.com/pinard/p/6035872.html
LR:
penalty:l1/l2
solver:liblinear、lbfgs擬牛頓法、newton-cg牛頓法、sag隨機(jī)平均梯度下降
multi_class/class_weight/sample_weight
SVM:
C表示模型對(duì)誤差的懲罰系數(shù);gamma反映了數(shù)據(jù)映射到高維特征空間后的分布,gamma越大,支持向量越多,gamma值越小,支持向量越少。C越大,模型越容易過擬合;C越小,模型越容易欠擬合。gamma越小,模型的泛化性變好,但過小,模型實(shí)際上會(huì)退化為線性模型;gamma越大,理論上SVM可以擬合任何非線性數(shù)據(jù)。
GridSearchCV
1)一般推薦在做訓(xùn)練之前對(duì)數(shù)據(jù)進(jìn)行歸一化,當(dāng)然測試集中的數(shù)據(jù)也需要?dú)w一化。。
2)在特征數(shù)非常多的情況下,或者樣本數(shù)遠(yuǎn)小于特征數(shù)的時(shí)候,使用線性核,效果已經(jīng)很好,并且只需要選擇懲罰系數(shù)C即可。
3)在選擇核函數(shù)時(shí),如果線性擬合不好,一般推薦使用默認(rèn)的高斯核'rbf'。這時(shí)我們主要需要對(duì)懲罰系數(shù)C和核函數(shù)參數(shù)γ進(jìn)行艱苦的調(diào)參,通過多輪的交叉驗(yàn)證選擇合適的懲罰系數(shù)C和核函數(shù)參數(shù)γ。
4)理論上高斯核不會(huì)比線性核差,但是這個(gè)理論卻建立在要花費(fèi)更多的時(shí)間來調(diào)參上。所以實(shí)際上能用線性核解決問題我們盡量使用線性核。
- RF、GBDT、XGBoost評(píng)分
XGBoost:特征評(píng)分可以看成是被用來分離決策樹的次數(shù)
RF:Gini
GBDT:平方損失
RF計(jì)算某個(gè)特征X的重要性時(shí),具體步驟如下:
1)對(duì)每一顆決策樹,選擇相應(yīng)的袋外數(shù)據(jù)(out of bag,OOB)?計(jì)算袋外數(shù)據(jù)誤差,記為errOOB1.
所謂袋外數(shù)據(jù)是指,每次建立決策樹時(shí),通過重復(fù)抽樣得到一個(gè)數(shù)據(jù)用于訓(xùn)練?決策樹,這時(shí)還有大約1/3的數(shù)據(jù)沒有被利用,沒有參與決策樹的建立。這部分?jǐn)?shù)據(jù)可以用于對(duì)決策樹的性能進(jìn)行評(píng)估,計(jì)算模型的預(yù)測錯(cuò)誤率,稱為袋外數(shù)據(jù)誤差。
?這已經(jīng)經(jīng)過證明是無偏估計(jì)的,所以在隨機(jī)森林算法中不需要再進(jìn)行交叉驗(yàn)證或者單獨(dú)的測試集來獲取測試集誤差的無偏估計(jì)。
?2)隨機(jī)對(duì)袋外數(shù)據(jù)OOB所有樣本的特征X加入噪聲干擾(可以隨機(jī)改變樣本在特征X處的值),再次計(jì)算袋外數(shù)據(jù)誤差,記為errOOB2。
3)?假設(shè)森林中有N棵樹,則特征X的重要性=∑(errOOB2-errOOB1)/N。這個(gè)數(shù)值之所以能夠說明特征的重要性是因?yàn)椋绻尤腚S機(jī)噪聲后,袋外數(shù)據(jù)準(zhǔn)確率大幅度下降(即errOOB2上升),說明這個(gè)特征對(duì)于樣本的預(yù)測結(jié)果有很大影響,進(jìn)而說明重要程度比較高。
- 距離度量
閔可夫斯基距離(歐式、曼哈頓)
馬氏距離:馬氏距離的計(jì)算中考慮了在不同方向上尺度單位。例:判斷未知樣本歸屬哪個(gè)樣本集,考慮了不同維度方差信息。
互信息
余弦相似度
相關(guān)系數(shù)
KL散度
- 邏輯回歸LR的特征為什么要先離散化
http://blog.csdn.net/yang090510118/article/details/39478033
在工業(yè)界,很少直接將連續(xù)值作為特征喂給邏輯回歸模型,而是將連續(xù)特征離散化為一系列0、1特征交給邏輯回歸模型,這樣做的優(yōu)勢有以下幾點(diǎn):
稀疏向量內(nèi)積乘法運(yùn)算速度快,計(jì)算結(jié)果方便存儲(chǔ),容易scalable(擴(kuò)展)。
離散化后的特征對(duì)異常數(shù)據(jù)有很強(qiáng)的魯棒性:比如一個(gè)特征是年齡>30是1,否則0。如果特征沒有離散化,一個(gè)異常數(shù)據(jù)“年齡300歲”會(huì)給模型造成很大的干擾。
邏輯回歸屬于廣義線性模型,表達(dá)能力受限;單變量離散化為N個(gè)后,每個(gè)變量有單獨(dú)的權(quán)重,相當(dāng)于為模型引入了非線性,能夠提升模型表達(dá)能力,加大擬合。
離散化后可以進(jìn)行特征交叉,由M+N個(gè)變量變?yōu)镸*N個(gè)變量,進(jìn)一步引入非線性,提升表達(dá)能力。
特征離散化后,模型會(huì)更穩(wěn)定,比如如果對(duì)用戶年齡離散化,20-30作為一個(gè)區(qū)間,不會(huì)因?yàn)橐粋€(gè)用戶年齡長了一歲就變成一個(gè)完全不同的人。當(dāng)然處于區(qū)間相鄰處的樣本會(huì)剛好相反,所以怎么劃分區(qū)間是門學(xué)問。
李沐少帥指出,模型是使用離散特征還是連續(xù)特征,其實(shí)是一個(gè)“海量離散特征+簡單模型” 同 “少量連續(xù)特征+復(fù)雜模型”的權(quán)衡。既可以離散化用線性模型,也可以用連續(xù)特征加深度學(xué)習(xí)。就看是喜歡折騰特征還是折騰模型了。通常來說,前者容易,而且可以n個(gè)人一起并行做,有成功經(jīng)驗(yàn);后者目前看很贊,能走多遠(yuǎn)還須拭目以待。
大概的理解:
1)計(jì)算簡單
2)簡化模型
3)增強(qiáng)模型的泛化能力,不易受噪聲的影響LR并行化
由邏輯回歸問題的求解方法中可以看出,無論是梯度下降法、牛頓法、擬牛頓法,計(jì)算梯度都是其最基本的步驟,并且L-BFGS通過兩步循環(huán)計(jì)算牛頓方向的方法,避免了計(jì)算海森矩陣。因此邏輯回歸的并行化最主要的就是對(duì)目標(biāo)函數(shù)梯度計(jì)算的并行化。
目標(biāo)函數(shù)的梯度向量計(jì)算中只需要進(jìn)行向量間的點(diǎn)乘和相加,可以很容易將每個(gè)迭代過程拆分成相互獨(dú)立的計(jì)算步驟,由不同的節(jié)點(diǎn)進(jìn)行獨(dú)立計(jì)算,然后歸并計(jì)算結(jié)果。
- LR與線性回歸
邏輯回歸和線性回歸首先都是廣義的線性回歸,
其次經(jīng)典線性模型的優(yōu)化目標(biāo)函數(shù)是最小二乘,而邏輯回歸則是似然函數(shù),
另外線性回歸在整個(gè)實(shí)數(shù)域范圍內(nèi)進(jìn)行預(yù)測,敏感度一致,而分類范圍,需要在[0,1]。邏輯回歸就是一種減小預(yù)測范圍,將預(yù)測值限定為[0,1]間的一種回歸模型,因而對(duì)于這類問題來說,邏輯回歸的魯棒性比線性回歸的要好。
-
FM/FFM
FM解決的問題:大規(guī)模稀疏數(shù)據(jù)下的特征組合問題。
在傳統(tǒng)的線性模型如LR中,每個(gè)特征都是獨(dú)立的,如果需要考慮特征與特征直接的交互作用,可能需要人工對(duì)特征進(jìn)行交叉組合;
image.png
這是因?yàn)樵谙∈钘l件下,這樣的表示方法打破了特征的獨(dú)立性,能夠更好地挖掘特征之間的相關(guān)性。以上述電影為例,我們要估計(jì)用戶A和電影ST的關(guān)系w(A&ST)以更好地預(yù)測y,如果是簡單地考慮特征之間的共現(xiàn)情況來估計(jì)w(A&ST),從已有的訓(xùn)練樣本來看,這兩者并沒有共現(xiàn),因此學(xué)習(xí)出來的w(A&ST)=0。而實(shí)際上,A和ST應(yīng)該是存在某種聯(lián)系的,從用戶角度來看,A和B都看過SW,而B還看過ST,說明A也可能喜歡ST,說明A很有可能也喜歡ST。而通過向量v來表示用戶和電影,任意兩兩之間的交互都會(huì)影響v的更新,從前面舉的例子就可以看過,A和B看過SW,這樣的交互關(guān)系就會(huì)導(dǎo)致v(ST)的學(xué)習(xí)更新,因此通過向量v的學(xué)習(xí)方式能夠更好的挖掘特征間的相互關(guān)系,尤其在稀疏條件下。
FM 對(duì)比 SVM
看到上面的式子,是不是覺得跟FM特別像?SVM和FM的主要區(qū)別在于,SVM的二元特征交叉參數(shù)是獨(dú)立的,如wij,而FM的二元特征交叉參數(shù)是兩個(gè)k維的向量vi、vj,這樣子的話,<vi,vj>和<vi,vk>就不是獨(dú)立的,而是相互影響的。
為什么線性SVM在和多項(xiàng)式SVM在稀疏條件下效果會(huì)比較差呢?線性svm只有一維特征,不能挖掘深層次的組合特征在實(shí)際預(yù)測中并沒有很好的表現(xiàn);而多項(xiàng)式svn正如前面提到的,交叉的多個(gè)特征需要在訓(xùn)練集上共現(xiàn)才能被學(xué)習(xí)到,否則該對(duì)應(yīng)的參數(shù)就為0,這樣對(duì)于測試集上的case而言這樣的特征就失去了意義,因此在稀疏條件下,SVM表現(xiàn)并不能讓人滿意。而FM不一樣,通過向量化的交叉,可以學(xué)習(xí)到不同特征之間的交互,進(jìn)行提取到更深層次的抽象意義。
此外,F(xiàn)M和SVM的區(qū)別還體現(xiàn)在:1)FM可以在原始形式下進(jìn)行優(yōu)化學(xué)習(xí),而基于kernel的非線性SVM通常需要在對(duì)偶形式下進(jìn)行;2)FM的模型預(yù)測是與訓(xùn)練樣本獨(dú)立,而SVM則與部分訓(xùn)練樣本有關(guān),即支持向量。
FFM在FM的基礎(chǔ)上,增加了特征與場(特征類型)的交叉關(guān)系, AdaBoost
這里對(duì)Adaboost算法的優(yōu)缺點(diǎn)做一個(gè)總結(jié)。
Adaboost的主要優(yōu)點(diǎn)有:
1)Adaboost作為分類器時(shí),分類精度很高
2)在Adaboost的框架下,可以使用各種回歸分類模型來構(gòu)建弱學(xué)習(xí)器,非常靈活。
3)作為簡單的二元分類器時(shí),構(gòu)造簡單,結(jié)果可理解。
4)不容易發(fā)生過擬合
Adaboost的主要缺點(diǎn)有:
1)對(duì)異常樣本敏感,異常樣本在迭代中可能會(huì)獲得較高的權(quán)重,影響最終的強(qiáng)學(xué)習(xí)器的預(yù)測準(zhǔn)確性。介紹GBDT
介紹RF
介紹XGBoost
xgboost相比傳統(tǒng)gbdt有何不同?xgboost為什么快?xgboost如何支持并行?
看了陳天奇大神的文章和slides,略抒己見,沒有面面俱到,不恰當(dāng)?shù)牡胤綒g迎討論:
傳統(tǒng)GBDT以CART作為基分類器,xgboost還支持線性分類器,這個(gè)時(shí)候xgboost相當(dāng)于帶L1和L2正則化項(xiàng)的邏輯斯蒂回歸(分類問題)或者線性回歸(回歸問題)。
傳統(tǒng)GBDT在優(yōu)化時(shí)只用到一階導(dǎo)數(shù)信息,xgboost則對(duì)代價(jià)函數(shù)進(jìn)行了二階泰勒展開,同時(shí)用到了一階和二階導(dǎo)數(shù)。順便提一下,xgboost工具支持自定義代價(jià)函數(shù),只要函數(shù)可一階和二階求導(dǎo)。
xgboost在代價(jià)函數(shù)里加入了正則項(xiàng),用于控制模型的復(fù)雜度。正則項(xiàng)里包含了樹的葉子節(jié)點(diǎn)個(gè)數(shù)、每個(gè)葉子節(jié)點(diǎn)上輸出的score的L2模的平方和。從Bias-variance tradeoff角度來講,正則項(xiàng)降低了模型的variance,使學(xué)習(xí)出來的模型更加簡單,防止過擬合,這也是xgboost優(yōu)于傳統(tǒng)GBDT的一個(gè)特性。
Shrinkage(縮減),相當(dāng)于學(xué)習(xí)速率(xgboost中的eta)。xgboost在進(jìn)行完一次迭代后,會(huì)將葉子節(jié)點(diǎn)的權(quán)重乘上該系數(shù),主要是為了削弱每棵樹的影響,讓后面有更大的學(xué)習(xí)空間。實(shí)際應(yīng)用中,一般把eta設(shè)置得小一點(diǎn),然后迭代次數(shù)設(shè)置得大一點(diǎn)。(補(bǔ)充:傳統(tǒng)GBDT的實(shí)現(xiàn)也有學(xué)習(xí)速率)
列抽樣(column subsampling)。xgboost借鑒了隨機(jī)森林的做法,支持列抽樣,不僅能降低過擬合,還能減少計(jì)算,這也是xgboost異于傳統(tǒng)gbdt的一個(gè)特性。
對(duì)缺失值的處理。對(duì)于特征的值有缺失的樣本,xgboost可以自動(dòng)學(xué)習(xí)出它的分裂方向。
xgboost工具支持并行。boosting不是一種串行的結(jié)構(gòu)嗎?怎么并行的?注意xgboost的并行不是tree粒度的并行,xgboost也是一次迭代完才能進(jìn)行下一次迭代的(第t次迭代的代價(jià)函數(shù)里包含了前面t-1次迭代的預(yù)測值)。xgboost的并行是在特征粒度上的。我們知道,決策樹的學(xué)習(xí)最耗時(shí)的一個(gè)步驟就是對(duì)特征的值進(jìn)行排序(因?yàn)橐_定最佳分割點(diǎn)),xgboost在訓(xùn)練之前,預(yù)先對(duì)數(shù)據(jù)進(jìn)行了排序,然后保存為block結(jié)構(gòu),后面的迭代中重復(fù)地使用這個(gè)結(jié)構(gòu),大大減小計(jì)算量。這個(gè)block結(jié)構(gòu)也使得并行成為了可能,在進(jìn)行節(jié)點(diǎn)的分裂時(shí),需要計(jì)算每個(gè)特征的增益,最終選增益最大的那個(gè)特征去做分裂,那么各個(gè)特征的增益計(jì)算就可以開多線程進(jìn)行。
可并行的近似直方圖算法。樹節(jié)點(diǎn)在進(jìn)行分裂時(shí),我們需要計(jì)算每個(gè)特征的每個(gè)分割點(diǎn)對(duì)應(yīng)的增益,即用貪心法枚舉所有可能的分割點(diǎn)。當(dāng)數(shù)據(jù)無法一次載入內(nèi)存或者在分布式情況下,貪心算法效率就會(huì)變得很低,所以xgboost還提出了一種可并行的近似直方圖算法,用于高效地生成候選的分割點(diǎn)。
xgboost使用經(jīng)驗(yàn)總結(jié)
- 多類別分類時(shí),類別需要從0開始編碼
- Watchlist不會(huì)影響模型訓(xùn)練。
- 類別特征必須編碼,因?yàn)閤gboost把特征默認(rèn)都當(dāng)成數(shù)值型的
- 調(diào)參:Notes on Parameter Tuning 以及 Complete Guide to Parameter Tuning in XGBoost (with codes in Python)
- 訓(xùn)練的時(shí)候,為了結(jié)果可復(fù)現(xiàn),記得設(shè)置隨機(jī)數(shù)種子。
- XGBoost的特征重要性是如何得到的?某個(gè)特征的重要性(feature score),等于它被選中為樹節(jié)點(diǎn)分裂特征的次數(shù)的和,比如特征A在第一次迭代中(即第一棵樹)被選中了1次去分裂樹節(jié)點(diǎn),在第二次迭代被選中2次…..那么最終特征A的feature score就是 1+2+….
GBDT、RF、XGBoost的區(qū)別
XGBoost和lightGBM
數(shù)據(jù)傾斜
在計(jì)算數(shù)據(jù)的時(shí)候,數(shù)據(jù)的分散度不夠,導(dǎo)致大量的數(shù)據(jù)集中到了一臺(tái)或者幾臺(tái)機(jī)器上計(jì)算,這些數(shù)據(jù)的計(jì)算速度遠(yuǎn)遠(yuǎn)低于平均計(jì)算速度,導(dǎo)致整個(gè)計(jì)算過程過慢。
如:表Join的Key集中;groupby的維度太小;count distinct的某特殊值太多;
三個(gè)方面解決:
業(yè)務(wù):特殊的,有大數(shù)據(jù)量的部分單獨(dú)計(jì)算;
程序:做好剪裁后
參數(shù):Hive防傾斜的參數(shù);hive.groupby.skewindata
例子:
采用sum() group by的方式來替換count(distinct)完成計(jì)算。
空值過多導(dǎo)致傾斜的,Join時(shí)不考慮空值,或者加隨機(jī)數(shù)打散
不同類型數(shù)據(jù)關(guān)聯(lián)導(dǎo)致傾斜的,統(tǒng)一數(shù)據(jù)類型
做好剪裁工作Join-
MapReduce
Input 代表的是需要處理的原始數(shù)據(jù),一共有3行。
Splitting 表示分配任務(wù),這里把任務(wù)分給3臺(tái)機(jī)器同時(shí)處理,每臺(tái)機(jī)器只負(fù)責(zé)處理一行的數(shù)據(jù)。
Mapping 表示這3臺(tái)機(jī)器具體要做的事情。在這里每臺(tái)機(jī)器要做的就是統(tǒng)計(jì)一行文字里的單詞頻率。這里就涉及到比較重要的一個(gè)概念,就是key和value。這里key就是單詞,value就是這個(gè)單詞在這一行出現(xiàn)的次數(shù)。
Shuffling 表示對(duì)Mapping步驟產(chǎn)生的9行數(shù)據(jù),按照key進(jìn)行分組。這里分成了4組,每組交給一臺(tái)電腦去處理。
Reducing 表示把相同key對(duì)應(yīng)的value相加,每個(gè)key最終只輸出一行,依然是key,value的形式輸出。
Final result 表示把Reducing的輸出合并。
Mapper每次只處理一行數(shù)據(jù)。即Mapper的Input是數(shù)據(jù)庫中的一條記錄。
Reducer每次要處理的是相同key下的所有記錄,通常會(huì)是多行的。