王可晴
(浙江省蕭山中學(xué),浙江杭州,310000)
泰坦尼克號的沉沒是歷史上具有廣泛影響的沉船事件之一,1912年4月15日,在首次航行期間,泰坦尼克號撞上冰山后沉沒,2224名乘客和機(jī)組人員中有1502人遇難。這場轟動的悲劇震撼了國際社會。雖然幸存下來的人存在一些運(yùn)氣方面的因素,但有一些人比其他人更有可能生存,比如婦女,兒童和上層階級。我們的目標(biāo)便是根據(jù)每位乘客的性別,年齡,艙位等相關(guān)特征,來預(yù)測該乘客是否會在該次乘船事故中存活下來。
我們總共有900名左右的乘客數(shù)據(jù),每位乘客包括10個 特 征, 包 括 Pclass,Name,Sex,Age,SibSp,Parch,Ticket,F(xiàn)are,Cabin,Embarke。 我 們 將 拿 出600名乘客數(shù)據(jù)作為我們的訓(xùn)練集,剩下的數(shù)據(jù)作為我們的測試集,用來檢驗(yàn)我們構(gòu)建模型的性能好壞。
通過對數(shù)據(jù)集的觀察發(fā)現(xiàn),有些乘客的部分屬性存在著一定的缺失值NaN,比如Age,F(xiàn)are等相關(guān)屬性。我們需要對這些數(shù)據(jù)進(jìn)行填充,對于連續(xù)型屬性數(shù)據(jù)缺失的情況,我們通過在未缺失數(shù)據(jù)上構(gòu)建一個隨機(jī)森林回歸模型,來對缺失的數(shù)據(jù)屬性進(jìn)行擬合,然后填充該部分缺失的數(shù)據(jù)。對于離散型數(shù)據(jù)缺失的情況,我們將刪除該乘客對應(yīng)的記錄。
對于Ticket,Cabin,Embarke等類目型變量,我們將把它們轉(zhuǎn)化為one-hot獨(dú)熱編碼。采用one-hot編碼后,一方面可以使樣本之間能夠直接進(jìn)行距離的計算,另一方面能夠擴(kuò)充樣本特征的數(shù)目。在一定的程度上,提高模型的性能。
經(jīng)過預(yù)處理后,我們的待訓(xùn)練樣本,從原始的10個特征增加到15個特征。增加的特征主要是由于類目型特征經(jīng)過了one-hot編碼的轉(zhuǎn)換。15個特征中不包括乘客姓名特征Name,因?yàn)橥ㄟ^對數(shù)據(jù)分析,乘客的姓名應(yīng)該和該乘客是否能夠存活下來無關(guān)。
2.1.1 kNN模型原理
KNN(K Nearest Neighbor)算法,又稱之為K領(lǐng)近算法,是數(shù)據(jù)挖掘與機(jī)器學(xué)習(xí)中最簡單的分類方法之一。K領(lǐng)近指的是待分類樣本點(diǎn)最近的K個鄰居。kNN 模型最初由Cover和Hart于1968 年提出, 是一個在理論上比較成熟的方法[1]。
KNN模型的主要思想是,將訓(xùn)練集繪制在特征空間中,然后將待分類樣本,通過特定的距離計算公式,得到該樣本在該特征空間最近的K個鄰居,然后采取投票原則,將K個鄰居中得票最多的類別作為待分類樣本的類別。
在我們要解決的實(shí)例問題中,我們的訓(xùn)練樣本包括600個乘客的特征數(shù)據(jù),將它們繪制在特征空間里。在測試集的300個數(shù)據(jù)中,我們計算每一個乘客與訓(xùn)練集中600個乘客的距離遠(yuǎn)近,挑選出最近的k個距離,然后采取投票原則,k個樣本中所屬類別最多的類別就是測試樣本的類別。
2.1.2 結(jié)果分析
我們采用了sklearn機(jī)器學(xué)習(xí)庫中kNN模型算法,對我們的數(shù)據(jù)進(jìn)行了訓(xùn)練。并且嘗試了不同的k取值,在該問題上的正確率。我們分別測試了當(dāng)k 取5,10,15,20時模型的結(jié)果。測試的結(jié)果顯示,在上述4種k的取值下,在測試集上的正確率分別為79.3%,81.7%,83.1%,82.4%。由此可見,在泰坦尼克號這個問題上經(jīng)過驗(yàn)證,當(dāng)k取值在15左右時,模型的結(jié)果較好。
關(guān)于kNN模型中k值的不同選擇:當(dāng)k值較小時,預(yù)測結(jié)果對近鄰的實(shí)例點(diǎn)非常敏感,容易發(fā)生過擬合;如果k值過大模型會傾向大類,容易欠擬合;通常k是不大于20的整數(shù)。kNN算法的優(yōu)點(diǎn)是精度高,對異常值不敏感。但是缺點(diǎn)是對k的取值相對比較敏感,不同的k取值對模型產(chǎn)生的結(jié)果可能差異性非常的明顯。
另一方面,由于我們的訓(xùn)練集的大小僅僅為600個樣本,而對于其他的一些機(jī)器學(xué)習(xí)應(yīng)用,我們可能有上百萬訓(xùn)練樣本,這個時候kNN算法的局限性就暴露出來了,每預(yù)測一個新的樣本的類別,我們都需要計算該樣本與上百萬樣本的距離,會造成算法運(yùn)行速度非常緩慢,效率低下,這時候需要采用其他速度更快的分類模型來解決該問題。
2.2.1 邏輯回歸模型原理
邏輯回歸是機(jī)器學(xué)習(xí)中一種常見的分類模型,其對于簡單的分類問題具有良好的效果。其基本原理是采用sigmoid函數(shù)作為我們的預(yù)測函數(shù),來預(yù)測條件概率P(y = 1 | x)。在我們的問題中,sigmoid函數(shù)的輸出就是乘客存活下來的概率,范圍在[0,1]之間。模型在訓(xùn)練的過程中,通過不斷最小化極大似然代價函數(shù),來提高模型預(yù)測的準(zhǔn)確率。在訓(xùn)練的過程中,加入正則化項(xiàng),可在一定程度上減輕模型過擬合。
2.2.2 邏輯回歸的假設(shè)函數(shù)
假設(shè)函數(shù)采用sigmoid函數(shù),函數(shù)形式為如1式,取值范圍為[0,1]。代表了每位乘客存活下來的概率。其中z =θTxX,θ是模型需要學(xué)習(xí)的參數(shù),X在該問題中對應(yīng)每個乘客的特征向量。即z是每位乘客所有特征的線性組合。
2.2.3 邏輯回歸的代價函數(shù)
代價函數(shù)是我們優(yōu)化的目標(biāo)函數(shù),用來衡量模型在訓(xùn)練集上的擬合程度,在訓(xùn)練集上擬合的越好,代價函數(shù)就越小,在訓(xùn)練集上擬合的不好,那么代價函數(shù)就越大。所謂的學(xué)習(xí)過程,實(shí)質(zhì)是就是不斷的通過更新模型的參數(shù)值,來降低代價函數(shù)值的過程。
常見的代價函數(shù)有MSE代價,交叉熵代價。其中前者常常應(yīng)用于回歸問題中,交叉熵代價常用于分類問題中。對于我們的問題而言,由于是一個二分類問題,所以采用交叉熵代價函數(shù)。交叉熵代價函數(shù)的表達(dá)形式如2式。其中g(shù)(θ)代表了邏輯回歸函數(shù)的輸出,log代表以10為底的對數(shù),yi代表樣本的真實(shí)分布。
2.2.4 邏輯回歸的潛在問題
理論上來說,算法在經(jīng)過多次迭代的過程中。代價函數(shù)的值可以不斷的降低,直到達(dá)到一個比較小的值后,基本保持不變。但是這樣存在的一個問題是,模型會過度的擬合訓(xùn)練集的數(shù)據(jù),從而陷入過擬合的風(fēng)險。一旦模型陷入了過擬合,即使模型在訓(xùn)練集上的準(zhǔn)確率很高,但是模型沒有足夠的泛化能力,將模型推廣到未知的數(shù)據(jù)[2],造成在測試集上的效果不好。
2.2.5 邏輯回歸的正則化
為了解決上述提到的模型可能陷入過擬合的問題,需要采取一定的措施。常見的緩解過擬合的措施,可以增加訓(xùn)練集的數(shù)目,或者采取正則化手段。由于我們不太容易去增加訓(xùn)練集的數(shù)目,因此可以采用正則化手段。常見的正則化有L1,L2正則化。在我們的問題中采用L1正則化,加入正則化項(xiàng)的代價函數(shù)如3式,其中C為正則化參數(shù)。
2.2.6 結(jié)果分析通過在訓(xùn)練的過程中加入的L1正則化項(xiàng),我們的模型基本沒有發(fā)生過擬合,在訓(xùn)練集上的準(zhǔn)確率達(dá)到了79.8%,在測試集上達(dá)到了81.7%的正確率,取得了良好的性能。邏輯回歸的優(yōu)點(diǎn)是在于簡單,訓(xùn)練速度相對于KNN模型快很多。但是其一般更適合用于線性可分的問題當(dāng)中,而對于一些線性不可分的問題中,采用更復(fù)雜的非線性模型可能會取得更好的效果。
2.3.1 SVM模型原理
支持向量機(jī)(support vector machine,SVM),它最初于20世紀(jì)90年代由Vapnik提出,是機(jī)器學(xué)習(xí)中一種十分強(qiáng)大的分類模型。與數(shù)據(jù)挖掘中的其他分類模型相比,具有較好的泛化能力。而且針對非線性可分?jǐn)?shù)據(jù),擁有一套先進(jìn)的理論方法來處理。SVM(Support Vector Machine)指的是支持向量機(jī),是常見的一種判別方法。在邏輯回歸建立超平面的基礎(chǔ)上尋找唯一且最合理的分界。對于線性可分情況,具體方法是尋找離各鄰近點(diǎn)距離之和最大的線來進(jìn)行分隔;對于線性不可分情況,則需要核函數(shù)的幫助。由于其優(yōu)秀的分類性能,在機(jī)器學(xué)習(xí)領(lǐng)域成為了研究的熱點(diǎn)。在學(xué)術(shù)界,不斷的有新的理論被提出。近年來,與SVM相關(guān)的方法,在人臉識別,手寫識別,文本分類中得到了廣泛的應(yīng)用,并且取得了很好的效果[2]。
SVM可以理解為是邏輯回歸的改進(jìn),對于邏輯回歸模型來講,由于存在無數(shù)個可能的解,解不唯一。即存在無數(shù)個超平面將數(shù)據(jù)分割開來,因此算法得到的解可能不一定是最優(yōu)的。而SVM算法能從這無數(shù)個超平面中,選取一個最大間隔的超平面,使模型的泛化能力更強(qiáng)。
SVM主要適用于兩種情況。第一類是線性可分?jǐn)?shù)據(jù),第二類是線性不可分?jǐn)?shù)據(jù)。對于線性可分?jǐn)?shù)據(jù),采用了核技巧,將數(shù)據(jù)從低維空間映射到高維空間,再通過松弛變量等技術(shù)使數(shù)據(jù)變的線性可分。
2.3.2 SVM模型的核函數(shù)
對于線性可分的數(shù)據(jù),普通的SVM可以取得很好的效果。但在現(xiàn)實(shí)世界里,存在著很多非線性可分的數(shù)據(jù)。這個時候,普通的SVM就不太適用。核函數(shù)本質(zhì)上是一種建立從一維到多維空間的映射。當(dāng)線性不可分的情況通過核函數(shù)映射到多維,就可能成為線性可分,即可以通過方法一加以分隔。此時,線性不可分?jǐn)?shù)據(jù)就可能變成線性可分?jǐn)?shù)據(jù),核函數(shù)用來計算兩個低維空間的向量在高維空間的內(nèi)積,只要滿足Mercer 條件的函數(shù),都可以作為核函數(shù)。常見的核函數(shù)有線性核函數(shù),高斯核函數(shù),多項(xiàng)式核函數(shù)等[3]。
2.3.3 結(jié)果分析
當(dāng)訓(xùn)練集數(shù)目比較小時,SVM算法一般能夠取得很好的效果。但是當(dāng)訓(xùn)練集數(shù)目比較多時,SVM比較容易陷入過擬合,所以需要采用一定的正則化措施來緩解過擬合。
因此我們使用了sklearn中帶有核函數(shù)的SVM,在包含有600個樣本的訓(xùn)練集上經(jīng)過一段時間的訓(xùn)練后,最終得到的支持向量個數(shù)為298個??梢钥吹酱蟾庞?0%的訓(xùn)練樣本為支持向量。
我們采用了不同的核函數(shù)來檢驗(yàn)?zāi)P偷男Ч瑢?shí)驗(yàn)結(jié)果表明,不同的核函數(shù)在該問題上的差異性不顯著。最終我們采用了帶有高斯核函數(shù)的SVM,在訓(xùn)練集上的正確率為81.8%,在測試集中進(jìn)行測試時,得到了83.5%的正確率。從訓(xùn)練集和測試集上的正確率來看,模型基本上沒有發(fā)生過擬合。SVM也是在包含上述一系列的分類模型中,所達(dá)到的正確率比較高的模型,因此可見,SVM模型是效果非常好的一個分類模型。
2.4.1 神經(jīng)網(wǎng)絡(luò)模型原理
神經(jīng)網(wǎng)絡(luò)是基于生物學(xué)中神經(jīng)網(wǎng)絡(luò)的基本原理,對人類大腦工作過程的一個簡單的模擬。它能夠通過一定的學(xué)習(xí)算法,學(xué)到一個非常復(fù)雜的非線性模型。當(dāng)數(shù)據(jù)量比較大時,具有十分強(qiáng)大的泛化能力。
神經(jīng)網(wǎng)絡(luò)通過將多個神經(jīng)元通過一定的聯(lián)結(jié)方式連接在一起,構(gòu)成一個運(yùn)算模型。每個神經(jīng)元節(jié)點(diǎn)的輸入是上一層神經(jīng)元輸入的線性組合,然后加上激活函數(shù)后,作為該個神經(jīng)元的輸出。常用的激活函數(shù)有sigmoid,tanh,Relu等。每兩個神經(jīng)元之間,具有一個權(quán)重值w。神經(jīng)網(wǎng)絡(luò)就是通過激活函數(shù),權(quán)重,聯(lián)結(jié)方式來模擬人類大腦的學(xué)習(xí)記憶功能。
神經(jīng)網(wǎng)絡(luò)在工作時,首先通過前向傳播計算代價函數(shù)值,然后通過反向傳播算法計算代價函數(shù)的梯度值,最后通過一定的優(yōu)化算法,更新神經(jīng)網(wǎng)絡(luò)的每一層的權(quán)重矩陣W。
在我們的泰坦尼克號乘客遇難問題中,每個乘客在經(jīng)過預(yù)處理后,有14個特征,所以我們的神經(jīng)網(wǎng)絡(luò)的輸入層一共含有14個神經(jīng)元,第二層網(wǎng)絡(luò)具有32個神經(jīng)元,第三層網(wǎng)絡(luò)具有64個神經(jīng)元,輸出層含有一個神經(jīng)元。在這個問題上,我們建立了一個具有多層感知機(jī)的神經(jīng)網(wǎng)絡(luò)來進(jìn)行預(yù)測,并且添加了相應(yīng)的正則化項(xiàng)來防止模型的過擬合[4]。
2.4.2 神經(jīng)網(wǎng)絡(luò)模型dropout正則化
dropout(隨機(jī)失活神經(jīng)元)是在訓(xùn)練神經(jīng)網(wǎng)絡(luò)過程中,避免模型過擬合常用的技巧。在標(biāo)準(zhǔn)的神經(jīng)網(wǎng)絡(luò)中,由于層次可能較深,神經(jīng)元的個數(shù)可能較多。因此模型很容易陷入過擬合。如果引入了dropout技術(shù),在每輪訓(xùn)練的過程中隨機(jī)斷開部分神經(jīng)元,只更新部分神經(jīng)網(wǎng)絡(luò)權(quán)重值??梢栽谝欢ǔ潭壬?,緩解神經(jīng)網(wǎng)絡(luò)訓(xùn)練過程中模型的過擬合問題。從另一個角度講,由于每次只訓(xùn)練部分神經(jīng)元,也可以提高訓(xùn)練的速度,加速訓(xùn)練的過程。
2.4.3 結(jié)果分析
我們通過構(gòu)建了一個三層的感知機(jī)神經(jīng)網(wǎng)絡(luò),對600個訓(xùn)練集數(shù)據(jù)進(jìn)行訓(xùn)練,最終在訓(xùn)練集上取得了85.8%的正確率,在測試集上取得了83.5%的正確率,基本和SVM得到的結(jié)果不相上下。實(shí)質(zhì)上,神經(jīng)網(wǎng)絡(luò)更適合處理特征數(shù)目很多,訓(xùn)練集數(shù)目很大的情況,而在泰坦尼克號這個問題上,由于我們只有幾百個訓(xùn)練樣本,每個樣本只有十幾個特征。因此,雖然結(jié)果表現(xiàn)不錯,但是沒有真正體現(xiàn)出神經(jīng)網(wǎng)絡(luò)強(qiáng)大的泛化能力,沒有體現(xiàn)出多層神經(jīng)網(wǎng)絡(luò)的主要優(yōu)勢。
本項(xiàng)目通過Kaggle上具體的實(shí)例“泰坦尼克號乘客遇難預(yù)測分析”,對該問題分別采用了KNN模型,邏輯回歸模型,SVM模型以及神經(jīng)網(wǎng)絡(luò)模型。在該問題的同一測試集上,最優(yōu)模型分別取得了79%,81.7%,83.5%,83.5的正確率。比較了機(jī)器學(xué)習(xí)中不同的分類模型在該問題上的優(yōu)缺點(diǎn)。通過對該問題的研究,掌握了不同分類模型的差異性。