作者:王抒偉
機(jī)器學(xué)習(xí)中,有一個稱為“ No Free Lunch ”的定理。簡單來說,與監(jiān)督學(xué)習(xí)特別相關(guān)的這個定理,它指出沒有萬能算法,就是用一個算法能很好地解決每個問題。
例如,不能說神經(jīng)網(wǎng)絡(luò)總是比決策樹更好,反之亦然。有許多因素在起作用,例如數(shù)據(jù)集的大小和結(jié)構(gòu)。
那么,如果我遇到一個問題,首先應(yīng)該嘗試多種不同的算法來解決問題,同時使用保留的“測試集”數(shù)據(jù)評估績效并選擇最優(yōu)的那個算法,然后GitHub 搜索最優(yōu)代碼修改哈哈哈哈。
當(dāng)然,如果需要打掃房屋,可以使用吸塵器、掃帚或拖把。你不會用鏟子吧?
所以嘗試的算法必須適合要解決的問題,這才是選擇正確的機(jī)器學(xué)習(xí)任務(wù)的來源。
基礎(chǔ)
有一個通用原則是所有用于預(yù)測建模的受監(jiān)督機(jī)器學(xué)習(xí)算法的基礎(chǔ)。
機(jī)器學(xué)習(xí)算法被描述為學(xué)習(xí)目標(biāo)函數(shù)(f),該函數(shù)最好將輸入變量(X)映射到輸出變量(Y):Y = f(X)
這是一個簡單的學(xué)習(xí)任務(wù),我們想在給定新的輸入變量(X)的情況下,對(Y)進(jìn)行預(yù)測。但是不知道函數(shù)(f)。
機(jī)器學(xué)習(xí)的最常見類型是學(xué)習(xí)映射Y = f(X)可以對新X預(yù)測到Y(jié),目標(biāo)是盡可能進(jìn)行最準(zhǔn)確的預(yù)測。
對于初入機(jī)器學(xué)習(xí)領(lǐng)域,沒有機(jī)器學(xué)習(xí)基礎(chǔ)知識的新手,我會對常用的十大機(jī)器學(xué)習(xí)算法做簡單介紹。
1.?線性回歸
線性回歸可能是統(tǒng)計(jì)和機(jī)器學(xué)習(xí)中最著名和最易理解的算法之一。
主要與最小化模型的誤差或做出盡可能準(zhǔn)確的預(yù)測有關(guān),但以可解釋性為代價。我們將從許多不同領(lǐng)域(包括統(tǒng)計(jì)數(shù)據(jù))中學(xué)習(xí)。
線性回歸的表示法是一個方程,該方程通過找到稱為系數(shù)(B),來描述輸入變量(x)與輸出變量(y)之間關(guān)系的線。
例如:y = B0 + B1 * x 臥槽,這不是一次函數(shù)嗎?哈哈
給定輸入x,我們將預(yù)測y,線性回歸學(xué)習(xí)算法的目標(biāo)是找到系數(shù)B0和B1的值, 例如用于普通最小二乘法和梯度下降優(yōu)化的線性代數(shù)解。
2.?LOGISTIC回歸
邏輯回歸是機(jī)器學(xué)習(xí)從統(tǒng)計(jì)領(lǐng)域“借”的另一種技術(shù)。它是二分類問題(具有兩個類值的問題)的首選方法。
Logistic回歸類似于線性回歸,因?yàn)槟繕?biāo)是找到權(quán)重每個輸入變量的系數(shù)的值。與線性回歸不同,輸出的預(yù)測使用稱為對數(shù)函數(shù)的非線性函數(shù)進(jìn)行變換。
邏輯函數(shù)看起來像一個大S,它將任何值轉(zhuǎn)換為0到1的范圍。因?yàn)槲覀兛梢詫⒁?guī)則應(yīng)用于邏輯函數(shù)的輸出為0和1(例如,如果IF小于0.5,則輸出1)并預(yù)測類別值。
與線性回歸一樣,當(dāng)去除與輸出變量無關(guān)的屬性以及相關(guān)的屬性時,邏輯回歸的效果更好。這是一個快速學(xué)習(xí)二進(jìn)制分類問題并有效的模型
3.?線性判別分析
Logistic回歸是傳統(tǒng)上僅限于兩類分類問題的分類算法。如果是多分類,則線性判別分析算法(LDA)就是很重要的算法了。
LDA的表示非常簡單,它由數(shù)據(jù)的統(tǒng)計(jì)屬性組成,這些屬性是針對每個類別計(jì)算的。對于單個輸入變量,這包括:
每個類別的平均值。
計(jì)算所有類別的方差
通過為每個類別計(jì)算一個區(qū)分值并為具有最大值的類別進(jìn)行預(yù)測來進(jìn)行預(yù)測。
該算法的前提是:數(shù)據(jù)具有高斯分布(鐘形曲線),因此最好在操作之前從數(shù)據(jù)中刪除異常值。
4.?分類和回歸樹
決策樹是用于預(yù)測建模機(jī)器學(xué)習(xí)的重要算法類型。
決策樹模型的表示形式是二叉樹。這是來自算法和數(shù)據(jù)結(jié)構(gòu)的二叉樹,沒有什么花哨的。每個節(jié)點(diǎn)代表一個輸入變量(x)和該變量的分割點(diǎn)(假設(shè)變量是數(shù)字)。
樹的葉節(jié)點(diǎn)包含用于進(jìn)行預(yù)測的輸出變量(y)。通過遍歷樹的拆分直到到達(dá)葉節(jié)點(diǎn)并在該葉節(jié)點(diǎn)輸出類值來進(jìn)行預(yù)測。
樹學(xué)習(xí)速度很快,做出預(yù)測的速度也非???。它們對于許多問題通常也很準(zhǔn)確,不需要為數(shù)據(jù)做任何特殊預(yù)處理。
5-樸素貝葉斯
樸素貝葉斯(Naive Bayes)是一種簡單但功能強(qiáng)大的預(yù)測建模算法。
該模型由兩種類型的概率組成,可以直接從您的訓(xùn)練數(shù)據(jù)中計(jì)算出:
1)每個類別的概率;
2)給定每個x值的每個類別的條件概率。
開始計(jì)算,概率模型可用于使用貝葉斯定理對新數(shù)據(jù)進(jìn)行預(yù)測。當(dāng)你的數(shù)據(jù)是實(shí)值時,通常會假設(shè)一個高斯分布(鐘形曲線),以便可以輕松地估計(jì)這些概率。
樸素貝葉斯之所以被稱為樸素,是因?yàn)樗俣總€輸入變量都是獨(dú)立的。這是一個很強(qiáng)的假設(shè),對于真實(shí)數(shù)據(jù)來說是不現(xiàn)實(shí)的,盡管如此,該技術(shù)對于大量復(fù)雜問題非常有效。
6 - K近鄰
KNN算法非常簡單且非常有效。KNN的模型表示是整個訓(xùn)練數(shù)據(jù)集。簡單吧?
通過搜索整個訓(xùn)練集中的K個最相似實(shí)例并匯總這K個實(shí)例的輸出變量,可以對新數(shù)據(jù)點(diǎn)進(jìn)行預(yù)測。
對于回歸問題,這可能是平均輸出變量,對于分類問題,這可能是最常見的類別值。
訣竅在于如何確定數(shù)據(jù)實(shí)例之間的相似性。如果您的屬性都具有相同的比例(例如,都是距離數(shù)據(jù)),最簡單的方法是使用歐幾里得距離,您可以根據(jù)每個輸入變量之間的差異直接計(jì)算一個數(shù)字。
KNN可能需要大量內(nèi)存或空間來存儲所有數(shù)據(jù),因?yàn)樗阉袛?shù)據(jù)都遍歷了。您還可以隨著時間的訓(xùn)練數(shù)據(jù),以保持預(yù)測的準(zhǔn)確性。
距離或緊密度的概念可能會分解為非常高的維度(許多輸入變量),這可能會對問題的算法性能產(chǎn)生負(fù)面影響。所以對于數(shù)據(jù)的輸入就至關(guān)重要。
7- 矢量化學(xué)習(xí)
K最近的缺點(diǎn)是需要整個訓(xùn)練數(shù)據(jù)集。學(xué)習(xí)向量量化算法(簡稱LVQ)是一種人工神經(jīng)網(wǎng)絡(luò)算法,可讓選擇要需要的訓(xùn)練實(shí)例數(shù)量。
LVQ的表示形式是向量的集合。這些是在最開始開始時隨機(jī)選擇的,適用于在學(xué)習(xí)算法的多次迭代中最好地總結(jié)訓(xùn)練數(shù)據(jù)集。
學(xué)習(xí)之后,可以像使用K近鄰一樣,使用數(shù)據(jù)進(jìn)行預(yù)測。通過計(jì)算每個向量與新數(shù)據(jù)實(shí)例之間的距離,可以找到最相似的數(shù)據(jù)向量(最佳匹配的向量)。然后返回最佳匹配的類值作為預(yù)測。記得數(shù)據(jù)歸一化,獲得的效果更好。
8-支持向量機(jī)
支持向量機(jī)可能是最受歡迎的機(jī)器學(xué)習(xí)算法之一。
超平面是分割輸入變量空間的線。
在SVM中,選擇一個超平面以按類別(類別0或類別1)最好地分隔輸入變量空間中的點(diǎn)。
在二維圖中,您可以將其可視化為一條線,并假設(shè)所有輸入點(diǎn)都可以被這條線完全隔開。SVM學(xué)習(xí)算法找到超平面對類進(jìn)行最佳分離的系數(shù)。
超平面和最近的數(shù)據(jù)點(diǎn)之間的距離稱為邊距。可以將這兩個類別分開的最佳或最佳超平面是邊距最大的線。
僅這些點(diǎn)與定義超平面和分類器的構(gòu)造有關(guān)。這些點(diǎn)稱為支持向量。
在實(shí)踐中,使用優(yōu)化算法來找到使余量最大化的系數(shù)的值。
SVM可能是功能最強(qiáng)大的即用型分類器之一,使用頻率很高。
9-BAGGING和隨機(jī)森林
隨機(jī)森林是最流行,功能最強(qiáng)大的機(jī)器學(xué)習(xí)算法之一。這是一種稱為Bootstrap聚類或BAGGING的集成機(jī)器學(xué)習(xí)算法。
您需要對數(shù)據(jù)進(jìn)行大量采樣,計(jì)算平均值,然后對所有平均值取平均值,以便更好地估算真實(shí)平均值。
在bagging中,使用相同的方法,但用于估計(jì)整個統(tǒng)計(jì)模型(最常見的是決策樹)。獲取訓(xùn)練數(shù)據(jù)的多個樣本,然后為每個數(shù)據(jù)樣本構(gòu)建模型。當(dāng)你需要對新數(shù)據(jù)進(jìn)行預(yù)測時,每個模型都將進(jìn)行預(yù)測,并對預(yù)測取平均值以對真實(shí)輸出值進(jìn)行更好的估計(jì)。
隨機(jī)森林是對這種方法的一種調(diào)整,在該方法中將創(chuàng)建決策樹,不是選擇最佳的拆分點(diǎn)。
因此,為每個數(shù)據(jù)樣本創(chuàng)建的模型與原先的模型相比,差異更大。將他們的預(yù)測結(jié)合起來可以更好地估計(jì)真實(shí)的基礎(chǔ)輸出值。
?
Boosting是一種集成技術(shù),嘗試從多個弱分類器創(chuàng)建強(qiáng)分類器。這是通過從訓(xùn)練數(shù)據(jù)構(gòu)建模型,然后創(chuàng)建第二個模型來嘗試糾正第一個模型中的錯誤來完成的。添加模型,直到完美預(yù)測訓(xùn)練集或添加最大數(shù)量的模型為止。
AdaBoost是為二進(jìn)制分類開發(fā)的第一個真正成功的增強(qiáng)算法。這是了解增強(qiáng)的最佳起點(diǎn)?,F(xiàn)代的增強(qiáng)方法基于AdaBoost,最著名的是隨機(jī)梯度增強(qiáng)機(jī).
具體細(xì)節(jié)可以看這個視頻.
AdaBoost與決策樹一起使用。
創(chuàng)建第一棵樹后,將在每個訓(xùn)練實(shí)例上使用該樹的性能來加權(quán)要創(chuàng)建的下一棵樹應(yīng)注意每個訓(xùn)練實(shí)例的關(guān)注程度。
難以預(yù)測的訓(xùn)練數(shù)據(jù)的權(quán)重更高,而易于預(yù)測的實(shí)例的權(quán)重更低。依次創(chuàng)建模型,每個模型都會更新訓(xùn)練實(shí)例上的權(quán)重,這些權(quán)重會影響序列中下一棵樹執(zhí)行的學(xué)習(xí)。構(gòu)建完所有樹之后,對新數(shù)據(jù)進(jìn)行預(yù)測,并根據(jù)訓(xùn)練數(shù)據(jù)的準(zhǔn)確性對每棵樹的性能進(jìn)行加權(quán)。
由于該算法在糾正錯誤方面投入了很多精力,因此刪除異常值和數(shù)據(jù)去噪非常重要。
編輯:黃飛
?
評論
查看更多