【機(jī)器學(xué)習(xí)基礎(chǔ)】Python機(jī)器學(xué)習(xí)入門(mén)指南(全)
前言
機(jī)器學(xué)習(xí) 作為人工智能領(lǐng)域的核心組成,是計(jì)算機(jī)程序?qū)W習(xí)數(shù)據(jù)經(jīng)驗(yàn)以?xún)?yōu)化自身算法,并產(chǎn)生相應(yīng)的“智能化的”建議與決策的過(guò)程。
一個(gè)經(jīng)典的機(jī)器學(xué)習(xí)的定義是:
A computer program is said to learn from experience E with respect to some class of tasks T and performance measure P, if its performance at tasks in T, as measured by P, improves with experience E.
1 機(jī)器學(xué)習(xí)概論
機(jī)器學(xué)習(xí)是關(guān)于計(jì)算機(jī)基于數(shù)據(jù)分布,學(xué)習(xí)構(gòu)建出概率統(tǒng)計(jì)模型,并運(yùn)用模型對(duì)數(shù)據(jù)進(jìn)行分析與預(yù)測(cè)的方法。按照學(xué)習(xí)數(shù)據(jù)分布的方式的不同,主要可以分為監(jiān)督學(xué)習(xí)和非監(jiān)督學(xué)習(xí):

1.1 監(jiān)督學(xué)習(xí)
從有標(biāo)注的數(shù)據(jù)(x為變量特征空間, y為標(biāo)簽)中,通過(guò)選擇的模型及確定的學(xué)習(xí)策略,再用合適算法計(jì)算后學(xué)習(xí)到最優(yōu)模型,并用模型預(yù)測(cè)的過(guò)程。
按照模型預(yù)測(cè)結(jié)果Y的取值有限或者無(wú)限的,可再進(jìn)一步分為分類(lèi)模型或者回歸模型;

1.2 非監(jiān)督學(xué)習(xí):
從無(wú)標(biāo)注的數(shù)據(jù)(x為變量特征空間),通過(guò)選擇的模型及確定的學(xué)習(xí)策略,再用合適算法計(jì)算后學(xué)習(xí)到最優(yōu)模型,并用模型發(fā)現(xiàn)數(shù)據(jù)的統(tǒng)計(jì)規(guī)律或者內(nèi)在結(jié)構(gòu)。
按照應(yīng)用場(chǎng)景,可以分為聚類(lèi),降維和關(guān)聯(lián)分析等模型。

2 機(jī)器學(xué)習(xí)建模流程

2.1 明確業(yè)務(wù)問(wèn)題
明確業(yè)務(wù)問(wèn)題是機(jī)器學(xué)習(xí)的先決條件,這里需要抽象出現(xiàn)實(shí)業(yè)務(wù)問(wèn)題的解決方案:需要學(xué)習(xí)什么樣的數(shù)據(jù)作為輸入,目標(biāo)是得到什么樣的模型做決策作為輸出。
(如:一個(gè)簡(jiǎn)單的新聞分類(lèi)問(wèn)題的場(chǎng)景,就是學(xué)習(xí)已有的新聞及其類(lèi)別標(biāo)簽數(shù)據(jù),得到一個(gè)文本分類(lèi)模型,通過(guò)模型對(duì)每天新的新聞做類(lèi)別預(yù)測(cè),以歸類(lèi)到每個(gè)新聞?lì)l道。)

2.2 數(shù)據(jù)選擇:收集及輸入數(shù)據(jù)
數(shù)據(jù)決定了機(jī)器學(xué)習(xí)結(jié)果的上限,而算法只是盡可能逼近這個(gè)上限。意味著數(shù)據(jù)的質(zhì)量決定了模型的最終效果,在實(shí)際的工業(yè)應(yīng)用中,算法通常占了很小的一部分,大部分工程師的工作都是在找數(shù)據(jù)、提煉數(shù)據(jù)、分析數(shù)據(jù)。數(shù)據(jù)選擇需要關(guān)注的是:
① 數(shù)據(jù)的代表性:代表性差的數(shù)據(jù),會(huì)導(dǎo)致模型擬合效果差;
② 數(shù)據(jù)時(shí)間范圍:監(jiān)督學(xué)習(xí)的特征變量X及標(biāo)簽Y如與時(shí)間先后有關(guān),則需要明確數(shù)據(jù)時(shí)間窗口,否則可能會(huì)導(dǎo)致數(shù)據(jù)泄漏,即存在和利用因果顛倒的特征變量的現(xiàn)象。(如預(yù)測(cè)明天會(huì)不會(huì)下雨,但是訓(xùn)練數(shù)據(jù)引入明天溫濕度情況);
③ 數(shù)據(jù)業(yè)務(wù)范圍:明確與任務(wù)相關(guān)的數(shù)據(jù)表范圍,避免缺失代表性數(shù)據(jù)或引入大量無(wú)關(guān)數(shù)據(jù)作為噪音;
2.3 特征工程:數(shù)據(jù)預(yù)處理及特征提取
特征工程就是將原始數(shù)據(jù)加工轉(zhuǎn)化為模型可用的特征,按技術(shù)手段一般可分為:
① 數(shù)據(jù)預(yù)處理:缺失值/異常值處理,數(shù)據(jù)離散化,數(shù)據(jù)標(biāo)準(zhǔn)化等;
② 特征提取:特征表示,特征衍生,特征選擇,特征降維等;
2.3.1 數(shù)據(jù)預(yù)處理
異常值處理
收集的數(shù)據(jù)由于人為或者自然因素可能引入了異常值(噪音),這會(huì)對(duì)模型學(xué)習(xí)進(jìn)行干擾。

