- Machine Learning in Python: scikit-learn,流行的機(jī)器學(xué)習(xí)庫(kù)。
- 用戶(hù)指南:http://scikit-learn.org/stable/user_guide.html
- 示例代碼:amueller/introduction_to_ml_with_python
- 常用scikit-learn集成工具:① Anaconda,② Enthought Canopy,③ Python(x,y)
- scikit-learn相關(guān)的包:
1 依賴(lài)的包:NumPy、SciPy
2 相關(guān)的包:pandas、matplotlib
3 相關(guān)的工具: Jupyter Notebook、IPython
第一章 引言
機(jī)器學(xué)習(xí)和數(shù)據(jù)分析本質(zhì)都是迭代過(guò)程。
依賴(lài)的包和相關(guān)包簡(jiǎn)介:
- NumPy:Python科學(xué)計(jì)算的基礎(chǔ)包之一,包含多維數(shù)組、高級(jí)數(shù)學(xué)函數(shù)以及偽隨機(jī)數(shù)生成器等。NumPy的核心功能是ndarray類(lèi),即n維數(shù)組。
- SciPy:Python用于科學(xué)計(jì)算的函數(shù)集合。具有線性代數(shù)高級(jí)程序、數(shù)學(xué)函數(shù)優(yōu)化、信號(hào)處理、特殊數(shù)學(xué)函數(shù)和統(tǒng)計(jì)分布等多項(xiàng)功能。
- matplotlib:Python的科學(xué)繪圖庫(kù)。
- pandas:用于處理和分析數(shù)據(jù)的函數(shù)庫(kù)。它基于DataFrame的數(shù)據(jù)結(jié)構(gòu),模仿R語(yǔ)言中的DataFrame,一個(gè)DataFrame就是一個(gè)包含schema的表格。
- Jupyter NoteBook:可以在瀏覽器中運(yùn)行代碼的交互式環(huán)境;
監(jiān)督學(xué)習(xí)的核心步驟:
步驟1: 準(zhǔn)備訓(xùn)練數(shù)據(jù)和測(cè)試數(shù)據(jù)
步驟2: 學(xué)習(xí)模型
步驟3: 測(cè)試模型
步驟4: 評(píng)估模型
第二章 監(jiān)督學(xué)習(xí)
2.1 分類(lèi)和回歸
監(jiān)督學(xué)習(xí)主要解決的兩類(lèi)問(wèn)題:分類(lèi)和回歸。
分類(lèi)問(wèn)題的目標(biāo)是預(yù)測(cè)類(lèi)別,回歸任務(wù)的目標(biāo)是預(yù)測(cè)一個(gè)連續(xù)值。區(qū)分分類(lèi)和回歸的方法之一就是判斷其輸出的結(jié)果是否具有連續(xù)性,回歸輸出的結(jié)果具有連續(xù)性,而分類(lèi)輸出的結(jié)果不具有連續(xù)性。
2.2 泛化、過(guò)擬合和欠擬合
收集更多數(shù)據(jù),適當(dāng)構(gòu)建更復(fù)雜的模型,對(duì)監(jiān)督學(xué)習(xí)任務(wù)往往特別有用,這可能比對(duì)模型調(diào)參更為有效。永遠(yuǎn)不要低估更多數(shù)據(jù)的力量。
2.3 監(jiān)督學(xué)習(xí)方法
算法1: k近鄰
kNN算法既可以用于分類(lèi)(二分類(lèi)和多分類(lèi)都可以),也可以用于回歸。
參數(shù):鄰居個(gè)數(shù)以及數(shù)據(jù)點(diǎn)之間距離的度量方法(默認(rèn)使用歐式距離);
優(yōu)點(diǎn):模型簡(jiǎn)單,容易理解,適合作為基準(zhǔn)模型;
缺點(diǎn):對(duì)于特征較多(幾百或者更多)的數(shù)據(jù)集不太適用;對(duì)于稀疏數(shù)據(jù)集,即大多說(shuō)取值都為0的數(shù)據(jù)集來(lái)說(shuō),該算法的預(yù)測(cè)效果較差。
總結(jié):雖然kNN算法較容易理解,但是由于其預(yù)測(cè)速度慢且不能處理具有很多特征的數(shù)據(jù)集,所以實(shí)踐中往往不會(huì)使用。
算法2:線性模型
線性模型是在實(shí)踐中被廣泛使用的一類(lèi)模型。線性模型利用輸入特征的線性函數(shù)進(jìn)行預(yù)測(cè)。
線性回歸模型
有許多不同的線性回歸模型,這些模型之間的區(qū)別在于如何從訓(xùn)練數(shù)據(jù)中學(xué)習(xí)參數(shù)w和b,以及如何控制模型復(fù)雜度。
Ⅰ 線性回歸模型(普通的最小二乘)
普通的最小二乘模型(Ordinary least squares, OLS)是回歸問(wèn)題最簡(jiǎn)單也是最經(jīng)典的線性方法。線性回歸尋找參數(shù)w和b,使得對(duì)訓(xùn)練集與真實(shí)的回歸目標(biāo)y之間的均方誤差最小。均方誤差(mean squared error)是預(yù)測(cè)值和真實(shí)值之差的平方和除以樣本數(shù)。
普通的最小二乘模型總結(jié):
參數(shù):無(wú)參數(shù),權(quán)重(斜率)w和偏移(截距)通過(guò)學(xué)習(xí)獲取;
優(yōu)點(diǎn):模型簡(jiǎn)單,也是最簡(jiǎn)單的線性方法;
缺點(diǎn):無(wú)法控制模型的復(fù)雜度。
總結(jié):線性回歸沒(méi)有參數(shù),這是一個(gè)優(yōu)點(diǎn),但是也因此無(wú)法控制模型的復(fù)雜度。對(duì)于一維的數(shù)據(jù),線性模型常容易出現(xiàn)欠擬合,而對(duì)于多維得數(shù)據(jù),線性模型容易出現(xiàn)過(guò)擬合。
Ⅱ 嶺回歸模型(Ridge regression)
線性模型的缺點(diǎn)就是無(wú)法控制模型的復(fù)雜度,嶺回歸模型通過(guò)引入L2正則化(Regularization),來(lái)約束模型的復(fù)雜度從而避免過(guò)擬合。嶺回歸模型中,參數(shù)w的選擇不僅要在訓(xùn)練數(shù)據(jù)上得到好的預(yù)測(cè)結(jié)果,而且還要擬合附加約束,即w的所有元素都應(yīng)接近于0。
嶺回歸模型總結(jié):
參數(shù):參數(shù)alpha(用戶(hù)設(shè)定);權(quán)重(斜率)w、偏移(截距)b通過(guò)學(xué)習(xí)獲取;
優(yōu)點(diǎn):引入L2正則化,可以克服線性模型過(guò)擬合的缺點(diǎn),更不容易過(guò)擬合;
缺點(diǎn):模型的訓(xùn)練性能(模型擬合的程度)變低。
總結(jié):嶺回歸引入了參數(shù)alpha,用戶(hù)可以通過(guò)指定不同的alpha,實(shí)現(xiàn)在模型簡(jiǎn)單性和訓(xùn)練性能之間做權(quán)衡。
當(dāng)訓(xùn)練數(shù)據(jù)集足夠大的時(shí),線性回歸出現(xiàn)過(guò)擬合的可能性會(huì)越來(lái)越小,此時(shí)線性回歸和嶺回歸具有幾乎相同的預(yù)測(cè)效果。所以,增大訓(xùn)練集,也是避免過(guò)擬合的有效方法。
Ⅲ lasso 回歸
lasso回歸也是一種正則化的線性回歸。與嶺回歸相同,lasso也是約束系數(shù),使其接近0,但用到的正則化方法不同。lasso使用的是L1正則化。L1正則化的結(jié)果使某些系數(shù)剛好為0,說(shuō)明某些特征被直接忽略,因此其具有一定的稀疏性。L1正則化也可以看成是一種自動(dòng)化的特征選擇。
lasso 回歸總結(jié):
參數(shù):參數(shù)alpha(用戶(hù)設(shè)定)以及迭代次數(shù)iter;權(quán)重(斜率)w、偏移(截距)b通過(guò)學(xué)習(xí)獲得;
優(yōu)點(diǎn):引入L1正則化,降低過(guò)擬合的可能性,同時(shí),可以忽略某些特征,自動(dòng)選擇特征,具有一定的稀疏性,模型的可解釋性也較好;
缺點(diǎn):可能會(huì)忽略過(guò)多的特征,導(dǎo)致模型欠擬合。
總結(jié):L1正則化的引入,使lasso回歸具有了自動(dòng)選擇特征的功能。
在實(shí)踐中,ridge regression和lasso regression一般首選ridge regression。如果特征很多,但只有其中幾個(gè)是重要的,那么選擇lasso可能更好。可以結(jié)合Ridge和Lasso的懲罰項(xiàng),使用ElasticNet,結(jié)合L1正則化和L2正則化。這種結(jié)合的效果最好,但是要調(diào)節(jié)兩個(gè)參數(shù)。
線性分類(lèi)模型
Ⅰ Logistic Regression分類(lèi)器
Ⅱ 線性支持向量機(jī)分類(lèi)器
多分類(lèi)為問(wèn)題的解決方案:
- 一對(duì)多法解決多分類(lèi)問(wèn)題,若是n個(gè)分類(lèi),則需要訓(xùn)練n的二分類(lèi)模型;
- 一對(duì)一分類(lèi)器,首先對(duì)任意兩類(lèi)建立分類(lèi)器,n個(gè)分類(lèi)要建立n(n-1)/2個(gè)分類(lèi)器,然后再對(duì)各個(gè)分類(lèi)器預(yù)測(cè)的結(jié)果進(jìn)行投票,確定最終所屬的分類(lèi);
若訓(xùn)練集的性能和測(cè)試集的性能非常接近,則有可能出現(xiàn)了欠擬合,可以適當(dāng)?shù)奶岣吣P偷膹?fù)雜度;若訓(xùn)練集的性能和測(cè)試集的性能相差較大,則有可能出現(xiàn)了過(guò)擬合,可以通過(guò)正則化限制模型的復(fù)雜度。
算法3:樸素貝葉斯分類(lèi)器
樸素貝葉斯分類(lèi)器與線性模型非常相似,但它的訓(xùn)練速度往往更快。這種高效率所付出的代價(jià)是,樸素貝葉斯的泛化能力要比線性分類(lèi)器稍差。
樸素貝葉斯模型對(duì)高緯稀疏數(shù)據(jù)的效果很好,對(duì)參數(shù)的魯棒性相對(duì)較好。
樸素貝葉斯模型是很好的基準(zhǔn)模型,常用于非常大的數(shù)據(jù)集。
算法4: 決策樹(shù)
決策樹(shù)廣泛用于分類(lèi)和回歸。它本質(zhì)是從一層層的if/else問(wèn)題中進(jìn)行學(xué)習(xí)并得出結(jié)論。
構(gòu)造決策樹(shù):學(xué)習(xí)決策樹(shù),就是學(xué)習(xí)一系列if/else問(wèn)題,使我們能夠以最快的速度得到正確答案。在機(jī)器學(xué)習(xí)中,這些問(wèn)題叫作測(cè)試。為了構(gòu)造決策樹(shù),算法遍歷所有可能的測(cè)試,找出對(duì)目標(biāo)變量來(lái)說(shuō)信息量最大的那一個(gè)。每個(gè)測(cè)試僅僅關(guān)注一個(gè)特征。
控制決策樹(shù)的復(fù)雜度。防止決策樹(shù)過(guò)擬合的方法:① 及早停止樹(shù)的生成,稱(chēng)為預(yù)剪枝(pre-prunning),② 先構(gòu)造樹(shù),但隨后刪除或者折疊信息量很少的節(jié)點(diǎn),稱(chēng)為后剪枝(post-pruning)或剪枝。預(yù)剪枝的方法使用較多。
預(yù)剪枝的限制條件:限制樹(shù)的最大深度、限制葉節(jié)點(diǎn)的最大數(shù)目或者規(guī)定一個(gè)節(jié)點(diǎn)中數(shù)據(jù)點(diǎn)的最小數(shù)目來(lái)防止繼續(xù)劃分。
分析決策樹(shù):將決策樹(shù)以可視化的形式展示出來(lái),決策樹(shù)的一大優(yōu)點(diǎn)之一就是很容易可視化,方便解釋模型。
樹(shù)的特征重要性:它為每個(gè)特征對(duì)樹(shù)的決策的重要性進(jìn)行排序。
決策樹(shù)總結(jié):
參數(shù):預(yù)剪枝參數(shù),如max_depth、max_leaf_nodes、min_samples_leaf;
優(yōu)點(diǎn):模型很容易可視化;算法不受數(shù)據(jù)縮放的影響,不需要做特征處理;
缺點(diǎn):即使做了預(yù)剪枝,也經(jīng)常出現(xiàn)過(guò)擬合,泛化性能很差。
為解克服決策樹(shù)的缺點(diǎn),提出了基于集成的隨機(jī)森林(Random forest)和梯度提升決策樹(shù)(Gradient boosted decision tree)。集成(ensemble),是合并多個(gè)機(jī)器學(xué)習(xí)的模型來(lái)構(gòu)建更強(qiáng)大模型的方法。已經(jīng)證明隨機(jī)森林和梯度提升決策樹(shù)對(duì)大量分類(lèi)和回歸的數(shù)據(jù)集都是有效的。
隨機(jī)森林總結(jié):
參數(shù):預(yù)剪枝參數(shù),如max_depth、max_leaf_nodes、min_samples_leaf,隨機(jī)樹(shù)的個(gè)數(shù)n_estimators、隨機(jī)選取的最大特征數(shù)max_feature;
優(yōu)點(diǎn):有決策樹(shù)的所有優(yōu)點(diǎn),同時(shí)彌補(bǔ)了決策樹(shù)容易出現(xiàn)過(guò)擬合的缺陷,通常不需要調(diào)節(jié)參數(shù)就可以給出很好的結(jié)果,也不需要對(duì)數(shù)據(jù)進(jìn)行縮放;
缺點(diǎn):對(duì)維度非常高的稀疏數(shù)據(jù),隨機(jī)森林的表現(xiàn)往往不好,訓(xùn)練過(guò)程中需要更大的內(nèi)存。
梯度提升回歸樹(shù),采用連續(xù)的方式構(gòu)造樹(shù),每棵樹(shù)都試圖糾正前一棵樹(shù)的錯(cuò)誤。默認(rèn)情況下,梯度提升回歸樹(shù)中沒(méi)有隨機(jī)化,而是用到了強(qiáng)預(yù)剪枝,通常采用深度較小的樹(shù)(樹(shù)深度范圍1-5),占用內(nèi)存少,預(yù)測(cè)速度快。
參數(shù):隨機(jī)樹(shù)的個(gè)數(shù)n_estimators、學(xué)習(xí)率learning_rate以及max_depth或max_leaf_nodes;
優(yōu)點(diǎn):有決策樹(shù)的所有優(yōu)點(diǎn),適用于二元特征與連續(xù)特征同時(shí)存在的數(shù)據(jù)集;
缺點(diǎn):需要仔細(xì)調(diào)參,而且訓(xùn)練時(shí)間可能會(huì)比較長(zhǎng),與其他基于樹(shù)的模型一樣,通常不適合用于高緯稀疏數(shù)據(jù)集。
算法5:核支持向量機(jī)
核技巧:Kernel trick
高斯核函數(shù),也稱(chēng)為RBF核函數(shù),
學(xué)習(xí)的參數(shù):C(懲罰項(xiàng),正則化參數(shù),限制每個(gè)點(diǎn)的重要性)和gamma(控制高斯核寬度的參數(shù),它決定了點(diǎn)與點(diǎn)之間“靠近”是指多大距離)
核支持向量機(jī)總結(jié):
參數(shù):正則化參數(shù)C、核函數(shù)以及和核函數(shù)相關(guān)的參數(shù);
優(yōu)點(diǎn):在低維數(shù)據(jù)和高緯數(shù)據(jù)上的表現(xiàn)都很好;適合小樣本;
缺點(diǎn):樣本超過(guò)10000或者更大時(shí),學(xué)習(xí)即耗內(nèi)存又耗時(shí)間,不適合較大的樣本;處理數(shù)據(jù)和調(diào)參需要特別小心;對(duì)數(shù)據(jù)縮放敏感,對(duì)參數(shù)選取敏感。
算法6:神經(jīng)網(wǎng)絡(luò)
多層感知機(jī)(Multilayer perceptron, MLP),MLP也被稱(chēng)為前饋神經(jīng)網(wǎng)絡(luò),也簡(jiǎn)稱(chēng)為神經(jīng)網(wǎng)絡(luò)。如下圖為單隱藏層的多層感知機(jī):
在計(jì)算完每個(gè)隱藏單元的加權(quán)求和之后,對(duì)結(jié)果再應(yīng)用一個(gè)非線性函數(shù),通常是校正非線性(rectifying nonlinearity, 也叫校正性單元或relu)或正切雙曲線(tangens hyperbolicus, tanh)。這兩個(gè)函數(shù)的可視化如下圖所示,relu截?cái)嘈∮?的值,而tanh在輸入值較小時(shí)接近-1,在輸入值較大時(shí)接近+1。有了這兩種非線性函數(shù),神經(jīng)網(wǎng)絡(luò)可以學(xué)習(xí)比線性模型復(fù)雜的多的函數(shù)。
神經(jīng)網(wǎng)絡(luò)在開(kāi)始學(xué)習(xí)之前其權(quán)重時(shí)隨機(jī)設(shè)置的,這種隨機(jī)初始化會(huì)影響學(xué)習(xí)的模型。也就是說(shuō),相同的參數(shù),學(xué)習(xí)的模型可能是不相同的。若網(wǎng)絡(luò)比較大,并且復(fù)雜選擇合理,初始隨機(jī)值的設(shè)置不會(huì)對(duì)精度有太大影響,否則讀預(yù)測(cè)精度可能會(huì)有較大的影響。
神經(jīng)網(wǎng)絡(luò)總結(jié):
參數(shù):隱藏層的層數(shù)、每個(gè)隱藏層的單元個(gè)數(shù)、激活函數(shù)、正則化參數(shù)等;
優(yōu)點(diǎn):能夠獲取大量數(shù)據(jù)中包含的信息,并構(gòu)建無(wú)比復(fù)雜的模型;
缺點(diǎn):過(guò)大的神經(jīng)網(wǎng)絡(luò),通常需要較長(zhǎng)的訓(xùn)練時(shí)間;與SVM類(lèi)似,神經(jīng)網(wǎng)絡(luò)在“均勻”數(shù)據(jù)上的性能最好,對(duì)數(shù)據(jù)縮放敏感,對(duì)參數(shù)選取敏感;
神經(jīng)網(wǎng)絡(luò)調(diào)參的通用方法:首先創(chuàng)建一個(gè)達(dá)到足以過(guò)擬合的網(wǎng)絡(luò),確保這個(gè)網(wǎng)絡(luò)可以對(duì)任務(wù)進(jìn)行學(xué)習(xí)。知道訓(xùn)練數(shù)據(jù)可以被學(xué)習(xí)以后,要么縮小網(wǎng)絡(luò),要么增大alpha來(lái)增強(qiáng)正則化,從而提高模型的泛化能力。
面對(duì)新的數(shù)據(jù)集,通常最好先從簡(jiǎn)單模型開(kāi)始,比如線性模型、樸素貝葉斯或最近鄰分類(lèi)器,看能得到什么樣的結(jié)果。對(duì)數(shù)據(jù)有了進(jìn)一步了解之后,可以考慮用于構(gòu)建更復(fù)雜模型的算法,如隨機(jī)森林、梯度提升決策樹(shù)、SVM或神經(jīng)網(wǎng)絡(luò)等。
第三章 無(wú)監(jiān)督學(xué)習(xí)和預(yù)處理
在無(wú)監(jiān)督學(xué)習(xí)中,學(xué)習(xí)算法只有輸入數(shù)據(jù),并需要從這些數(shù)據(jù)中提取知識(shí)。
3.1 無(wú)監(jiān)督學(xué)習(xí)的類(lèi)型
無(wú)監(jiān)督學(xué)習(xí)的類(lèi)型:無(wú)監(jiān)督變換(unsupervised transformation)和聚類(lèi)(clustering algorithm)。
數(shù)據(jù)集合無(wú)監(jiān)督變換(unsupervised transformation)是創(chuàng)建數(shù)據(jù)的表示的方法,與數(shù)據(jù)的原始表示相比,新的表示可能更容易被人或者機(jī)器學(xué)習(xí)算法所理解。無(wú)監(jiān)督變換的一個(gè)常見(jiàn)應(yīng)用是降維(dimensionality reduction)。另一個(gè)應(yīng)用是找到“構(gòu)成”數(shù)據(jù)的各個(gè)組成部分。
聚類(lèi)算法(clustering algorithm)將數(shù)據(jù)劃分成不同的組,每組包含相似的物項(xiàng)。
3.2 降維、特征提取與流形學(xué)習(xí)
主成分分析(principal component analysis, PCA)
主成分分析(principal component analysis, PCA),是一種旋轉(zhuǎn)數(shù)據(jù)集的方法,旋轉(zhuǎn)后的特征在統(tǒng)計(jì)上不相關(guān)。一般來(lái)說(shuō)經(jīng)過(guò)PCA獲得的主成分個(gè)數(shù)和原始特征相同,我們正是通過(guò)選取部分主成分實(shí)現(xiàn)降維的。
PCA是一種無(wú)監(jiān)督學(xué)習(xí)方法,在尋找旋轉(zhuǎn)方向時(shí),沒(méi)有用到任何類(lèi)別信息,只是觀察數(shù)據(jù)中的相關(guān)性。PCA的缺點(diǎn)在于,不容易對(duì)新生成的主成分進(jìn)行解釋?zhuān)驗(yàn)橹鞒煞謱?duì)應(yīng)于原始數(shù)據(jù)中的方向,所以它們是原始特征的組合。
PCA的用途:降維和特征提取;特征提取背后的思想是找到一種數(shù)據(jù)表示,比給定的原始表示更適合于分析。
非負(fù)矩陣分解(non-negative matrix factorization, NMF)
非負(fù)矩陣分解(non-negative matrix factorization, NMF),是一種無(wú)監(jiān)督學(xué)習(xí)算法,其目的在于提取有用的特征。它的工作原理類(lèi)似PCA,也可以用于降維。與PCA相同,NMF也試圖將每個(gè)數(shù)據(jù)點(diǎn)寫(xiě)成一些分量的加權(quán)求和,但PCA想要的是正交分量,并且能夠解析盡可能多的數(shù)據(jù)方差,而NMF中,希望分量和系數(shù)均為非負(fù)。因此NMF只能應(yīng)用于每個(gè)特征都是非負(fù)的數(shù)據(jù)。
t-SNE
流行學(xué)習(xí)算法(manifold learning algorithm),一類(lèi)可視化的算法,它允許進(jìn)行復(fù)雜的映射,通常可以給出更好的可視化。流行學(xué)習(xí)算法主要用于可視化。t-SNE就是一種有用的用于流行學(xué)習(xí)的算法,它可以計(jì)算訓(xùn)練數(shù)據(jù)的一種新的表示,但不允許變換數(shù)據(jù),這意味著該算法不能用于測(cè)試集。流行學(xué)習(xí)對(duì)探索性數(shù)據(jù)分析是很有用的,但如果最終目標(biāo)是監(jiān)督學(xué)習(xí),則很少使用。
t-SNE的思想就是找到數(shù)據(jù)的一個(gè)二維表示,盡可能的保持?jǐn)?shù)據(jù)點(diǎn)之間的距離。它試圖保持那些表示哪些點(diǎn)比較靠近的信息。
3.3 聚類(lèi)
k均值聚類(lèi)
k均值聚類(lèi)是最簡(jiǎn)單也是最常用的聚類(lèi)算法之一。它試圖找到代表數(shù)據(jù)特定區(qū)域的簇中心(cluster center)。
k均值聚類(lèi)的步驟如下:
- Ⅰ 首先設(shè)定k=3,并隨機(jī)設(shè)置3個(gè)簇中心,如C1,C2,C3;
- Ⅱ 計(jì)算每個(gè)點(diǎn)到三個(gè)簇中心的距離,距離哪個(gè)簇中心近就將該點(diǎn)歸為對(duì)應(yīng)的類(lèi);
- Ⅲ 重新計(jì)算簇中心,給C1,C2,C3重新賦值。簇中心就是該類(lèi)所有點(diǎn)的平均值;
- Ⅳ 重復(fù)Ⅱ和Ⅲ,直到簇中心不在發(fā)生變化為止。
由于每個(gè)簇都是由其中心定義,這意味著每個(gè)簇都是凸形,因此k均值只能找到相對(duì)簡(jiǎn)單的形狀。k均值還假設(shè)所有族在某種程度上具有相同的“直徑”,它總是將族之間的邊界剛好畫(huà)在簇中心的中間位置。
凝聚聚類(lèi)(agglomerative clustering)
凝聚聚類(lèi)值的是許多基于相同原則構(gòu)建的聚類(lèi)算法,這一原則是:算法首先聲明每個(gè)點(diǎn)是自己的簇,然后合并兩個(gè)相似的簇,知道滿(mǎn)足某種停止準(zhǔn)則為止。
最開(kāi)始,每個(gè)點(diǎn)自成一簇。然后在每個(gè)步驟中,相距最近的兩個(gè)簇被合并。
由上面凝聚聚類(lèi)算法的工作原理可知,該算法不能對(duì)新數(shù)據(jù)點(diǎn)進(jìn)行預(yù)測(cè)。
DBSCAN
DBSCAN(density-based spatial clustering of applications with noise),具有噪聲的基于密度的空間聚類(lèi)應(yīng)用。DBSCAN的主要優(yōu)點(diǎn)是不需要用戶(hù)先驗(yàn)的設(shè)置簇的個(gè)數(shù),可以劃分具有復(fù)雜形狀的簇,還可以找出不屬于任何簇的點(diǎn)。DBSCAN比凝聚聚類(lèi)和k均值計(jì)算速度稍慢,但是仍然可以擴(kuò)展到相對(duì)較大的數(shù)據(jù)集。
DBSCAN的原理是識(shí)別特征空間的“擁擠”區(qū)域中的點(diǎn),在這些區(qū)域中許多數(shù)據(jù)點(diǎn)靠近在一起。這些區(qū)域被稱(chēng)為特征空間中的密集區(qū)域。簇形成數(shù)據(jù)的密集區(qū)域并由相對(duì)較空的區(qū)域分隔開(kāi)。DBSCAN不能對(duì)新的數(shù)據(jù)進(jìn)行預(yù)測(cè)。
第四章 數(shù)據(jù)表示與特征工程
具有連續(xù)性的特征,稱(chēng)為連續(xù)特征(continuous feature),對(duì)于不具有連續(xù)性的特征稱(chēng)為分類(lèi)特征或者離散特征(discrete feature)。
特征工程 feature engineering:其目的就是找到數(shù)據(jù)的最佳表示。
4.1 分類(lèi)變量
One-Hot編碼
通常使用One-Hot編碼來(lái)表示分類(lèi)變量。One-Hot編碼也稱(chēng)為N取1編碼(one-out-of-N encoding),或者虛擬變量(dummy variable),其思想是將一個(gè)分類(lèi)變量替換為一個(gè)或者多個(gè)新特征,新特征取值為0和1。
數(shù)字可以編碼分類(lèi)變量
分類(lèi)特征通常用數(shù)字進(jìn)行編碼,如0,1,2,...,8,此時(shí)不能將該特征當(dāng)成一個(gè)連續(xù)的變量來(lái)建模。使用的技巧之一就是將數(shù)字轉(zhuǎn)成字符串。
4.2 分箱、離散化、線性模型與樹(shù)
數(shù)據(jù)的最佳表示方式,不僅取決于數(shù)據(jù)的語(yǔ)義,還取決于所使用的模型。
有一種方法可以讓線性模型在連續(xù)數(shù)據(jù)上變的更強(qiáng)大,就是使用特征分箱(binning,也叫離散化 discretization),將其劃分為多個(gè)特征,也就是將連續(xù)特征離散化為一個(gè)分類(lèi)特征。通過(guò)分箱之后,線性模型變的更加靈活了,而決策樹(shù)模型的靈活性則降低了。分箱對(duì)于基于樹(shù)的模型通常不會(huì)產(chǎn)生很好的學(xué)習(xí)效果。分箱通常針對(duì)的是單個(gè)特征。
例如:對(duì)于只有一個(gè)連續(xù)特征的數(shù)據(jù),可以使用決策樹(shù)先學(xué)習(xí)分箱的邊界,再使用決策樹(shù)學(xué)習(xí)的到邊界對(duì)連續(xù)的特征進(jìn)行分箱,最后使用線性模型對(duì)分箱之后的數(shù)據(jù)進(jìn)行學(xué)習(xí)。這種方式有效的結(jié)合了決策樹(shù)和線性模型。
4.3 交互特征與多項(xiàng)式特征
要想豐富特征表示,特別是對(duì)于線性模型而言,另一種方法是添加原始數(shù)據(jù)的交互特征(interaction feature)和多項(xiàng)式特征(polynomial feature)。
例如:將通過(guò)分箱得到的離散特征和原始特征都作為訓(xùn)練特征。(我的風(fēng)電功率預(yù)測(cè)的論文中,基于上升風(fēng)和下降風(fēng)的預(yù)測(cè)以及將風(fēng)速分段劃分的預(yù)測(cè),都包含了分箱+交互特征的思想。)
分箱是擴(kuò)展連續(xù)特征的一種方法,另一種方法是使用原始特征的多項(xiàng)式,進(jìn)行特征擴(kuò)展,假設(shè)給定特征x,可以考慮擴(kuò)展特征,x^2, x^3, x^4等。將多項(xiàng)式特征與線性回歸模型結(jié)合,可以得到經(jīng)典的多項(xiàng)式回歸(polynomial regression)模型。
4.4 單變量非線性變換
添加特征的平方或者立方可以改進(jìn)線性回歸模型。其他變換通常也對(duì)變換某些特征有用,如使用數(shù)學(xué)函數(shù),log、exp、sin等。
4.5 自動(dòng)化特征選擇
上述幾節(jié)內(nèi)容主要描述如何進(jìn)行特征擴(kuò)展,本節(jié)主要描述如何選擇有效的特征。如何判斷特征的重要性呢?有三種基本策略:
- 單變量統(tǒng)計(jì)(univariate statistics),就是計(jì)算每個(gè)特征和目標(biāo)指之間的關(guān)系是否存在統(tǒng)計(jì)顯著特性,然后選擇具有高置信度的特征。對(duì)于分類(lèi)問(wèn)題,這也被稱(chēng)為方差分析(analysis of variance, ANOVA)。
- 基于模型的選擇(model-based selection)使用一個(gè)監(jiān)督機(jī)器學(xué)習(xí)模型來(lái)判斷每個(gè)特征的重要性,并且僅保留最重要的特征。如使用L1懲罰的線性模型選擇重要特征。
- 迭代選擇(iterative selection)。在迭代特征選擇中,會(huì)構(gòu)建一系列模型,每個(gè)模型都使用不同數(shù)量的特征。可以不斷增加特征進(jìn)行選擇,也可以不斷減少特征進(jìn)行選擇。
4.6 利用專(zhuān)家知識(shí)
雖然在許多情況下,機(jī)器學(xué)習(xí)的目的是避免創(chuàng)建一組專(zhuān)家設(shè)計(jì)的規(guī)則,但這并不意味著舍棄該應(yīng)用或者該領(lǐng)域的知識(shí)。
第五章 模型評(píng)估和改進(jìn)
5.1 交叉驗(yàn)證
交叉驗(yàn)證(cross-validation)是一種評(píng)估泛化性能的統(tǒng)計(jì)學(xué)方法,它比單次劃分訓(xùn)練集和測(cè)試集的方法更加穩(wěn)定、全面。
交叉驗(yàn)證指將訓(xùn)練樣本分成n組,每次循環(huán)的選擇n-1組作為訓(xùn)練樣本,而剩下的一組作為測(cè)試樣本,并用測(cè)試樣本驗(yàn)證模型學(xué)習(xí)結(jié)果的泛化誤差。一般m的取值為2到10之間的數(shù),若m=10,表示10折交叉驗(yàn)證(10-fold cross-validation),最常用。
總結(jié)交叉驗(yàn)證精度的一種常用方法是計(jì)算平均值。交叉驗(yàn)證不是一種構(gòu)建可以應(yīng)用于新數(shù)據(jù)的模型的方法,它的主要用途只是評(píng)估給定算法在特定數(shù)據(jù)集上訓(xùn)練后的泛化能力。
k折交叉驗(yàn)證再一些特殊的情況下可能會(huì)失效,分層k折交叉驗(yàn)證(stratified k-fold cross-validation)劃分?jǐn)?shù)據(jù),使每個(gè)折中類(lèi)別之間的比例與整個(gè)數(shù)據(jù)集中的比例相同。
其他常用交叉驗(yàn)證方法,留一交叉驗(yàn)證(leave-one-out)、打亂劃分交叉驗(yàn)證(shuffle-split cross-validation)、分組交叉驗(yàn)證。
5.2 網(wǎng)格搜索(grid search)
交叉驗(yàn)證可以評(píng)估一個(gè)模型的泛化能力,而通過(guò)調(diào)參可以提升模型的泛化性能。網(wǎng)格搜索就是一種最常用的尋找模型參數(shù)值的方法。
帶交叉驗(yàn)證的網(wǎng)格搜索。
【后續(xù)繼續(xù)完善...】