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