通常需要處理人為引起的異常值,通過(guò)業(yè)務(wù)/技術(shù)手段(如3σ準(zhǔn)則)判定異常值,再由(python、正則式匹配)等方式篩選異常的信息,并結(jié)合業(yè)務(wù)情況刪除或者替換數(shù)值。
缺失值處理
數(shù)據(jù)缺失的部分,通過(guò)結(jié)合業(yè)務(wù)進(jìn)行填充數(shù)值、不做處理或者刪除。根據(jù)缺失率情況及處理方式分為以下情況:
① 缺失率較高,并結(jié)合業(yè)務(wù)可以直接刪除該特征變量。經(jīng)驗(yàn)上可以新增一個(gè)bool類(lèi)型的變量特征記錄該字段的缺失情況,缺失記為1,非缺失記為0;
② 缺失率較低,結(jié)合業(yè)務(wù)可使用一些缺失值填充手段,如pandas的fillna方法、訓(xùn)練隨機(jī)森林模型預(yù)測(cè)缺失值填充;
③ 不做處理:部分模型如隨機(jī)森林、xgboost、lightgbm能夠處理數(shù)據(jù)缺失的情況,不需要對(duì)缺失數(shù)據(jù)做任何的處理。
數(shù)據(jù)離散化
數(shù)據(jù)離散化能減小算法的時(shí)間和空間開(kāi)銷(xiāo)(不同算法情況不一),并可以使特征更有業(yè)務(wù)解釋性。
離散化是將連續(xù)的數(shù)據(jù)進(jìn)行分段,使其變?yōu)橐欢味坞x散化的區(qū)間,分段的原則有等距離、等頻率等方法。
數(shù)據(jù)標(biāo)準(zhǔn)化
數(shù)據(jù)各個(gè)特征變量的量綱差異很大,可以使用數(shù)據(jù)標(biāo)準(zhǔn)化消除不同分量量綱差異的影響,加速模型收斂的效率。常用的方法有:
① min-max 標(biāo)準(zhǔn)化:
將數(shù)值范圍縮放到(0,1),但沒(méi)有改變數(shù)據(jù)分布。max為樣本最大值,min為樣本最小值。

② z-score 標(biāo)準(zhǔn)化:
將數(shù)值范圍縮放到0附近, 經(jīng)過(guò)處理的數(shù)據(jù)符合標(biāo)準(zhǔn)正態(tài)分布。u是平均值,σ是標(biāo)準(zhǔn)差。

2.3.2 特征提取
特征表示
數(shù)據(jù)需要轉(zhuǎn)換為計(jì)算機(jī)能夠處理的數(shù)值形式。如果數(shù)據(jù)是圖片數(shù)據(jù)需要轉(zhuǎn)換為RGB三維矩陣的表示。

