機(jī)器學(xué)習(xí)基礎(chǔ)總結(jié)
一、其它
1. 機(jī)器學(xué)習(xí)的編程流程
-
模型的訓(xùn)練過程
a. 數(shù)據(jù)的加載
b. 數(shù)據(jù)的清洗
c. 數(shù)據(jù)的分割
d. 數(shù)據(jù)的特征工程
e. 算法對象構(gòu)建
f. 算法模型訓(xùn)練
g. 算法模型的效果評估
-
h. 如果模型評估不好,那么進(jìn)入模型的調(diào)整階段,主要調(diào)整的內(nèi)容如下:
- -1. 考慮一個數(shù)據(jù)全不全,能不能通過數(shù)據(jù)收集的方式增加更多的特征信息
- -2. 考慮一下特征與特征之間的關(guān)系,能不能通過特征之間的融合增加一些特征信息
- -3. 根據(jù)算法的目標(biāo)屬性的特征,可以考慮換一些算法模型
- -4. 考慮模型的調(diào)參(超參數(shù)的優(yōu)化)
- -5. 考慮一下集成算法(bagging、boosting、stacking)
-
i. 如果模型評估非常不錯,那么進(jìn)入模型的保存階段,主要保存方式如下:
-
方式一:二進(jìn)制磁盤文件
- 方式:通過sklearn中的joblib將模型保存為二進(jìn)制磁盤文件的形式
- 優(yōu)點:簡單、對于數(shù)據(jù)的預(yù)測可以實時的預(yù)測
- 缺點:僅支持Python語言來加載機(jī)器學(xué)習(xí)模型
-
方式二:預(yù)測結(jié)果直接保存
- 方式:直接使用訓(xùn)練好的模型對所有數(shù)據(jù)做一個預(yù)測,直接將預(yù)測結(jié)果保存數(shù)據(jù)庫
- 優(yōu)點:簡單、不受語言的限制
- 缺點:對于新數(shù)據(jù)是沒有預(yù)測結(jié)果的,只有等到下一次的模型構(gòu)建&預(yù)測的時候,對于新數(shù)據(jù)才可以產(chǎn)生預(yù)測結(jié)果
-
方式三:模型參數(shù)保存
- 方式:對于某些可以獲取模型參數(shù)的模型,eg:線性回歸、Logistic回歸等算法;可以直接將模型參數(shù)保存數(shù)據(jù)庫,eg:將線性回歸的θ以及截距項直接保存數(shù)據(jù)庫
- 優(yōu)點:簡單、不受語言的限制、對數(shù)據(jù)可以實時的預(yù)測
- 缺點:很多模型是不存在模型參數(shù)的或者說沒法獲取模型參數(shù)
-
-
模型的預(yù)測過程
-
方式一:二進(jìn)制磁盤文件
- 直接使用sklearn的joblib中的API加載二進(jìn)制磁盤文件形成對應(yīng)的算法模型
- 使用加載好的算法模型直接對數(shù)據(jù)做一個預(yù)測,并將預(yù)測結(jié)果返回給調(diào)用方
-
方式二:預(yù)測結(jié)果直接保存
- 預(yù)測模塊直接根據(jù)相關(guān)信息,從數(shù)據(jù)庫中獲取預(yù)測結(jié)果
-
方式三:模型參數(shù)保存
- 從數(shù)據(jù)庫中讀取模型參數(shù),然后根據(jù)算法的執(zhí)行過程,將模型參數(shù)構(gòu)建成為一個執(zhí)行算法函數(shù)
- 使用構(gòu)建好的算法函數(shù)對數(shù)據(jù)做一個預(yù)測,并將預(yù)測結(jié)果返回給調(diào)用方
-
-
模型的更新
- 模型需要周期性的定時更新;因為數(shù)據(jù)會發(fā)現(xiàn)變化
- 模型更新后,需要考慮新模型和舊模型的效果比較
2. 算法模型的效果評估方式
-
分類算法
-
準(zhǔn)確率
- 默認(rèn)的評估指標(biāo)
精確率
召回率
混淆矩陣
F1值
ROC
AUC
-
-
回歸算法
MSE
RMSE
MAE
-
R2
- 默認(rèn)的評估指標(biāo)
-
聚類算法
- 輪廓系數(shù)
- 其它衡量指標(biāo)類似分類算法的衡量指標(biāo)
3. 超參數(shù)給定的方式
- 根據(jù)經(jīng)驗給定
- 通過交叉驗證的方式給定
- 通過GridSearchCV網(wǎng)格參數(shù)交叉選擇驗證的方式給定
二、回歸算法
1. 線性回歸
-
a. 什么叫做線性回歸?
- -1. 算法模型屬于回歸算法,也就是說目標(biāo)屬性y是連續(xù)值
- -2. 如果特征屬性x和目標(biāo)屬性y之間的映射關(guān)系是一個線性關(guān)系,那么構(gòu)建的這樣的一個模型就叫做線性回歸
-
b. 線性回歸的損失函數(shù)是什么?
-
-1. 什么叫做損失函數(shù)?
- 確定模型優(yōu)化方向的一個函數(shù),該函數(shù)體現(xiàn)的是預(yù)測值和實際值之間的差值信息;當(dāng)差值越小的時候,也就是損失函數(shù)越小的時候,模型最優(yōu);通過這種損失函數(shù)的定義可以將模型的優(yōu)化過程轉(zhuǎn)換為對損失函數(shù)最小值的求解過程。
-
-2. 常見的損失函數(shù)
-
最小平方和損失函數(shù)(最小二乘的損失函數(shù))
- 線性回歸算法中默認(rèn)
交叉熵?fù)p失函數(shù)
-
-
-3. NOTE
機(jī)器學(xué)習(xí)中損失函數(shù)是固定的,eg:線性回歸使用的就是最小平方和損失函數(shù)、Logistic回歸使用的交叉熵?fù)p失函數(shù)....
-
深度學(xué)習(xí)中一般情況下:
-
回歸的應(yīng)用
- 最小平方和損失函數(shù)
-
分類的應(yīng)用
- 交叉熵?fù)p失函數(shù)
-
-
-
c. 線性回歸算法的求解方式是什么?
直接對損失函數(shù)基于線性代數(shù)的方式計算最小值(最小二乘的解決)
-
梯度下降
批量的梯度下降
-
隨機(jī)梯度下降
- 在大規(guī)模數(shù)據(jù)集的訓(xùn)練過程中,建議使用該方式
小批量的梯度下降
-
d. 線性回歸存在什么問題?
- 因為在線性回歸中,是假定特征屬性x和目標(biāo)屬性y之間存在的映射關(guān)系是線性關(guān)系,但是在實際的業(yè)務(wù)數(shù)據(jù)上,x和y之間的關(guān)系有可能不是屬于線性關(guān)系的,所以直接使用線性回歸來做模型效果就不太好。解決方案:多項式線性回歸
-
e. 擴(kuò)展的其它的線性回歸算法
- 多項式線性回歸
- Lasso
- Ridge
- Elastic Net
2. 欠擬合
問題描述:模型沒有提取出訓(xùn)練數(shù)據(jù)集上的數(shù)據(jù)特性,從而導(dǎo)致訓(xùn)練出來的模型在訓(xùn)練數(shù)據(jù)集上的效果都不佳。
-
產(chǎn)生的原因:
- 模型的學(xué)習(xí)能力太弱
- 數(shù)據(jù)集不適合當(dāng)前模型
- 數(shù)據(jù)集中的樣本數(shù)目太少
-
解決方案:
- 換一種強(qiáng)學(xué)習(xí)能力的模型
- 使用集成學(xué)習(xí)的思想來訓(xùn)練模型
- 進(jìn)行數(shù)據(jù)的特征工程,將數(shù)據(jù)變化為適合當(dāng)前模型的形式
- 增加數(shù)據(jù)的特征屬性或者增加數(shù)據(jù)的樣本量
-
eg: 如何使用線性模型對非線性的數(shù)據(jù)做一個訓(xùn)練???
- 多項式線性回歸:可以考慮先將低維空間上的數(shù)據(jù)映射到高維空間中,讓樣本數(shù)據(jù)變的更加的離散,從而讓數(shù)據(jù)變成線性數(shù)據(jù),然后再使用普通的線性回歸算法對擴(kuò)展之后的數(shù)據(jù)做一個模型訓(xùn)練(一般常見方式:多項式擴(kuò)展+線性回歸)
3. 過擬合
問題描述:模型從訓(xùn)練數(shù)據(jù)中學(xué)習(xí)了太多的訓(xùn)練數(shù)據(jù)特征信息,有可能將一些噪音的異常數(shù)據(jù)特征也學(xué)到了,從而導(dǎo)致模型在測試數(shù)據(jù)或者生產(chǎn)數(shù)據(jù)上效果不佳,但是在訓(xùn)練數(shù)據(jù)集上效果不錯。
-
產(chǎn)生的原因:
- 模型的學(xué)習(xí)能力太強(qiáng)
- 數(shù)據(jù)集中的樣本數(shù)目太少
- 數(shù)據(jù)中的噪音異常樣本比較多
-
解決方案
-
限制模型的學(xué)習(xí)能力(加入正則化項/加入懲罰項)
-
L1 norm
- 在線性回歸中,也就是Lasso算法;比較容易導(dǎo)致模型參數(shù)稀疏化,比較適合特征選擇
-
L2 norm
- 在線性回歸中,也就是Ridge算法;算法效果比較穩(wěn)定
-
更改一下模型超參數(shù),降低一下學(xué)習(xí)能力
更改模型,使用學(xué)習(xí)能力弱一點的模型
使用集成算法
增加樣本數(shù)據(jù)量
刪除一些無用的特征屬性(降低一些噪音特征屬性的影響),同時增加一些有效特征屬性
-
4. 線性的分類算法
思想:首先對線性回歸的算法(普通的線性回歸、Ridge等)對數(shù)據(jù)做一個線性擬合,讓其中一個類別的數(shù)據(jù),計算的函數(shù)值為正,而另外一個類別的數(shù)據(jù),計算的函數(shù)值為負(fù),從而實現(xiàn)分類的算法
-
Logistic回歸
-
什么是logistic回歸???
- Logistic回歸是一種二分類算法,是通過找出兩個類別之間的分割超平面,讓其中一個類別的數(shù)據(jù)位于平面的一側(cè),而另一個類別的數(shù)據(jù)位于平面的另一側(cè),從而實現(xiàn)數(shù)據(jù)的分類 ----> 首先對數(shù)據(jù)做一個線性回歸的算法,讓其中一個類別的數(shù)據(jù)為正,另外一個類別的數(shù)據(jù)為負(fù),然后使用sigmoid函數(shù)將線性回歸的函數(shù)值轉(zhuǎn)換為0~1之間的概率值,使用概率值體現(xiàn)樣本到底屬于哪個類別
-
損失函數(shù)給定的過程(公式)
思想:利用最大似然估計的方式給定損失函數(shù)
-
步驟:
- 編寫樣本的聯(lián)合概率密度函數(shù)
- 求解對數(shù)似然函數(shù)
- 直接使用對數(shù)似然函數(shù)作為Logistic的損失函數(shù)
- NOTE: 該損失函數(shù)就是交叉熵?fù)p失函數(shù)
-
-
softmax回歸
-
Softmax和Logistic回歸的區(qū)別?
- Logistic回歸是一個二分類算法,是找兩個類別的線性分割平面
- Softmax回歸是一個多分類算法,是找每個類別所服從的線性回歸模型
-
三、KNN
1. KNN的原理/思想:
- 利用在樣本空間上,相似樣本是集中在同一個區(qū)域的,并且相似樣本具有相同的特征信息,也就是認(rèn)為相似樣本是具有相同的類別或者相同的預(yù)測值y;
利用這種特性,從訓(xùn)練數(shù)據(jù)中找出和當(dāng)前待預(yù)測樣本比較相似的K個樣本,使用這K個樣本產(chǎn)生預(yù)測值;
利用的其實是“近朱者赤近墨者黑”的思想。
2. KNN的執(zhí)行過程:
-
a. 從訓(xùn)練數(shù)據(jù)中找出和當(dāng)前待預(yù)測樣本最相似的K個樣本,將這k個樣本稱為鄰近樣本
- -1. k如何確定?
- -2. k個樣本如何從訓(xùn)練數(shù)據(jù)中找出?/ 如果從訓(xùn)練數(shù)據(jù)找找出最相似度的K個樣本?
-
b. 將這k個最相似的鄰近樣本的目標(biāo)屬性進(jìn)行融合得到當(dāng)前待預(yù)測樣本的預(yù)測值
- -3. 目標(biāo)屬性如何融合?
3. KNN算法的問題:
-
-1. k如何確定?
- k屬于超參數(shù),一般交叉驗證給定
- k值過大或者k值過小會存在問題??? 自己補(bǔ)充
-
-2. k個樣本如何從訓(xùn)練數(shù)據(jù)中找出?/ 如果從訓(xùn)練數(shù)據(jù)找找出最相似度的K個樣本?
- a. 最簡單的方式:遍歷所有訓(xùn)練數(shù)據(jù),計算所有訓(xùn)練數(shù)據(jù)和當(dāng)前待預(yù)測樣本的相似度,保存最相似的K個樣本即為鄰近樣本
- NOTE: 最簡單的方式中是否存在問題?
-
-3. 如果訓(xùn)練數(shù)據(jù)的樣本量特別大,eg:1千萬樣本、1億樣本,那么在這個時候如何找最樣本的K個樣本?
- note:KD-TREE的構(gòu)建過程,大家稍微的熟悉一下;; 自己補(bǔ)充
-
-4. 目標(biāo)屬性如何融合?
-
分類算法
- 默認(rèn)方式:在K個樣本中,出現(xiàn)次數(shù)最多的那個類別就是預(yù)測類別
- 加權(quán)方式:在計算類別數(shù)目的時候,不是認(rèn)為所有樣本的權(quán)重都是一樣的,而是認(rèn)為越相似的樣本權(quán)重系數(shù)越大,那么對應(yīng)的類別權(quán)重系數(shù)也就越大,最終的預(yù)測類別是權(quán)重系數(shù)最大的那個類別
-
回歸算法
- 默認(rèn)方式:直接將K個樣本的目標(biāo)屬性的y值的均值作為待預(yù)測樣本的預(yù)測值
- 加權(quán)方式:在計算類別數(shù)目的時候,不是認(rèn)為所有樣本的權(quán)重都是一樣的,而是認(rèn)為越相似的樣本權(quán)重系數(shù)越大,那么直接使用權(quán)重系數(shù)對目標(biāo)屬性y作為加權(quán)和的方式
-
4. KNN的優(yōu)化方式:
- a. 在大規(guī)模數(shù)據(jù)情況下的,KNN的預(yù)測過程以及為什么需要使用KD-TREE來構(gòu)建算法---> KD-TREE
- b. 算法模型的融合過程中為什么要使用加權(quán)的方式融合??
四、決策樹
1. 決策樹的構(gòu)建過程
- a. 遍歷所有的特征的所有劃分方式,選擇出一個最優(yōu)劃分;那這個最優(yōu)劃分就是讓劃分之后的數(shù)據(jù)變的"更純"
- b. 基于選擇出來的最優(yōu)劃分,將數(shù)據(jù)集分為多個子數(shù)據(jù)集
- c. 對每個子數(shù)據(jù)集繼續(xù)采用相同的操作進(jìn)行數(shù)據(jù)的劃分,直到每個子數(shù)據(jù)集中只有一個類別的樣本數(shù)據(jù)或者樹的深度達(dá)到給定的限制條件的時候,結(jié)束構(gòu)建過程。
- d. 對所有的子數(shù)據(jù)均進(jìn)行劃分,直到達(dá)到限制條件。
2. 決策樹構(gòu)建過程中的目的/方向:
將數(shù)據(jù)劃分為不同的數(shù)據(jù)子集,劃分時候保證:每次的劃分,都是讓數(shù)據(jù)變的“更純”,也就是說讓一個子數(shù)據(jù)集中盡可能的只有一個類別的數(shù)據(jù)或者某個類別的數(shù)據(jù)出現(xiàn)的樣本占絕大多數(shù)。
-
純度的度量
-
分類:
- 信息熵
- Gini系數(shù)
- 錯誤率
- NOTE: 值越小越好
-
回歸:
- MAE
- MSE
- NOTE: 值越小越好
-
3. 決策樹的預(yù)測值如何產(chǎn)生?
-
分類
- a. 基于決策樹中的非葉子節(jié)點上的特征屬性的判斷條件,判斷樣本x屬于哪個葉子節(jié)點(樣本x落在那個葉子節(jié)點上)
- b. 以樣本x所落的葉子節(jié)點中的所有訓(xùn)練數(shù)據(jù)中出現(xiàn)次數(shù)最多的那個類別作為當(dāng)前樣本x的預(yù)測值
-
回歸
- a. 基于決策樹中的非葉子節(jié)點上的特征屬性的判斷條件,判斷樣本x屬于哪個葉子節(jié)點(樣本x落在那個葉子節(jié)點上)
- b. 以樣本x所落的葉子節(jié)點中的所有訓(xùn)練數(shù)據(jù)的目標(biāo)屬性y值的均值作為樣本x的預(yù)測值
4. 決策樹算法的類別
-
ID3
- 分類決策樹、只能處理離散的特征數(shù)據(jù)、構(gòu)建的是多叉樹、特征屬性僅可以使用一次
-
C4.5
- 分類決策樹、可以處理離散和連續(xù)的特征數(shù)據(jù)、構(gòu)建的是多叉樹、特征屬性僅可以使用一次
-
CART
- 分類回歸決策樹、可以處理離散和連續(xù)特征數(shù)據(jù)、構(gòu)建的是二叉樹、特征屬性可以多次使用
5. 決策樹的欠擬合和過擬合
-
欠擬合
- 利用增加樹深度來解決
- 利用集成算法Adaboost或者GBDT來解決
-
過擬合
- 降低樹的復(fù)雜程度, 也就是限制一下樹的深度/規(guī)模 ---> 剪枝(大家自己擴(kuò)展整理一下)
- 利用集成學(xué)習(xí)中的隨機(jī)森林算法來解決
五、集成算法
1. 為什么需要使用集成算法?
- 主要原因是單個模型存在一些問題,eg:效果不佳(欠擬合/模型的擬合能力不夠)、模型過擬合(在訓(xùn)練數(shù)據(jù)上的擬合能力太強(qiáng)/模型的學(xué)習(xí)能力太強(qiáng)),為了讓模型具有根據(jù)穩(wěn)定而且更佳效果的結(jié)果,采用使用多模型融合的一種策略,而這種策略就叫做集成算法
2. 集成算法的類別
-
a. Bagging
-
- 思想
- 使用不同的數(shù)據(jù)集來分別訓(xùn)練模型,然后將多個不同模型的預(yù)測結(jié)果直接融合產(chǎn)生預(yù)測值
- 產(chǎn)生數(shù)據(jù)集方式:采用有放回的重采樣的方式來產(chǎn)生不同的數(shù)據(jù)集;不同主要體現(xiàn)在兩個方面:數(shù)據(jù)的樣本數(shù)目不一樣、數(shù)據(jù)樣本不一樣
- 多個模型的融合方式:如果是分類,那么采用多數(shù)投票;如果是回歸,那么采用均值法
-
- 效果/作用
- 因為采用的是不同的數(shù)據(jù)集來訓(xùn)練模型的,所以每個模型考慮的樣本特征是不一樣的,所以有一些模型可能對于某些特殊特征(eg:噪音數(shù)據(jù)的特征)進(jìn)行了學(xué)習(xí),但是其它模型由于在訓(xùn)練中是不存在這些數(shù)據(jù)的,所以可能就不會學(xué)習(xí)這些特征;那么在將多個模型融合的過程中,這種比較少見的、比較特殊的特征信息在預(yù)測過程中就不會做過多的考慮;所以可以讓模型具有更高的魯棒性,從而可以緩解模型的過擬合的情況
-
- 經(jīng)典的算法
-
隨機(jī)森林
-
構(gòu)建的過程
- 從m條原始數(shù)據(jù)中使用有放回的重采樣抽取訓(xùn)練數(shù)據(jù)集m條,將抽取出來的m條數(shù)據(jù)進(jìn)行數(shù)據(jù)去重操作,得到真正用于訓(xùn)練的子數(shù)據(jù)集
- 利用抽取出來的子數(shù)據(jù)集來構(gòu)建決策樹模型,在決策樹的構(gòu)建過程中,在選擇劃分特征的時候,引入隨機(jī)特征劃分的策略:首先從原始特征中隨機(jī)選擇K個特征,然后從這K個特征中選擇最優(yōu)的劃分特征作為當(dāng)前節(jié)點的劃分;這種策略可以降低模型的過擬合(因為此時選擇的是局部最優(yōu)劃分)
- 使用上述兩個操作,迭代構(gòu)建N次,從而產(chǎn)生N個模型,這N個模型就是最終的隨機(jī)森林模型
- 使用構(gòu)建好的N個模型分別對待預(yù)測樣本進(jìn)行預(yù)測,然后將N個預(yù)測值做一個融合(分類:多數(shù)投票,回歸:均值)
-
-
-
b. Boosting
-
- 思想
- 使用一種模型迭代的方式,讓每一步的模型構(gòu)建都是讓模型的最終預(yù)測變的更加的準(zhǔn)確;也就是說通過boosting這種方式,可以讓模型的預(yù)測誤差率越來越??;也就是每次模型的構(gòu)建都是需要基于之前模型的預(yù)測結(jié)果上的。
-
- 效果/作用
- 可以提升模型的擬合能力,主要的作用就是解決模型的欠擬合
-
- 經(jīng)典的算法
-
Adaboost
-
思想
- 通過修改樣本的權(quán)重系數(shù),從而改變在模型構(gòu)建的時候,各個樣本預(yù)測失敗所帶來的損失函數(shù)值,讓模型在構(gòu)建的時候?qū)τ跈?quán)重系數(shù)比較大的樣本著重考慮,也就是盡可能的不要讓權(quán)重大的樣本預(yù)測失敗
- 在模型融合的時候,對于預(yù)測比較準(zhǔn)確的基模型,給一個比較大的權(quán)重,相當(dāng)于對于預(yù)測準(zhǔn)確的模型可信度相對比較高(權(quán)重體現(xiàn)的是可信度)
-
構(gòu)建過程
- 給定所有樣本初始權(quán)重一致
- 基于樣本以及樣本權(quán)重訓(xùn)練一個基模型,在這個基模型的構(gòu)建過程中,對于樣本權(quán)重大的樣本來講,在該基模型中,對于這些樣本預(yù)測比較準(zhǔn)確
- 當(dāng)當(dāng)前的基模型訓(xùn)練好后,計算出當(dāng)前基模型在訓(xùn)練數(shù)據(jù)集上的準(zhǔn)確率,基于這個準(zhǔn)確率計算當(dāng)前模型的可信度權(quán)重,準(zhǔn)確率越高,那么當(dāng)前基模型可信度權(quán)重越大,也就是表示該模型的預(yù)測結(jié)果越可靠
- 當(dāng)當(dāng)前的基模型訓(xùn)練好后,計算出每個訓(xùn)練樣本數(shù)據(jù)的預(yù)測情況(預(yù)測失敗or預(yù)測成功),然后根據(jù)預(yù)測情況修改樣本權(quán)重,如果預(yù)測失敗,那么樣本權(quán)重增大,讓該樣本在下一個模型構(gòu)建的時候具有更大的影響因子,如果預(yù)測成功,那么樣本權(quán)重減小。
- 當(dāng)錯誤率或者子模型的數(shù)目達(dá)到一定限制的時候,結(jié)束模型訓(xùn)練
-
預(yù)測過程
- 按照模型的訓(xùn)練過程,分別使用基礎(chǔ)模型對輸入數(shù)據(jù)進(jìn)行預(yù)測,并將預(yù)測結(jié)果進(jìn)行融合(加權(quán)和)
-
-
GBDT
-
思想
- 通過修改標(biāo)簽y值,讓每次構(gòu)建的模型的誤差都足夠小,當(dāng)模型誤差值最小時候,所對應(yīng)的標(biāo)簽值就是最優(yōu)值。所以在這個過程中,采用損失函數(shù)的梯度值作為下一個模型構(gòu)建時候的新的y值標(biāo)簽
-
構(gòu)建過程
- 訓(xùn)練出基礎(chǔ)模型
- 基于當(dāng)前的基礎(chǔ)模型計算一下?lián)p失函數(shù)梯度值,然后更新訓(xùn)練數(shù)據(jù)中的標(biāo)簽值,使用梯度值作為標(biāo)簽值
- 基于標(biāo)簽值更新的數(shù)據(jù)繼續(xù)訓(xùn)練下一個模型
- 當(dāng)損失函數(shù)值或者子模型的數(shù)目達(dá)到一定限制的時候,結(jié)束模型訓(xùn)練
-
預(yù)測過程
- 所有子模型的累加值就是最終的預(yù)測值
-
-
XGBoost
-
和GBDT的區(qū)別
- 加入模型復(fù)雜度的考慮,防止模型存在過擬合
- 底層構(gòu)建的時候,GBDT是串行構(gòu)建,XGBoost在選擇劃分特征的時候是并行構(gòu)建
- gbdt底層模型只支持決策樹,xgboost支持決策樹、線性回歸等模型
-
-
-
c. Stacking
-
結(jié)構(gòu)
- 使用原始數(shù)據(jù)訓(xùn)練第一層模型,然后使用第一層模型的預(yù)測值作為第二層模型的訓(xùn)練數(shù)據(jù);這里的第一層模型相當(dāng)于實現(xiàn)了數(shù)據(jù)特征提取的功能
結(jié)合后面深度學(xué)習(xí)的能力來了解
-
3. 各中集成算法的區(qū)別
- a. boosting和bagging有什么區(qū)別?
- b. 隨機(jī)森林和GBDT有什么區(qū)別?
- c. AdaBoost和GBDT有什么區(qū)別?
六、聚類算法
1. 什么叫做聚類算法? / 對于聚類算法的理解?
- 如果我們的訓(xùn)練數(shù)據(jù)中是不存在類別標(biāo)簽信息,而且我們又需要根據(jù)數(shù)據(jù)的特征將這些數(shù)據(jù)劃分成為不同的類別,那就需要使用聚類算法
2. 經(jīng)典的聚類算法
-
KMeans算法
-
思想
- 通過迭代的方式,讓每次簇中心的選擇都是讓樣本數(shù)據(jù)到簇中心點的距離最小化的一個過程
-
構(gòu)建過程
- 隨機(jī)初始化給定K個簇中心點
- 基于當(dāng)前簇中心點信息,對于所有樣本數(shù)據(jù)做一個簇的劃分;根據(jù)每個樣本到各個簇中心點的距離,選擇距離最近的簇,將當(dāng)前樣本認(rèn)為屬于該簇
- 基于當(dāng)前的簇劃分方式,更新簇中心點;選擇當(dāng)前簇中所有樣本的均值中心點作為新的簇中心點
- 繼續(xù)迭代上述2和3兩個步驟,直到迭代次數(shù)達(dá)到限制或者簇中心不再發(fā)生變化,結(jié)束模型的構(gòu)建;從而得到最終的簇中心點坐標(biāo)。
-
預(yù)測過程
- 分別計算待預(yù)測樣本到所有簇中心點的距離/相似度
- 認(rèn)為待預(yù)測樣本的所屬簇當(dāng)距離最近或者相似度最高的那個簇中心
-
偽代碼
- TODO: 自己加
-
存在什么問題以及解決方案
-
- 對異常點比較敏感
-
解決方案
- K中值聚類
-
- 對簇中心數(shù)目K值比較敏感
-
解決方案
- 因為K是簇的數(shù)目,也就是一般是類別數(shù)目,在實際工作中的時候,這個類別數(shù)目一般是可以確定的,所以在實際工作中一般采用直接給定的方式
- 可以采用一些不需要給定K值的聚類算法來做一個前置的計算, eg: BIRCH算法
-
- 對初始的簇中心點坐標(biāo)比較敏感
-
解決方案
- a. 二分kmeans
- b. kmeans++
- c. kmeans||
-
- 大規(guī)模數(shù)據(jù)的處理
-
解決方案
- Mini Batch KMeans
-
-
-
Mini Batch KMeans算法
-
和KMeans算法的區(qū)別
- KMeans算法在更新簇的時候會采用所有樣本,這樣在大規(guī)模數(shù)據(jù)的時候?qū)τ趦?nèi)存的壓力是比較大的;而Mini Batch KMeans算法在更新簇的時候,只需要采用部分樣本數(shù)據(jù)來更新,內(nèi)存的壓力是比較小的,所以比較時候大規(guī)模數(shù)據(jù)的聚類操作
- 效果:Mini Batch KMeans算法比KMeans算法,在訓(xùn)練效率上來講,要快,但是在效果上來講,比KMeans算法要稍微的差一點。
-
3. 擴(kuò)展的聚類算法(了解)
- 層次聚類
- 密度聚類
- 譜聚類
七、SVM算法
1. SVM算法的構(gòu)建原理/構(gòu)建思想
SVM是一種二分類的算法,算法的執(zhí)行目的是盡可能的讓兩個類別的數(shù)據(jù)分割開;也就是在兩個類別中找到一個最優(yōu)的數(shù)據(jù)劃分平面,而這個平面是讓兩個類別的數(shù)據(jù)分割的足夠開的,也就是兩個類別的數(shù)據(jù)離這個平面的距離是足夠遠(yuǎn)的;那這個距離我們稱之為間隔,離這個平面最近的樣本點我們稱為支持向量;所以SVM求解的就是讓支持向量到分割平面最大化的這樣一個劃分平面
-
為什么要找最大分割平面?
- 因為如果這個分割平面足夠大,那么表示兩個類別的數(shù)據(jù)特征上區(qū)分特別明顯,也就是說模型的區(qū)分能力足夠強(qiáng),也就是模型的魯棒性足夠的好。
2. SVM的公式推導(dǎo)
- 從最初的最大間隔優(yōu)化函數(shù)開始一致到SMO算法之前的最終優(yōu)化函數(shù)結(jié)束,這個過程需要自己能夠默寫出來、并且各個過程能夠理解(建議大家選擇線性可分SVM算法的過程)
3. SVM算法對于非線性可分?jǐn)?shù)據(jù)的解決方案
-
針對于數(shù)據(jù)本身是線性可分的,但是由于訓(xùn)練數(shù)據(jù)中存在異常數(shù)據(jù)點導(dǎo)致數(shù)據(jù)線性不可分的情況下,解決方案為:軟間隔
- 含義:在模型構(gòu)建過程中(找最優(yōu)分割平面的過程中),允許存在部分樣本分錯的情況,因為允許部分樣本分錯,所以找到的分隔平面會比不允許分錯情況下的大。
-
針對于數(shù)據(jù)本身就是非線性可分的情況下,解決方案為:核函數(shù)
含義:為了解決數(shù)據(jù)線性不可分的情況,一般采用的方式是將數(shù)據(jù)映射到高維空間中,讓數(shù)據(jù)變的線性可分,但是將數(shù)據(jù)映射到高維空間后,使用svm的求解過程中,存在向量的內(nèi)積計算,這個內(nèi)積計算對于高維空間的向量而言,計算量會非常大,所以直接映射的方式不可取,所以采用一種用低維度上的向量的運算來近似高維空間中的向量內(nèi)積,而這種方式就叫做核函數(shù)
-
類別:
-
線性核函數(shù)
- 這個時候相當(dāng)于沒有做非線性變換,也就是等價于線性可分SVM算法
-
多項式核函數(shù)
- 相當(dāng)于先對數(shù)據(jù)做一個多項式擴(kuò)展,然后再做線性可分SVM算法
-
高斯核函數(shù)
- 一般情況下,選擇該方式的效果最優(yōu)
- 相當(dāng)于將數(shù)據(jù)映射到無窮維空間上,所以效果一般不錯
-
4. SMO算法過程(可選,了解)
5. SVR算法原理過程(可選,了解)
-
從和SVC之間的區(qū)別來了解一下理念
- 在允許的誤差范圍內(nèi),找到一個最大的超平面,讓所有的樣本的預(yù)測值和實際值之間的差值小于給定的誤差
6. 噪音/異常數(shù)據(jù)攔截的解決方案
-
解決方案的思路:
- 學(xué)習(xí)正常數(shù)據(jù)的數(shù)據(jù)特征,對于待預(yù)測數(shù)據(jù)而言,如果待預(yù)測數(shù)據(jù)的數(shù)據(jù)特征不符合正常數(shù)據(jù)特征的話,那么就認(rèn)為是屬于異常數(shù)據(jù)
-
方式:
- OneClassSVM
- IsolationForest
八、二分類和多分類
1. 有哪些算法屬于二分類、有哪些算法屬于多分類
-
二分類
- Logistic回歸
- SVM算法
-
多分類
- Softmax回歸
- KNN
- 決策樹
2. 對于原本是二分類的算法,如果應(yīng)用到多分類的需求中
-
ovo
- 假定數(shù)據(jù)中存在K個類別,將兩兩類別的數(shù)據(jù)進(jìn)行組合成為一個新的數(shù)據(jù)集,使用新的數(shù)據(jù)集來訓(xùn)練模型,總共可以得到K(K-1)/2個模型,最終將這些模型做一個融合。融合方式選擇:多數(shù)投票(在所有基模型的預(yù)測結(jié)果中,出現(xiàn)次數(shù)最多的那個類別作為最終模型的預(yù)測結(jié)果)
- NOTE: 每個基模型都是一個二分類的模型
-
ovr
- 假定數(shù)據(jù)中存在K個類別,將其中一個類別作為正例(1),其它K-1個類別的數(shù)據(jù)作為負(fù)例(-1),使用這樣的子數(shù)據(jù)集來訓(xùn)練一個模型;通過改變正例的類別,分別訓(xùn)練K個模型,最終將這K個基模型做一個融合即可得到最終的預(yù)測結(jié)果。對于每個基模型而言,如果預(yù)測值大于0,那么認(rèn)為屬于正例,如果預(yù)測值小于0,那么認(rèn)為屬于負(fù)例;所以在K個基模型融合的時候,選擇預(yù)測值最大的那個模型所對應(yīng)的正例作為最終的預(yù)測結(jié)果。
- NOTE:每個基模型都是一個二分類的模型
糾錯碼機(jī)制
九、多標(biāo)簽算法(可選、了解)
1. 什么叫做多標(biāo)簽算法?
- 在模型中,同時存在多個需要預(yù)測的目標(biāo)屬性y值
2. 多標(biāo)簽應(yīng)用的解決方案
- a. 將多標(biāo)簽轉(zhuǎn)換為多分類的算法,認(rèn)為每個標(biāo)簽相當(dāng)于多分類中的一個取值;然后使用ovo的方式,進(jìn)行模型構(gòu)建
- b. Chains:認(rèn)為目標(biāo)屬性y值之間是存在依賴關(guān)系的,所以在模型構(gòu)建的時候,直接將所依賴的其它y值作為特征屬性存在,來預(yù)測當(dāng)前的y值。
- c. Calibrated Label Ranking
十、貝葉斯算法
1. 理解樸素貝葉斯算法的原理
-
之所以叫做樸素的原因:
- 假設(shè)樣本的特征屬性之間是獨立互不相干的
- 樣本的所屬類別是受特征屬性取值影響的
直接利用貝葉斯公式,來計算當(dāng)x給定的時候,y取值的概率值;選擇概率最大的取值作為最終的預(yù)測類別
2. 貝葉斯算法的訓(xùn)練過程
- 在訓(xùn)練數(shù)據(jù)中計算各個類別的先驗概率p(y=k)
- 計算各個類別中,各個特征屬性的取值的概率,也就是當(dāng)類別給定的時候,x取值的條件概率:p(x=i|y=k)
3. 貝葉斯算法的預(yù)測過程
- 直接把類別的先驗概率以及屬性的條件概率做一個累乘,選擇累乘結(jié)果最大的類別作為最終的輸出預(yù)測類別
4. 樸素貝葉斯算法的類別
-
高斯樸素貝葉斯
- 假定特征屬性的取值是服從高斯分布的,所以該模型比較適合連續(xù)的特征屬性
- 模型在訓(xùn)練條件概率的時候:會對每個類別的每個特征屬性都分別對應(yīng)的均值和方差,得到該類別該特征屬性所滿足的高斯概率密度函數(shù)。
-
伯努利樸素貝葉斯
- 假定特征屬性的取值是稀疏的,也就是將有值的情況認(rèn)為是屬于1,沒有值的情況認(rèn)為是屬于0的,所以認(rèn)為特征屬性是服從伯努利分布的,那在訓(xùn)練條件的時候,也就是計算的是伯努利的概率密度函數(shù);該算法比較適合高度稀疏的特征矩陣
-
多項式樸素貝葉斯
- 假定特征屬性的取值是服從多項式分布的,所以該模型比較適合離散的特征屬性
- 模型在訓(xùn)練條件概率的時候:直接計算每個類別的每個特征屬性的取值的樣本數(shù)目占當(dāng)前類別總樣本數(shù)目的概率作為條件概率
- NOTE: 為了防止出現(xiàn)條件概率為0的情況,做一個平滑轉(zhuǎn)換,一般為拉普拉斯變換
十一、EM算法
1. 理解EM算法的過程
2. 理解EM算法的應(yīng)用場景
- 如果在求解模型參數(shù)的同時,存在一些未知的隱變量也需要求解的,那么這個時候就比較合適使用EM算法思想來求解
3. 理解GMM高斯混合聚類
十二、隱馬爾科夫
1. 馬爾科夫性質(zhì)
- 在一個序列中,如果當(dāng)前時刻的狀態(tài)只和上一個時刻的狀態(tài)有關(guān),而和之前時刻(除了上一個時刻)的狀態(tài)沒有關(guān)系,那么認(rèn)為這樣的序列滿足馬爾科夫性質(zhì)
2. 隱馬爾科夫
在一個觀測序列中,值與值之間是存在關(guān)系的,并且這個關(guān)系是根據(jù)內(nèi)部的某種狀態(tài)來產(chǎn)生的,而這些未知的狀態(tài)(隱狀態(tài))之間是滿足馬爾科夫性質(zhì)的時候,我們就認(rèn)為當(dāng)前的序列的隱狀態(tài)的求解是隱馬爾科夫模型
-
HMM的三個主要元素
- 序列的初始狀態(tài)概率向量π
- 隱狀態(tài)之間的狀態(tài)轉(zhuǎn)移概率矩陣A
- 隱狀態(tài)和觀測值之間的轉(zhuǎn)移概率矩陣B
3. HMM的三個方面的問題
NOTE: 理解一下HMM算法到底可以干嘛 --> 理解一下Viterbi算法
-
a. 觀測序列的概率計算問題
- 前向算法
- 后向算法
-
b. 模型參數(shù)的求解問題
-
有監(jiān)督
- 直接統(tǒng)計、大數(shù)定理
-
無監(jiān)督
- EM算法
-
-
c. 隱狀態(tài)的預(yù)測問題
- Viterbi算法
十三、主題模型
1. 為什么需要主題模型?
- 因為如果數(shù)據(jù)中存在某種隱含的特征信息,eg:文本的主題信息,但是在其它的算法模型中,對于這個隱含的特征信息是不會考慮的,比如:在聚類算法中對文本數(shù)據(jù)做聚類,這個時候只會考慮單詞角度的相似度,不會考慮文本內(nèi)部主題內(nèi)容上的相似度。
2. 主題模型有什么作用?
- 提取原始數(shù)據(jù)中的隱含的特征信息,然后基于提取出來的特征信息再訓(xùn)練后續(xù)的模型,模型效果可能會更好,eg: 提取文本的主題內(nèi)容,然后基于文本的主題內(nèi)容信息來做一個聚類操作,那這個時候聚類考慮的就是文本與文本之間主題是否相似
3. 主題模型的應(yīng)用場景有哪些?
- 聚類前的數(shù)據(jù)預(yù)處理
- 特征提取/特征降維
- 推薦系統(tǒng)
4. 常見的主題模型
- LSA
- NMF
- LDA
十四、特征工程(重要)
特征使用方案
-
要實現(xiàn)業(yè)務(wù)需求目標(biāo)需要哪些數(shù)據(jù)?
- 基于業(yè)務(wù)理解,盡可能多的找出對因變量影響的所有自變量
-
可用性評估
- 獲取難度
- 覆蓋率
- 準(zhǔn)確率
特征獲取方案
-
如何獲取這些特征?
- 用戶行為數(shù)據(jù)
- 業(yè)務(wù)數(shù)據(jù)
- 第三方數(shù)據(jù)
-
如何存儲?
- 本地磁盤
- 數(shù)據(jù)庫
- 大數(shù)據(jù)平臺
數(shù)據(jù)清洗&特征處理
-
特征清洗
清洗異常樣本數(shù)據(jù)
-
采樣
-
數(shù)據(jù)不均衡
- 權(quán)重
- 上采樣
- 下采樣
- SMOTE算法
樣本權(quán)重
-
-
特征工程
-
單個特征
歸一化、標(biāo)準(zhǔn)化、區(qū)間縮放法
離散化/二值化/區(qū)間化
啞編碼/Dummy Coding
缺失值處理
-
數(shù)據(jù)變換
- log
- 指數(shù)
-
多個特征
-
增維
- 多項式擴(kuò)展
- 核函數(shù)
- GBDT+LR
-
降維
- PCA
- LDA
-
特征選擇
-
Filter
- 思路:自變量和因變量之間的關(guān)聯(lián)
- 相關(guān)系數(shù)
- 卡方檢驗
- 信息增益、互信息
-
Wrapper
思路:通過目標(biāo)函數(shù)(AUC/MSE)來決定是否加入一個變量
-
迭代:產(chǎn)生特征子集,評價
完全搜索
啟發(fā)式搜索
-
隨機(jī)搜索
- GA
- SA
-
Embedded
思路:學(xué)習(xí)器自身自動選擇特征
-
正則化:
- L1--Lasso
- L2--Ridge
-
決策樹
- 熵、信息增益
-
-
-
衍生變量
- 對原始數(shù)據(jù)根據(jù)業(yè)務(wù)進(jìn)行加工,生成的具有商業(yè)意義的變量
-
特征監(jiān)控
-
特征有效性分析
- 分析特征的重要性、權(quán)重
-
特征監(jiān)控
- 監(jiān)控重要特征,防止特征質(zhì)量下降,影響模型效果
經(jīng)典算法參考:
https://mp.weixin.qq.com/s?__biz=MzIyMzk1MDE3Nw==&mid=2247496852&idx=1&sn=c85184c60f12bd1735081bf26d612f7b&chksm=e814d09adf63598c1a3afc93871df596f108a2cc8041cca0d0a1a4cc52492f7aa81b75d19db3&mpshare=1&scene=23&srcid=10060l4GcAQ0jlbZvMHVmBdR#rd
聚類算法的效果就是根據(jù)所給定訓(xùn)練數(shù)據(jù)的數(shù)據(jù)特征,基于數(shù)據(jù)的特征信息,將具有相同特征信息的樣本數(shù)據(jù)認(rèn)為屬于同一個類別/簇,從而實現(xiàn)數(shù)據(jù)劃分的需求
XMind: ZEN - Trial Version