前端也要懂機(jī)器學(xué)習(xí)之一
背景:
近年來機(jī)器學(xué)習(xí)的熱度不斷升高,前端領(lǐng)域也在不斷布局,從大的研究方向來看,有前端智能化、端智能;從框架這個角度來看,也有很多js版的框架,例如TensorFlow.js、Ml.js、Brain.js等。雖然當(dāng)前來看其在前端落地的應(yīng)用還不是很多,但是把握趨勢就是把握未來。本文將通過上下兩篇來對機(jī)器學(xué)習(xí)的內(nèi)容進(jìn)行闡述,這是第一篇,主要介紹一些基礎(chǔ)知識和特征工程;后續(xù)推出的一批主要利用闡述機(jī)器學(xué)習(xí)中的監(jiān)督學(xué)習(xí)算法和非監(jiān)督學(xué)習(xí)算法。
一、基礎(chǔ)
1.1 定義
機(jī)器學(xué)習(xí)是從數(shù)據(jù)中自動分析獲得模型,并利用模型對未知數(shù)據(jù)進(jìn)行預(yù)測。
1.2 算法分類
機(jī)器學(xué)習(xí)的前提是數(shù)據(jù),根據(jù)數(shù)據(jù)中是否有目標(biāo)可以劃分為:監(jiān)督學(xué)習(xí)算法和無監(jiān)督學(xué)習(xí)算法。
- 監(jiān)督學(xué)習(xí)算法——輸入數(shù)據(jù)是由輸入特征值和目標(biāo)值所組成。
- 無監(jiān)督學(xué)習(xí)算法——輸入數(shù)據(jù)是由輸入特征值和目標(biāo)值所組成
1.3 如何選擇合適算法
機(jī)器學(xué)習(xí)有這么多算法,面對一個問題時應(yīng)該如何選擇合適的算法成為了不可避免的問題,下面就來敘述兩條選擇合適算法的黃金法則。
1.確定使用機(jī)器學(xué)習(xí)算法的目的。
- 將數(shù)據(jù)劃分為離散的組是唯一需求——聚類算法
- 除將數(shù)據(jù)劃分為離散的組,還需要估計數(shù)據(jù)與每個組的相似度——密度估計算法
- 目標(biāo)變量為離散型——分類算法
- 目標(biāo)變量為連續(xù)型——回歸算法
- 若想要預(yù)測目標(biāo)變量的值——監(jiān)督學(xué)習(xí)算法
- 若無目標(biāo)變量值——無監(jiān)督學(xué)習(xí)
2.需要分析或收集的數(shù)據(jù)是什么,了解其數(shù)據(jù)特征
- 特征值是離散型變量還是連續(xù)型變量
- 特征值中是否存在缺失的值
- 何種原因造成缺失值
- 數(shù)據(jù)中是否存在異常值
- 某個特征發(fā)生的頻率如何
- ……
1.4 整體流程
不管多么復(fù)雜的內(nèi)容經(jīng)過前人的總結(jié)最會有一套方法論供我們這樣的小白使用,下面就來闡述一下機(jī)器學(xué)習(xí)通用的流程。
獲取數(shù)據(jù)
獲取數(shù)據(jù)是機(jī)器學(xué)習(xí)的第一步,例如使用公開的數(shù)據(jù)源、爬蟲獲取數(shù)據(jù)源、日志中獲取數(shù)據(jù)、商業(yè)數(shù)據(jù)等。
數(shù)據(jù)處理
得到數(shù)據(jù)后并不一定符合使用需求,所以需要進(jìn)行數(shù)據(jù)清洗、數(shù)據(jù)填充、數(shù)據(jù)格式轉(zhuǎn)換,達(dá)到減小訓(xùn)練的數(shù)據(jù)量,加快算法的訓(xùn)練時間的目的。
特征工程
特征工程是使用專業(yè)背景知識和技巧處理數(shù)據(jù),使得特征能在機(jī)器學(xué)習(xí)算法上發(fā)揮更好的作用的過程,直接影響機(jī)器學(xué)習(xí)的效果,主要包含特征提取、特征預(yù)處理、特征降維。
算法訓(xùn)練
將處理之后的數(shù)據(jù)輸入到合適的算法進(jìn)行訓(xùn)練。
模型評估
使用測試集來評估模型的性能.模型性能指標(biāo)有很多,比如在分類模型中常用的有錯誤率,精準(zhǔn)率,召回率,F(xiàn)1指標(biāo),ROC等。
應(yīng)用
將機(jī)器學(xué)習(xí)算法轉(zhuǎn)換為應(yīng)用程序執(zhí)行實(shí)際任務(wù),從而檢驗(yàn)該算法是否可以在實(shí)際工作中正常使用。
二、特征工程
業(yè)界流傳著一句話 “數(shù)據(jù)決定了機(jī)器學(xué)習(xí)的上限,而算法只是盡可能逼近這個上限”,這里的數(shù)據(jù)指的就是經(jīng)過特征工程處理后的數(shù)據(jù)。特征工程是使用專業(yè)背景知識和技巧處理數(shù)據(jù),使得特征能在機(jī)器學(xué)習(xí)算法上發(fā)揮更好的作用的過程,可見特征工程在機(jī)器學(xué)習(xí)中的重要地位。對于特征工程主要分為三步:特征抽取、特征預(yù)處理、特征降維。
注:特征工程是一個很深的學(xué)科,此處不展開闡述。
2.1 特征提取
特征提取指的就是將任意數(shù)據(jù)(如文本或圖像)轉(zhuǎn)換為可用于機(jī)器學(xué)習(xí)的數(shù)字特征,常用的主要包含:字典特征提取、文本特征提取、圖像特征提取。
2.2 特征預(yù)處理
通過特征提取,能得到未經(jīng)處理的特征,該特征具有以下問題:
量綱不同:特征可能具有量綱,導(dǎo)致其特征的規(guī)格不一樣,容易影響(支配)目標(biāo)結(jié)果,使得一些算法無法學(xué)習(xí)到其它的特征,需要進(jìn)行無量綱化處理。
信息冗余:對于某些定量特征,其包含的有效信息為區(qū)間劃分,需要進(jìn)行二值化處理。
定性特征不能直接使用:某些機(jī)器學(xué)習(xí)算法和模型只接受定量特征的輸入,則需要將定性特征轉(zhuǎn)換為定量特征,可通過啞編碼實(shí)現(xiàn)。
2.2.1 無量綱化
無量綱化使不同規(guī)格的數(shù)據(jù)轉(zhuǎn)換到同一規(guī)則,常用方法有歸一化和標(biāo)準(zhǔn)化
1.歸一化
- 定義
對原始數(shù)據(jù)進(jìn)行線性變換,使得結(jié)果映射到[0,1]之間。
- 計算公式
- 特點(diǎn)
最大最小值容易受到異常點(diǎn)影響,穩(wěn)定性較差。
2.標(biāo)準(zhǔn)化
- 定義
將原始數(shù)據(jù)進(jìn)行變換到均值為0、標(biāo)準(zhǔn)差為1的范圍內(nèi)
- 計算公式
- 特點(diǎn)
較少的異常點(diǎn)對結(jié)果影響不大,穩(wěn)定性較好。
2.2.2 定量特征二值化
對于定量特征可進(jìn)行二值化,通過選取一個合適的閾值,大于某閾值的為1,小余等于某閾值的為0。
2.2.3 定性特征啞編碼
大部分算法對于定性特征無法訓(xùn)練模型,利用啞編碼(one-hot)可以將定性特征處理為定量特征用于模型訓(xùn)練,其基本思想是:將離散特征的每一種值看成一種狀態(tài),若該特征有N個值,則存在N種狀態(tài),例如女孩子的頭發(fā)按照辮子的多少可以劃分為:無辮子、一個辮子、兩個辮子、多個辮子,則該特征有4種狀態(tài),利用啞編碼可以表示為:
- 無辮子 ====》[1, 0, 0, 0]
- 一個辮子 ====》[0, 1, 0, 0]
- 兩個辮子 ====》[0, 0, 1, 0]
- 多個辮子 ====》[0, 0, 0, 1]
2.3 特征降維
在機(jī)器學(xué)習(xí)中對維度較高的數(shù)據(jù)進(jìn)行處理時會極大消耗系統(tǒng)資源,甚至產(chǎn)生維度災(zāi)難。在某些限定條件下,通過降維的方式可降低隨機(jī)變量的個數(shù),用一個低維度向量來表示原始高維度的特征。常用的降維的方式有:特征選擇、PCA、LDA等。
2.3.1 特征選擇
數(shù)據(jù)預(yù)處理完畢之后需要選擇有意義的特征進(jìn)行訓(xùn)練,特征選擇從以下兩方面考慮:
特征是否發(fā)散:若某特征不發(fā)散(例如方差接近為0),則認(rèn)為該特征無差異。
特征與目標(biāo)的相關(guān)性:優(yōu)先選擇與目標(biāo)相關(guān)性較高的特征。
常用的特征選擇方式有:Filter(過濾法)、Wrapper(包裝法)、Embedded(集成法)。
2.3.1.1 Filter(過濾法)
先進(jìn)行特征選擇,然后去訓(xùn)練學(xué)習(xí)器,其特征選擇的過程與學(xué)習(xí)器無關(guān)。其主要思想是給每一維的特征賦予權(quán)重,權(quán)重代表該特征的重要性,然后設(shè)定閾值或者待選擇閾值的個數(shù)選擇特征。常用方法有方差選擇法(低方差特征過濾)、相關(guān)系數(shù)法等。
一、低方差特征過濾
方差指的是各變量值與其均值離差平方的平均數(shù),是測算數(shù)值型數(shù)據(jù)離散程度的重要方法,方差越大則表征數(shù)據(jù)的離散程度越大,反之越小。對于數(shù)據(jù)中的特征值,方差小則表示特征大多樣本的值比較相近;方差大則表示特征很多樣本的值都有差別。低方差特征過濾正是基于該思想,通過設(shè)定方差閾值來去掉小于該閾值的特征。方差計算公式如下:
二、相關(guān)系數(shù)法
皮爾遜相關(guān)系數(shù)(r)定義為兩個變量之間的協(xié)方差和標(biāo)準(zhǔn)差的商,是反映變量之間相關(guān)關(guān)系密切程度的統(tǒng)計指標(biāo),其值r范圍為[-1, 1],含義為:
- 當(dāng)r > 0時表示兩變量正相關(guān)
- r < 0時,兩變量為負(fù)相關(guān)
- 當(dāng)|r|=1時,表示兩變量為完全相關(guān)
- 當(dāng)r=0時,表示兩變量間無相關(guān)關(guān)系
- 當(dāng)0<|r|<1時,表示兩變量存在一定程度的相關(guān)。且|r|越接近1,兩變量間線性關(guān)系越密切;|r|越接近于0,表示兩變量的線性相關(guān)越弱
2.3.1.2 Wrapper(包裝法)
把要使用的分類器作為特征選擇的評價函數(shù),對于特定的分類器選擇最優(yōu)的特征子集。其主要思想是將子集的選擇看作是一個搜索尋優(yōu)問題,生成不同的組合,對組合進(jìn)行評價,再與其它的組合進(jìn)行比較。常用方法有遞歸特征消除法。
- 遞歸特征消除的主要思想是反復(fù)的構(gòu)建模型(如SVM或者回歸模型)然后選出最好的(或者最差的)的特征(可以根據(jù)系數(shù)來選),把選出來的特征選擇出來,然后在剩余的特征上重復(fù)這個過程,直到所有特征都遍歷了。這個過程中特征被消除的次序就是特征的排序。因此,這是一種尋找最優(yōu)特征子集的貪心算法。
2.3.1.3 Embedded(集成法)
將特征選擇嵌入到模型訓(xùn)練當(dāng)中。其主要思想是通過使用某些機(jī)器學(xué)習(xí)的算法和模型進(jìn)行訓(xùn)練,得到各個特征的權(quán)值系數(shù),根據(jù)系數(shù)從大到小選擇特征。常用方法有:基于懲罰項(xiàng)的特征選擇法(L1、L2)、決策樹的特征選擇法(信息熵、信息增益)。
注:該方法與算法強(qiáng)相關(guān),所以在算法實(shí)現(xiàn)的時候進(jìn)行闡述。
2.3.2 PCA(主成分分析法)
主成分分析(Principal components analysis,PCA)是一種分析、簡化數(shù)據(jù)集的技術(shù)。主成分分析經(jīng)常用于減少數(shù)據(jù)集的維數(shù),同時保持?jǐn)?shù)據(jù)集中的對方差貢獻(xiàn)最大的特征(旨在找到數(shù)據(jù)中的主成分,并利用這些主成分表征原始數(shù)據(jù),從而達(dá)到降維的目的)。這是通過保留低階主成分,忽略高階主成分做到的。
一、 優(yōu)缺點(diǎn)
1.優(yōu)點(diǎn):
- 降低數(shù)據(jù)的復(fù)雜性,識別最重要的多個特征
- 僅需方差衡量信息量,不受數(shù)據(jù)集以外的因素影響
- 各主成分之間正交,可消除原始數(shù)據(jù)成分間的相互影響的因素
- 計算方法簡單,主要運(yùn)算式特征值分解,易于實(shí)現(xiàn)
2.缺點(diǎn):
可能損失有用信息(由于沒有考慮數(shù)據(jù)標(biāo)簽,容易將不同類別數(shù)據(jù)完全混合在一起,很難區(qū)分)
- 二適用數(shù)據(jù)類型——數(shù)值型數(shù)據(jù)
2.3.3 LDA(線性判別分析法)
LDA是一種監(jiān)督學(xué)習(xí)的降維技術(shù),它的數(shù)據(jù)集的每個樣本是有類別輸出的。PCA與此不同,PCA是不考慮樣本類別輸出的無監(jiān)督降維技術(shù)。LDA的思想是“最大化類間距離和最小化類內(nèi)距離”(將數(shù)據(jù)在低維度上進(jìn)行投影,投影后希望每一種類別數(shù)據(jù)的投影點(diǎn)盡可能的接近,而不同類別的數(shù)據(jù)的類別中心之間的距離盡可能的大)
1.優(yōu)點(diǎn):
- 在降維過程中可以使用類別的先驗(yàn)知識經(jīng)驗(yàn)
- LDA在樣本分類信息依賴均值而不是方差的時候,比PCA之類的算法較優(yōu)
2.缺點(diǎn):
- LDA不適合對非高斯分布(非正態(tài)分布)樣本進(jìn)行降維
- LDA降維后可降為[1, 2,……,k-1]維,其中k為類別數(shù)
- LDA在樣本分類信息依賴方差而不是均值的時候,降維效果不好
- LDA可能過度擬合數(shù)據(jù)
參考文獻(xiàn)
- 特征工程到底是什么
- LDA和PCA降維
- 機(jī)器學(xué)習(xí)實(shí)戰(zhàn)
本文轉(zhuǎn)載自微信公眾號「執(zhí)鳶者」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請聯(lián)系執(zhí)鳶者公眾號。