字符類(lèi)的數(shù)據(jù)可以用多維數(shù)組表示,有Onehot獨(dú)熱編碼表示、word2vetor分布式表示及bert動(dòng)態(tài)編碼等;
特征衍生
基礎(chǔ)特征對(duì)樣本信息的表述有限,可通過(guò)特征衍生出新含義的特征進(jìn)行補(bǔ)充。特征衍生是對(duì)現(xiàn)有基礎(chǔ)特征的含義進(jìn)行某種處理(聚合/轉(zhuǎn)換之類(lèi)),常用方法如:
① 結(jié)合業(yè)務(wù)的理解做衍生:聚合的方式是指對(duì)字段聚合后求平均值、計(jì)數(shù)、最大值等。比如通過(guò)12個(gè)月工資可以加工出:平均月工資,薪資最大值 等等;
轉(zhuǎn)換的方式是指對(duì)字段間做加減乘除之類(lèi)。比如通過(guò)12個(gè)月工資可以加工出:當(dāng)月工資收入與支出的比值、差值等等;
② 使用特征衍生工具:如Featuretools等;
特征選擇
特征選擇篩選出顯著特征、摒棄非顯著特征。特征選擇方法一般分為三類(lèi):
① 過(guò)濾法:按照特征的發(fā)散性或者相關(guān)性指標(biāo)對(duì)各個(gè)特征進(jìn)行評(píng)分后選擇,如方差驗(yàn)證、相關(guān)系數(shù)、IV值、卡方檢驗(yàn)及信息增益等方法。
② 包裝法:每次選擇部分特征迭代訓(xùn)練模型,根據(jù)模型預(yù)測(cè)效果評(píng)分選擇特征的去留。
③ 嵌入法:使用某些模型進(jìn)行訓(xùn)練,得到各個(gè)特征的權(quán)值系數(shù),根據(jù)權(quán)值系數(shù)從大到小來(lái)選擇特征,如XGBOOST特征重要性選擇特征。

特征降維
如果特征選擇后的特征數(shù)目仍太多,這種情形下經(jīng)常會(huì)有數(shù)據(jù)樣本稀疏、距離計(jì)算困難的問(wèn)題(稱(chēng)為 “維數(shù)災(zāi)難”),可以通過(guò)特征降維解決。常用的降維方法有:主成分分析法(PCA),
線(xiàn)性判別分析法(LDA)等。
2.4 模型訓(xùn)練
模型訓(xùn)練是選擇模型學(xué)習(xí)數(shù)據(jù)分布的過(guò)程。這過(guò)程還需要依據(jù)訓(xùn)練結(jié)果調(diào)整算法的(超)參數(shù),使得結(jié)果變得更加優(yōu)良。
2.4.1 數(shù)據(jù)集劃分
訓(xùn)練模型前,一般會(huì)把數(shù)據(jù)集分為訓(xùn)練集和測(cè)試集,并可再對(duì)訓(xùn)練集再細(xì)分為訓(xùn)練集和驗(yàn)證集,從而對(duì)模型的泛化能力進(jìn)行評(píng)估。
① 訓(xùn)練集(training set):用于運(yùn)行學(xué)習(xí)算法。
② 開(kāi)發(fā)驗(yàn)證集(development set)用于調(diào)整參數(shù),選擇特征以及對(duì)算法其它優(yōu)化。常用的驗(yàn)證方式有交叉驗(yàn)證Cross-validation,留一法等;
③ 測(cè)試集(test set)用于評(píng)估算法的性能,但不會(huì)據(jù)此改變學(xué)習(xí)算法或參數(shù)。

2.4.2 模型選擇
常見(jiàn)的機(jī)器學(xué)習(xí)算法如下:

模型選擇取決于數(shù)據(jù)情況和預(yù)測(cè)目標(biāo)。可以訓(xùn)練多個(gè)模型,根據(jù)實(shí)際的效果選擇表現(xiàn)較好的模型或者模型融合。

2.4.3 模型訓(xùn)練
訓(xùn)練過(guò)程可以通過(guò)調(diào)參進(jìn)行優(yōu)化,調(diào)參的過(guò)程是一種基于數(shù)據(jù)集、模型和訓(xùn)練過(guò)程細(xì)節(jié)的實(shí)證過(guò)程。超參數(shù)優(yōu)化需要基于對(duì)算法的原理的理解和經(jīng)驗(yàn),此外還有自動(dòng)調(diào)參技術(shù):網(wǎng)格搜索、隨機(jī)搜索及貝葉斯優(yōu)化等。
2.5 模型評(píng)估
模型評(píng)估的標(biāo)準(zhǔn):模型學(xué)習(xí)的目的使學(xué)到的模型對(duì)新數(shù)據(jù)能有很好的預(yù)測(cè)能力(泛化能力)。現(xiàn)實(shí)中通常由訓(xùn)練誤差及測(cè)試誤差評(píng)估模型的訓(xùn)練數(shù)據(jù)學(xué)習(xí)程度及泛化能力。
2.5.1 評(píng)估指標(biāo)
① 評(píng)估分類(lèi)模型:常用的評(píng)估標(biāo)準(zhǔn)有查準(zhǔn)率P、查全率R、兩者調(diào)和平均F1-score 等,并由混淆矩陣的統(tǒng)計(jì)相應(yīng)的個(gè)數(shù)計(jì)算出數(shù)值:

