機(jī)器學(xué)習(xí)的三種特點(diǎn)和算法
沒有哪一種算法能夠適用所有情況,只有針對某一種問題更有用的算法。
機(jī)器學(xué)習(xí)算法不會要求一個問題被 100%求解,取而代之的是把問題轉(zhuǎn)化為最優(yōu)化的問題,用不同的算法優(yōu)化問題,從而比較得到盡量好的結(jié)果。因此對于數(shù)據(jù)科學(xué)家來說,理解算法顯得格外重要,理解不同算法的思想可以幫助數(shù)據(jù)科學(xué)家更從容地面對不同的應(yīng)用場景。
本文列出了常用的機(jī)器學(xué)習(xí)算法的基本概念、主要特點(diǎn)和適用場景,希望可以在大家選擇合適的機(jī)器學(xué)習(xí)算法解決實(shí)際問題時起到一點(diǎn)參考作用。
本文主要提及的機(jī)器學(xué)習(xí)算法包括:
K近鄰(KNN)算法
樸素貝葉斯算法
決策樹算法
SVM算法
adaboost算法
EM算法(期望最大化算法)
下面我們將具體展開介紹。
1.K近鄰(KNN)算法
KNN算法的基本介紹:假若一個特征空間中大多數(shù)的樣本屬于某一個類別,則在這個特征空間中,k個最相似的樣本也屬于這個類別。
該算法由兩個步驟組成:(1)對于一個給定的搜索訓(xùn)練集按一定距離度量,來找到一個 的值。(2)在這個KNN當(dāng)中,根據(jù)大多數(shù)分為一致的類來進(jìn)行分類。
用以下這幅圖可以很好的解釋KNN算法:
不同形狀的點(diǎn),為不同標(biāo)簽的點(diǎn)。其中綠色點(diǎn)為未知標(biāo)簽的數(shù)據(jù)點(diǎn)?,F(xiàn)在要對綠色點(diǎn)進(jìn)行預(yù)測。由圖不難得出:
如果k=3,那么離綠色點(diǎn)最近的有2個紅色三角形和1個藍(lán)色的正方形,這3個點(diǎn)投票,于是綠色的這個待分類點(diǎn)屬于紅色的三角形。
如果k=5,那么離綠色點(diǎn)最近的有2個紅色三角形和3個藍(lán)色的正方形,這5個點(diǎn)投票,于是綠色的這個待分類點(diǎn)屬于藍(lán)色的正方形。
K近鄰(KNN)算法優(yōu)點(diǎn):
·算法原理簡單,容易理解,也較容易實(shí)現(xiàn)。
·不需要進(jìn)行訓(xùn)練,只需要保存訓(xùn)練樣本和標(biāo)簽。
·不易受小錯誤概率的影響。經(jīng)理論證明,最近鄰的漸進(jìn)錯誤率最壞時不超過兩倍的貝葉斯錯誤率,最好時接近或達(dá)到貝葉斯錯誤率。
K近鄰(KNN)算法缺點(diǎn):
·K的選擇不固定。
·預(yù)測結(jié)果容易受到噪聲數(shù)據(jù)的影響。
·當(dāng)樣本不平衡時,新樣本的類別偏向訓(xùn)練樣本中數(shù)量占優(yōu)的類別,容易導(dǎo)致預(yù)測錯誤。
·當(dāng)數(shù)據(jù)量較大時,具有較高的計算復(fù)雜度和內(nèi)存消耗,因為對每一個待分類的文本,都要計算它到全體已知樣本的距離,才能求得它的K個最近鄰。
適用場景及主要應(yīng)用領(lǐng)域:
由于KNN方法主要靠周圍有限的鄰近的樣本,而不是靠判別類域的方法來確定所屬類別的,因此對于類域的交叉或重疊較多的待分樣本集來說,KNN方法較其他方法更為適合。在實(shí)際應(yīng)用當(dāng)中,KNN算法在人臉識別、文字識別、醫(yī)學(xué)圖像處理等領(lǐng)域可以取得良好的分類效果。
K近鄰(KNN)算法需要注意的問題:
·數(shù)據(jù)特征之間量綱不統(tǒng)一時,需要對數(shù)據(jù)進(jìn)行歸一化處理,否則會出現(xiàn)大數(shù)吃小數(shù)的問題;
·數(shù)據(jù)之間的距離計算通常采用歐式距離;
·kNN算法中K值的選取會對結(jié)果產(chǎn)生較大的影響,一般k值要小于訓(xùn)練樣本數(shù)據(jù)的平方根;
·通常采用交叉驗證法來選擇最優(yōu)的K值。
2.樸素貝葉斯算法
樸素貝葉斯分類是一種十分簡單的分類算法,即對于給出的待分類項,求解在此項出現(xiàn)的條件下各個類別出現(xiàn)的概率,哪個最大,就認(rèn)為此待分類項屬于哪個類別。
以判定外國友人為例做一個形象的比喻。
若我們走在街上看到一個黑皮膚的外國友人,讓你來猜這位外國友人來自哪里。十有八九你會猜是從非洲來的,因為黑皮膚人種中非洲人的占比最多,雖然黑皮膚的外國人也有可能是美洲人或者是亞洲人。但是在沒有其它可用信息幫助我們判斷的情況下,我們會選擇可能出現(xiàn)的概率最高的類別,這就是樸素貝葉斯的基本思想。
下圖為樸素貝葉斯算法的流程:
樸素貝葉斯算法注意點(diǎn):
·當(dāng)特征屬性值的值類型不是離散值而是連續(xù)值的時候,需要通過高斯分布做概率的計算;
·為了避免統(tǒng)計概率中出現(xiàn)概率為0的情況,可以引入Laplace校準(zhǔn),它的思想非常簡單,就是對沒類別下所有劃分的計數(shù)加1。
適用場景及主要應(yīng)用領(lǐng)域:
1. 樸素貝葉斯算法對待預(yù)測樣本進(jìn)行預(yù)測,過程簡單速度快;
2. 對于多分類問題也同樣很有效,復(fù)雜度也不會有大程度上升;
3.在分布獨(dú)立這個假設(shè)成立的情況下,貝葉斯分類器效果奇好,會略勝于邏輯回歸,同時需要的樣本量也更少一點(diǎn)。
4.對于類別類的輸入特征變量,效果非常好。對于數(shù)值型變量特征,我們是默認(rèn)它符合正態(tài)分布的。
主要應(yīng)用領(lǐng)域
·文本分類/垃圾文本過濾/情感判別:多分類較為簡單,同時在文本數(shù)據(jù)中,分布獨(dú)立這個假設(shè)基本是成立的。垃圾文本過濾(比如垃圾郵件識別)和情感分析(微博上的褒貶情緒)用樸素貝葉斯也通常能取得很好的效果。
·多分類實(shí)時預(yù)測:對于文本相關(guān)的多分類實(shí)時預(yù)測,樸素貝葉斯算法被廣泛應(yīng)用,簡單又高效。
·推薦系統(tǒng):樸素貝葉斯和協(xié)同過濾(Collaborative Filtering)是一對好搭檔,協(xié)同過濾是強(qiáng)相關(guān)性,但是泛化能力略弱,樸素貝葉斯和協(xié)同過濾一起,能增強(qiáng)推薦的覆蓋度和效果。深度學(xué)習(xí)(Deep Learning)是人工神經(jīng)網(wǎng)絡(luò)研究的前沿領(lǐng)域。深度學(xué)習(xí)方法是具有多級特征表示的表示學(xué)習(xí)方法,通過組合簡單的非線性模塊,從原始輸入開始逐層學(xué)習(xí)出更高級、更抽象的特征表示。深度學(xué)習(xí)的典型應(yīng)用包括計算機(jī)視覺領(lǐng)域的卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network, CNN),自然語言處理領(lǐng)域的循環(huán)神經(jīng)網(wǎng)絡(luò)(Recurrent Neural Network, RNN),進(jìn)行無監(jiān)督特征學(xué)習(xí)的自編碼器(Auto-Encoder)等。 我們在深度學(xué)習(xí)領(lǐng)域的研究工作分為理論研究和應(yīng)用研究兩個方面:理論研究的內(nèi)容是設(shè)計新的深度學(xué)習(xí)模型和對現(xiàn)有的模型進(jìn)行分析改進(jìn);應(yīng)用研究的內(nèi)容是將深度學(xué)習(xí)方法應(yīng)用于計算機(jī)視覺、機(jī)器人設(shè)計、數(shù)據(jù)挖掘等實(shí)際任務(wù)中,以及參與ImageNet等競賽活動。深度學(xué)習(xí)的實(shí)質(zhì)是深度神經(jīng)網(wǎng)絡(luò),一般的神經(jīng)網(wǎng)絡(luò)有 3~4 層,而深度神經(jīng)網(wǎng)絡(luò)包含上百層,深度學(xué)習(xí)的提出和發(fā)展歸功于大數(shù)據(jù)的出現(xiàn)和計算性能的提高。
深度學(xué)習(xí)和傳統(tǒng)機(jī)器學(xué)習(xí)的共同點(diǎn)是對數(shù)據(jù)進(jìn)行分析,不同之處在于:
傳統(tǒng)機(jī)器學(xué)習(xí)需要人工對數(shù)據(jù)進(jìn)行特征提取,然后應(yīng)用相關(guān)算法對數(shù)據(jù)進(jìn)行分類,利用已有數(shù)據(jù)特征和數(shù)據(jù)標(biāo)簽(或者沒有數(shù)據(jù)標(biāo)簽)對數(shù)學(xué)模型進(jìn)行訓(xùn)練以達(dá)到最優(yōu),繼而對新數(shù)據(jù)進(jìn)行分類和預(yù)測。
深度學(xué)習(xí)不需要人工對訓(xùn)練數(shù)據(jù)進(jìn)行特征提取,直接利用深度神經(jīng)網(wǎng)絡(luò)對數(shù)據(jù)特征進(jìn)行自學(xué)習(xí)、分類,因此人類也不知道機(jī)器是如何進(jìn)行學(xué)習(xí)的。
圖2是傳統(tǒng)機(jī)器學(xué)習(xí)和深度學(xué)習(xí)過程的區(qū)別。
機(jī)器學(xué)習(xí)算法的基本概念
機(jī)器學(xué)習(xí)算法可以看作是一種從輸入到輸出的映射函數(shù),它可以根據(jù)給定的數(shù)據(jù)集(訓(xùn)練集)來調(diào)整自身的參數(shù),使得輸出能夠盡可能地符合預(yù)期的結(jié)果(標(biāo)簽或目標(biāo)函數(shù))。機(jī)器學(xué)習(xí)算法的核心問題是如何找到最優(yōu)的參數(shù),以及如何評估參數(shù)的好壞。
為了解決這些問題,機(jī)器學(xué)習(xí)算法通常需要以下幾個要素:
模型:模型是機(jī)器學(xué)習(xí)算法的數(shù)學(xué)表達(dá)式,它定義了輸入和輸出之間的關(guān)系,以及參數(shù)的含義和范圍。模型可以是線性的、非線性的、概率的、確定性的等等,不同的模型有不同的復(fù)雜度和適用性。
目標(biāo)函數(shù):目標(biāo)函數(shù)是機(jī)器學(xué)習(xí)算法的優(yōu)化目標(biāo),它衡量了模型輸出和預(yù)期結(jié)果之間的差距,也稱為損失函數(shù)或代價函數(shù)。目標(biāo)函數(shù)可以是平方誤差、交叉熵、對數(shù)似然等等,不同的目標(biāo)函數(shù)有不同的性質(zhì)和優(yōu)缺點(diǎn)。
優(yōu)化算法:優(yōu)化算法是機(jī)器學(xué)習(xí)算法的求解方法,它通過迭代更新參數(shù)來最小化或最大化目標(biāo)函數(shù),也稱為學(xué)習(xí)算法或訓(xùn)練算法。優(yōu)化算法可以是梯度下降、牛頓法、隨機(jī)梯度下降等等,不同的優(yōu)化算法有不同的收斂速度和穩(wěn)定性。
超參數(shù):超參數(shù)是機(jī)器學(xué)習(xí)算法中需要人為設(shè)定的參數(shù),它們影響了模型的結(jié)構(gòu)、復(fù)雜度和泛化能力,也稱為調(diào)節(jié)參數(shù)或元參數(shù)。超參數(shù)可以是學(xué)習(xí)率、正則化系數(shù)、隱藏層個數(shù)等等,不同的超參數(shù)有不同的敏感度和范圍。
機(jī)器學(xué)習(xí)算法的分類
機(jī)器學(xué)習(xí)算法可以根據(jù)不同的標(biāo)準(zhǔn)進(jìn)行分類,其中最常見的是根據(jù)學(xué)習(xí)方式和任務(wù)類型進(jìn)行分類。
根據(jù)學(xué)習(xí)方式分類
根據(jù)學(xué)習(xí)方式,機(jī)器學(xué)習(xí)算法可以分為以下三類:
監(jiān)督學(xué)習(xí):監(jiān)督學(xué)習(xí)是指給定輸入和輸出之間存在明確的對應(yīng)關(guān)系,也就是說,每個輸入都有一個正確的或期望的輸出。監(jiān)督學(xué)習(xí)的目標(biāo)是讓模型能夠從訓(xùn)練集中學(xué)習(xí)到這種對應(yīng)關(guān)系,并能夠泛化到未知的輸入上。監(jiān)督學(xué)習(xí)的典型應(yīng)用有分類、回歸、序列標(biāo)注等。
無監(jiān)督學(xué)習(xí):無監(jiān)督學(xué)習(xí)是指給定輸入之間不存在明確的對應(yīng)關(guān)系,也就是說,沒有預(yù)先定義好的輸出或標(biāo)簽。無監(jiān)督學(xué)習(xí)的目標(biāo)是讓模型能夠從訓(xùn)練集中發(fā)現(xiàn)輸入數(shù)據(jù)的內(nèi)在結(jié)構(gòu)或規(guī)律,并能夠?qū)ξ粗妮斎脒M(jìn)行合理的處理。無監(jiān)督學(xué)習(xí)的典型應(yīng)用有聚類、降維、生成等。
強(qiáng)化學(xué)習(xí):強(qiáng)化學(xué)習(xí)是指給定輸入和輸出之間存在動態(tài)的交互關(guān)系,也就是說,每個輸入都會產(chǎn)生一個反饋或獎勵。強(qiáng)化學(xué)習(xí)的目標(biāo)是讓模型能夠從訓(xùn)練集中學(xué)習(xí)到如何根據(jù)當(dāng)前的狀態(tài)選擇最優(yōu)的行為,并能夠最大化累積的獎勵。強(qiáng)化學(xué)習(xí)的典型應(yīng)用有控制、游戲、導(dǎo)航等。
根據(jù)任務(wù)類型分類
根據(jù)任務(wù)類型,機(jī)器學(xué)習(xí)算法可以分為以下四類:
分類:分類是指將輸入數(shù)據(jù)分配到預(yù)先定義好的類別中,也就是說,輸出是離散的或有限的。分類可以是二分類(只有兩個類別)或多分類(有多個類別)。分類的典型應(yīng)用有垃圾郵件檢測、人臉識別、情感分析等。
回歸:回歸是指預(yù)測輸入數(shù)據(jù)的連續(xù)值或?qū)崝?shù)值,也就是說,輸出是連續(xù)的或無限的?;貧w可以是線性回歸(輸出和輸入之間存在線性關(guān)系)或非線性回歸(輸出和輸入之間存在非線性關(guān)系)?;貧w的典型應(yīng)用有房價預(yù)測、股票預(yù)測、年齡估計等。
聚類:聚類是指將輸入數(shù)據(jù)分組到?jīng)]有預(yù)先定義好的類別中,也就是說,輸出是未知的或無標(biāo)簽的。聚類可以是硬聚類(每個數(shù)據(jù)只屬于一個類別)或軟聚類(每個數(shù)據(jù)可以屬于多個類別)。聚類的典型應(yīng)用有客戶分群、圖像分割、社交網(wǎng)絡(luò)分析等。
生成:生成是指根據(jù)輸入數(shù)據(jù)產(chǎn)生新的數(shù)據(jù),也就是說,輸出是新穎的或創(chuàng)造性的。生成可以是條件生成(根據(jù)給定的條件生成數(shù)據(jù))或無條件生成(不需要任何條件生成數(shù)據(jù))。生成的典型應(yīng)用有圖像生成、文本生成、語音合成等。