《机器学习实战》总结
用了大概一個(gè)月的時(shí)間,終于把《機(jī)器學(xué)習(xí)實(shí)戰(zhàn)》這本書(shū)看了一遍,書(shū)中的代碼也全部敲了一遍。下來(lái)就總結(jié)下書(shū)中提到的各個(gè)算法。
(注意,本博客適用于復(fù)習(xí),不適用新手)
一、監(jiān)督學(xué)習(xí)
我的理解就是給的數(shù)據(jù)是有結(jié)果的,根據(jù)這些已經(jīng)明確結(jié)果的數(shù)據(jù)去推測(cè)那些沒(méi)有明確結(jié)果的數(shù)據(jù)的結(jié)果。
監(jiān)督學(xué)習(xí)可簡(jiǎn)單分為分類(lèi)和回歸:
分類(lèi)常用于處理標(biāo)稱(chēng)型數(shù)據(jù)(數(shù)據(jù)結(jié)果為0,1或者結(jié)果為-1,1;即結(jié)果是確定的幾個(gè)值);
回歸既可以用于處理標(biāo)稱(chēng)型數(shù)據(jù)又可以用于處理連續(xù)性數(shù)據(jù)。
1.分類(lèi)
常用的分類(lèi)方法有:k-近鄰算法(kNN)、決策樹(shù)、樸素貝葉斯、Logistic回歸、支持向量機(jī)(SVM)、AdaBoost元算法。
我們挨個(gè)看。
1.1 k-近鄰算法(kNN)
kNN算法的主要思想是 將 待分類(lèi)的點(diǎn)分類(lèi)至 離待預(yù)測(cè)的點(diǎn)最近的k個(gè)點(diǎn)出現(xiàn)最多的那個(gè)分類(lèi)結(jié)果。
優(yōu)點(diǎn):精度高、對(duì)異常值不敏感、無(wú)數(shù)據(jù)輸入假定。
缺點(diǎn):計(jì)算復(fù)雜度高、空間復(fù)雜度高。
適用數(shù)據(jù)類(lèi)型:數(shù)值型和標(biāo)稱(chēng)型
1.2 決策樹(shù)
根據(jù)訓(xùn)練數(shù)據(jù)創(chuàng)建一棵決策樹(shù),判斷待分類(lèi)數(shù)據(jù)類(lèi)別時(shí)要從根節(jié)點(diǎn)開(kāi)始比較判斷,一直到葉子節(jié)點(diǎn),該葉子節(jié)點(diǎn)就是待分類(lèi)數(shù)據(jù)的類(lèi)別了。
優(yōu)點(diǎn):計(jì)算復(fù)雜度不高,輸出結(jié)果容易理解,對(duì)中間值的缺失不敏感,可以處理不相關(guān)特征數(shù)據(jù)。
缺點(diǎn):可能會(huì)產(chǎn)生過(guò)度匹配問(wèn)題。
適用數(shù)據(jù)類(lèi)型:數(shù)值型和標(biāo)稱(chēng)型
1.3 樸素貝葉斯
通過(guò)對(duì)訓(xùn)練數(shù)據(jù)進(jìn)行分析,再結(jié)合貝葉斯公式計(jì)算條件概率,判斷將待分類(lèi)數(shù)據(jù)分到哪個(gè)類(lèi)別下的概率最大,就將其分到那個(gè)類(lèi)別。
優(yōu)點(diǎn):在數(shù)據(jù)較少的情況下仍然有效,可以處理多類(lèi)別問(wèn)題。
缺點(diǎn):對(duì)于輸入數(shù)據(jù)的準(zhǔn)備方式較為敏感。
適用數(shù)據(jù)類(lèi)型:標(biāo)稱(chēng)型
1.4 Logistic回歸
這一章主要是講了梯度上升法,故而放在分類(lèi)里。Logistic回歸的目的是尋找一個(gè)非線性函數(shù)Sigmoid(一種階躍函數(shù))的最佳擬合參數(shù),求解過(guò)程可以由最優(yōu)化算法來(lái)完成(在每個(gè)特征上都乘以一個(gè)回歸系數(shù),然后把所有結(jié)果相加,將總和代入Sigmoid函數(shù),得到一個(gè)0-1的數(shù)值,數(shù)值>0.5歸于類(lèi)別1,<0.5歸于類(lèi)別0,最優(yōu)化算法就是在找這樣一個(gè)最佳的回歸系數(shù))。在最優(yōu)化算法中,最常用的就是梯度上升算法(也有的人在用梯度下降算法,效果類(lèi)似),而梯度上升算法又可以簡(jiǎn)化為隨機(jī)梯度上升算法(隨機(jī)的意思是梯度上升算法中的每次移動(dòng)的步長(zhǎng)都會(huì)更新)。
用一個(gè)公式來(lái)表示:
Sigmoid函數(shù)的輸入為
要注意的是
優(yōu)點(diǎn):計(jì)算代價(jià)不高,易于理解和實(shí)現(xiàn)。
缺點(diǎn):容易欠擬合,分類(lèi)精度可能不高
適用數(shù)據(jù)類(lèi)型:數(shù)值型和標(biāo)稱(chēng)型
1.5 支持向量機(jī)(SVM)
SVM算法就是找到一個(gè)可以將兩個(gè)類(lèi)別分開(kāi)的超平面,且此超平面滿足在所有可以將兩個(gè)類(lèi)別分開(kāi)的超平面中,它里最近的那些點(diǎn)的距離之和是最大的。
優(yōu)點(diǎn):泛化錯(cuò)誤率低,計(jì)算開(kāi)銷(xiāo)不大,結(jié)果易解釋。
缺點(diǎn):對(duì)參數(shù)調(diào)節(jié)和核函數(shù)的選擇敏感,原始分類(lèi)器不加修改僅適用于處理二分類(lèi)問(wèn)題。
適用數(shù)據(jù)類(lèi)型:數(shù)值型和標(biāo)稱(chēng)型
1.6 AdaBoost元算法
將不同的分類(lèi)方法結(jié)合起來(lái)叫元算法(或集成方法)。AdaBoost算法的流程:訓(xùn)練數(shù)據(jù)中的每個(gè)樣本,并賦予其一個(gè)權(quán)重,這些權(quán)重構(gòu)成了一個(gè)向量D。一開(kāi)始,這些權(quán)重值都初始化成相等值。首先在訓(xùn)練數(shù)據(jù)上訓(xùn)練出一個(gè)弱分類(lèi)器并計(jì)算該分類(lèi)起的錯(cuò)誤率,然后在同一數(shù)據(jù)集上再次訓(xùn)練若弱分類(lèi)器。在二次訓(xùn)練中,第一次分對(duì)的樣本的權(quán)重會(huì)減少,第一次分錯(cuò)的樣本的權(quán)重會(huì)提高。為每個(gè)分類(lèi)器分配一個(gè)權(quán)重值(基于每個(gè)弱分類(lèi)器的錯(cuò)誤率),不斷迭代,直到錯(cuò)誤率為0,或弱分類(lèi)器的數(shù)目達(dá)到用戶指定的值為止。
優(yōu)點(diǎn):泛化錯(cuò)誤率低,易編碼,可以應(yīng)用在大部分分類(lèi)器上,無(wú)參數(shù)調(diào)整。
缺點(diǎn):對(duì)離群點(diǎn)敏感。
適用數(shù)據(jù)類(lèi)型:數(shù)值型和標(biāo)稱(chēng)型
2.回歸
與分類(lèi)一樣,回歸也是預(yù)測(cè)目標(biāo)值的過(guò)程。回歸與分類(lèi)的不同點(diǎn)在于,前者預(yù)測(cè)連續(xù)型變量,而后者預(yù)測(cè)離散型變量。
2.1 線性回歸
線性回歸分為標(biāo)準(zhǔn)線性回歸與局部加權(quán), 標(biāo)準(zhǔn)線性回歸自不必多說(shuō),簡(jiǎn)單說(shuō)一下局部加權(quán)線性回歸。用高斯分布(類(lèi)似正態(tài)分布)給預(yù)測(cè)點(diǎn)附近的點(diǎn)賦予更高的權(quán)值來(lái)計(jì)算回歸系數(shù)
優(yōu)點(diǎn):結(jié)果易于理解,計(jì)算上不復(fù)雜
缺點(diǎn):對(duì)非線性的數(shù)據(jù)擬合不好
適用數(shù)據(jù)類(lèi)型:數(shù)值型和標(biāo)稱(chēng)型數(shù)據(jù)
2.2 嶺回歸
當(dāng)數(shù)據(jù)的樣本數(shù)比特征數(shù)還少的時(shí)候,矩陣x.T*x的逆不能直接計(jì)算。即便當(dāng)樣本數(shù)比特征數(shù)多時(shí),它仍有可能無(wú)法直接計(jì)算,這個(gè)時(shí)候就可以用嶺回歸。簡(jiǎn)單來(lái)說(shuō),嶺回歸就是在線性回歸的矩陣x.T*x上加一個(gè)λ*I從而使得矩陣非奇異(I是一個(gè)m*m的單位矩陣)。
嶺回歸也屬于線性回歸。它相當(dāng)于對(duì)回歸系數(shù)的大小進(jìn)行了限制,這是一種縮減法。
2.3 樹(shù)回歸
樹(shù)回歸在我看來(lái)有點(diǎn)類(lèi)似與分段函數(shù),構(gòu)建樹(shù)的過(guò)程就是將數(shù)據(jù)根據(jù)特征切分成葉子節(jié)點(diǎn),預(yù)測(cè)過(guò)程就是根據(jù)節(jié)點(diǎn)特征尋找葉子節(jié)點(diǎn)的過(guò)程。值得注意的是,由于構(gòu)建樹(shù)的過(guò)程可能會(huì)導(dǎo)致傾向數(shù)據(jù)過(guò)擬合,所以有兩種常用的剪枝算法:預(yù)剪枝和后剪枝。
優(yōu)點(diǎn):可以對(duì)復(fù)雜和非線性的數(shù)據(jù)建模
缺點(diǎn):結(jié)果不易理解
適用數(shù)據(jù)類(lèi)型:數(shù)值型和標(biāo)稱(chēng)型
二、無(wú)監(jiān)督學(xué)習(xí)
1.K均值(K-means)聚類(lèi)
K均值聚類(lèi)和K近鄰分類(lèi)有點(diǎn)類(lèi)似,但也有不同。K近鄰是已知結(jié)果有幾種分類(lèi)。而K均值則結(jié)果未知。K均值聚類(lèi)的過(guò)程是這樣的,先選取K個(gè)隨機(jī)初始點(diǎn)作為質(zhì)心,然后將所有數(shù)據(jù)根據(jù)這些質(zhì)心分類(lèi),計(jì)算分類(lèi)后的類(lèi)別的質(zhì)心,根據(jù)這個(gè)新的質(zhì)心再調(diào)整分類(lèi)結(jié)果,這個(gè)過(guò)程不斷循環(huán),知道質(zhì)心的位置不再變化。值得注意的是還有一個(gè)二分K-均值算法,它的流程是,先將整個(gè)數(shù)據(jù)作為一個(gè)簇,計(jì)算總誤差,再將這個(gè)簇一分為二,計(jì)算總誤差,選取總誤差較大(或者較小)的簇再一份為二,選取現(xiàn)在所有簇中總誤差較大(或者較小)的簇再進(jìn)行劃分,直到得到用戶想要的K個(gè)分類(lèi)。
優(yōu)點(diǎn):容易實(shí)現(xiàn)。
缺點(diǎn):可能收斂到局部最小值,在大規(guī)模數(shù)據(jù)集上收斂緩慢。
適用數(shù)據(jù)類(lèi)型:數(shù)值型數(shù)據(jù)
2.關(guān)聯(lián)規(guī)則(Apriori算法)
關(guān)聯(lián)規(guī)則算法可以參考經(jīng)典的啤酒尿布的故事,主要思想是尋找頻繁項(xiàng)集。Apriori算法的原理是說(shuō)如果一個(gè)元素項(xiàng)是不頻繁的,那么那些包含該元素的超集也是不頻繁的。Apriori算法從單元素項(xiàng)開(kāi)始,通過(guò)組合滿足最小支持度要求的項(xiàng)集來(lái)形成更大的集合。
優(yōu)點(diǎn):易編碼實(shí)現(xiàn)。
缺點(diǎn):在大數(shù)據(jù)集上可能較慢。
適用數(shù)據(jù)類(lèi)型:數(shù)值型和標(biāo)稱(chēng)型
3.關(guān)聯(lián)規(guī)則(FP-growth算法)
FP-growth算法相比較與Apriori算法可以大大提高運(yùn)算速度。FP-growth算法主要是構(gòu)建了一棵FP樹(shù),然后從FP樹(shù)中挖掘頻繁項(xiàng)集。FP樹(shù)的結(jié)構(gòu)如下圖所示:(圖片來(lái)自網(wǎng)絡(luò),侵刪)
值得注意的是,FP樹(shù)的節(jié)點(diǎn)數(shù)值是可以重復(fù)的;與FP樹(shù)一同構(gòu)建的還有一個(gè)頭指針表。
優(yōu)點(diǎn):一般要快于Apriori。
缺點(diǎn):實(shí)現(xiàn)比較困難,在某些數(shù)據(jù)集上性能會(huì)下降。
適用數(shù)據(jù)類(lèi)型:標(biāo)稱(chēng)型
三、其他
1.PCA簡(jiǎn)化數(shù)據(jù)
主成分分析(PCA)可以對(duì)數(shù)據(jù)進(jìn)行降維處理。它是通過(guò)沿著數(shù)據(jù)最大方差的方向旋轉(zhuǎn)坐標(biāo)軸來(lái)實(shí)現(xiàn)的。選擇方差最大的方向作為第一條坐標(biāo)軸,后續(xù)坐標(biāo)軸則與前面的坐標(biāo)軸正交。切方差矩陣上的特征值分析可以用一系列的正交坐標(biāo)軸來(lái)獲取。
優(yōu)點(diǎn):降低數(shù)據(jù)的復(fù)雜性,識(shí)別最重要的多個(gè)特征。
缺點(diǎn):不一定需要,且可能損失有用信息。
適用數(shù)據(jù)類(lèi)型:數(shù)值型
2.SVD簡(jiǎn)化數(shù)據(jù)
奇異值分解(SVD)可以讓我們用小得多的數(shù)據(jù)集來(lái)表示原始數(shù)據(jù)集。SVD的示意圖如下:(圖片取自網(wǎng)絡(luò),侵刪)
優(yōu)點(diǎn):簡(jiǎn)化數(shù)據(jù),去除噪聲,提高算法的結(jié)果。
缺點(diǎn):數(shù)據(jù)的轉(zhuǎn)換可能難以理解。
適用數(shù)據(jù)類(lèi)型:數(shù)值型
3.MapReduce
當(dāng)數(shù)據(jù)量很大時(shí),一臺(tái)計(jì)算機(jī)已經(jīng)不能滿足運(yùn)算了,這個(gè)時(shí)候就可以用MapReduce來(lái)將單個(gè)作業(yè)分配給多個(gè)計(jì)算機(jī)執(zhí)行。它的框架可參考如下圖:(圖片取自網(wǎng)絡(luò),侵刪)
將輸入數(shù)據(jù)分配給多臺(tái)計(jì)算機(jī)上做運(yùn)算(map過(guò)程),將它們的輸出通過(guò)某種方式組合(一般還會(huì)排序)。將結(jié)果再分成多個(gè)小份分給多臺(tái)計(jì)算機(jī)進(jìn)行工作(reduce過(guò)程),最后得到最終結(jié)果。reduce過(guò)程可以重復(fù)多次。
優(yōu)點(diǎn):可在短時(shí)間內(nèi)完成大量工作。
缺點(diǎn):算法必須進(jìn)過(guò)重寫(xiě),需要對(duì)系統(tǒng)工程有一定的理解。
適用數(shù)據(jù)類(lèi)型:數(shù)值型和標(biāo)稱(chēng)型
總結(jié)
以上是生活随笔為你收集整理的《机器学习实战》总结的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 《机器学习实战》第十五章 MapRedu
- 下一篇: 《集体智慧编程》第二章(一)