混淆矩陣 查準(zhǔn)率是指分類(lèi)器分類(lèi)正確的正樣本(TP)的個(gè)數(shù)占該分類(lèi)器所有預(yù)測(cè)為正樣本個(gè)數(shù)(TP+FP)的比例;
查全率是指分類(lèi)器分類(lèi)正確的正樣本個(gè)數(shù)(TP)占所有的正樣本個(gè)數(shù)(TP+FN)的比例。
F1-score是查準(zhǔn)率P、查全率R的調(diào)和平均:

② 評(píng)估回歸模型:常用的評(píng)估指標(biāo)有RMSE均方根誤差 等。反饋的是預(yù)測(cè)數(shù)值與實(shí)際值的擬合情況。

③ 評(píng)估聚類(lèi)模型:可分為兩類(lèi)方式,一類(lèi)將聚類(lèi)結(jié)果與某個(gè)“參考模型”的結(jié)果進(jìn)行比較,稱(chēng)為“外部指標(biāo)”(external index):如蘭德指數(shù),F(xiàn)M指數(shù) 等;另一類(lèi)是直接考察聚類(lèi)結(jié)果而不利用任何參考模型,稱(chēng)為“內(nèi)部指標(biāo)”(internal index):如緊湊度、分離度 等。
2.5.2 模型評(píng)估及優(yōu)化

根據(jù)訓(xùn)練集及測(cè)試集的指標(biāo)表現(xiàn),分析原因并對(duì)模型進(jìn)行優(yōu)化,常用的方法有:

2.6 模型決策
決策是機(jī)器學(xué)習(xí)最終目的,對(duì)模型預(yù)測(cè)信息加以分析解釋?zhuān)?yīng)用于實(shí)際的工作領(lǐng)域。
需要注意的是工程上是結(jié)果導(dǎo)向,模型在線(xiàn)上運(yùn)行的效果直接決定模型的成敗,不僅僅包括其準(zhǔn)確程度、誤差等情況,還包括其運(yùn)行的速度(時(shí)間復(fù)雜度)、資源消耗程度(空間復(fù)雜度)、穩(wěn)定性的綜合考慮。
3 ?Python實(shí)戰(zhàn)
#?這是一個(gè)簡(jiǎn)單的demo。使用iris植物的數(shù)據(jù),訓(xùn)練iris分類(lèi)模型,通過(guò)模型預(yù)測(cè)識(shí)別品種。
import?pandas?as?pd
#?加載數(shù)據(jù)集?
data?=?load_iris()
df?=?pd.DataFrame(data.data,?columns=data.feature_names)
df.head()
#?使用pandas_profiling庫(kù)分析數(shù)據(jù)情況
import?pandas_profiling
df.profile_report(title='iris')
#?劃分標(biāo)簽y,特征x
y?=?df['class']
x?=?df.drop('class',?axis=1)
#劃分訓(xùn)練集,測(cè)試集
from?sklearn.model_selection?import?train_test_split
train_x,?test_x,?train_y,?test_y?=?train_test_split(x,?y)
#?模型訓(xùn)練
from?xgboost?import?XGBClassifier
#?選擇模型
xgb?=?XGBClassifier(max_depth=1,?n_estimators=1)
xgb.fit(train_x,?train_y)
from?sklearn.metrics?import?precision_score,?recall_score,?f1_score,?accuracy_score,?roc_curve,?auc
def?model_metrics(model,?x,?y,?pos_label=2):
????"""
????評(píng)估函數(shù)
????"""
????yhat?=?model.predict(x)
????result?=?{'accuracy_score':accuracy_score(y,?yhat),
??????????????'f1_score_macro':?f1_score(y,?yhat,?average?=?"macro"),
??????????????'precision':precision_score(y,?yhat,average="macro"),
??????????????'recall':recall_score(y,?yhat,average="macro")
?????????????}
????return?result
#?模型評(píng)估結(jié)果
print("TRAIN")
print(model_metrics(xgb,?train_x,?train_y))
print("TEST")
print(model_metrics(xgb,?test_x,?test_y))
#?模型預(yù)測(cè)
xgb.predict(test_x)
往期精彩回顧
本站知識(shí)星球“黃博的機(jī)器學(xué)習(xí)圈子”(92416895)
本站qq群704220115。
加入微信群請(qǐng)掃碼:
