0
| 本文作者: skura | 2019-10-12 11:34 |

你不需要重新發(fā)明輪子,你需要知道如何使用現(xiàn)有的輪子更好地完成你想做的事情。
由 Kaggle 主辦的泰坦尼克號挑戰(zhàn)賽是一場比賽,其目標(biāo)是根據(jù)一組描述某位乘客的變量(如年齡、性別或船上乘客等級)來預(yù)測該乘客的生死。
我玩泰坦尼克號的數(shù)據(jù)已經(jīng)有一段時間了。在寫這篇文章的時候,我在 11002 名參與者中排名第 113 位。
你一定想知道我是怎么做到的。所以我們就直接切入主題吧。
背景
泰坦尼克號的沉沒是歷史上最著名的沉船事件之一。1912 年 4 月 15 日,泰坦尼克號在處女航中與冰山相撞后沉沒,2224 名乘客和船員中有 1502 人遇難。這一聳人聽聞的悲劇震驚了國際社會。
沉船事故導(dǎo)致如此多人喪生的原因之一是沒有足夠的救生艇供乘客和船員使用。雖然在沉船事件中幸存下來有一些運氣因素,但有些人比其他人,更有可能幸存下來,如婦女、兒童和上層階級。
環(huán)境和工具
scikit-learn
numpy
pandas
matplotlib
seaborn
數(shù)據(jù)集可以從 kaggle 網(wǎng)站下載到。
代碼在哪里?
關(guān)于 github 的完整項目可以在這里找到。
以下是數(shù)據(jù)集中提供的特征。
Passenger Id:船上每位旅客的身份編號
Pclass:客艙等級,它有三個可能的值:1,2,3(一級、二級和三級)
The Name of the passenger :乘客姓名
Sex
Age
SibSp:與乘客同行的兄弟姐妹和配偶人數(shù)
Parch:與乘客同行的父母和兒童人數(shù)
The ticket number :票號
The ticket fare:票價
The cabin number :船艙號
The embarkation:這描述了泰坦尼克號上三個區(qū)域,人們從這些區(qū)域出發(fā)。其三個可能值為 S,C,Q
我從導(dǎo)入所有庫和依賴項開始。
接下來我加載了包含所有細(xì)節(jié)的 csv 文件。

特征工程與特征選擇
這可能是機器學(xué)習(xí)工作流中最重要的部分。由于算法完全取決于我們?nèi)绾屋斎霐?shù)據(jù),因此特征工程應(yīng)該是每個機器學(xué)習(xí)項目的首要任務(wù)。
特征工程是將原始數(shù)據(jù)轉(zhuǎn)換為能更好地將潛在問題表示為預(yù)測模型特征的過程,從而提高模型對未知數(shù)據(jù)預(yù)測的精度。
特征工程的優(yōu)勢
減少過擬合:更少的冗余數(shù)據(jù)意味著做出基于噪音的決策的概率更小。
提高準(zhǔn)確性:更少的誤導(dǎo)性數(shù)據(jù)意味著建模精度提高。
減少訓(xùn)練時間:更少的數(shù)據(jù)點降低算法復(fù)雜度,使得算法訓(xùn)練更快。
我創(chuàng)建了一些特征,用于判斷乘客是否有客艙,計算家庭規(guī)模,以及判斷一個人是否獨自旅行。另外,我做了一些數(shù)據(jù)清洗,比如從數(shù)據(jù)集中刪除空值。
我繼續(xù)進(jìn)行特征工程,創(chuàng)建一個函數(shù)來獲得一個人的頭銜。此外,我把所有不常用的列數(shù)據(jù)歸為一組。然后我根據(jù)以下幾個特征對人們進(jìn)行了分類——sex, title, embarked, fare 和 age。
然后我刪除了一些列,如 PassengerId, name, ticket, cabin, sibSp,因為這些值對我們的預(yù)測看起來并不重要。
接下來,我制作了一個混淆矩陣來可視化不同特征之間的相互關(guān)系。

混淆矩陣
到現(xiàn)在為止,一直都還不錯。我繼續(xù)創(chuàng)建一個名為 title 的特征。另外,我將 Sex 映射為一個二進(jìn)制特征,并創(chuàng)建了一個按標(biāo)題分組的 Sex 分布表。
我使用決策樹作為機器學(xué)習(xí)模型。我使用一個自定義的特征計算了基尼不純度分?jǐn)?shù),以優(yōu)化樹節(jié)點。這個自定義特征被定義為幸存的人數(shù)在總登船人數(shù)中的占比。
我用這個超參數(shù)玩了一段時間,直到得到滿意的結(jié)果。
在最后一部分,我使用了十個切分的 k-fold 交叉驗證模型。在 k 重交叉驗證中,數(shù)據(jù)被劃分為 k 個子集。現(xiàn)在,holdout 方法被重復(fù) k 次,這樣每次其中一個 k 子集被用作驗證集,而另一個 k-1 子集被組合在一起形成訓(xùn)練集。當(dāng)我們使用大多數(shù)數(shù)據(jù)進(jìn)行擬合時,會顯著地減少偏差,同時也顯著地減少方差,因為大多數(shù)數(shù)據(jù)也在驗證集中使用。
此步驟用于檢查模型是否過擬合。過擬合是指對訓(xùn)練集上的數(shù)據(jù)建模得太好的模型。這種模型不適用于新數(shù)據(jù),過擬合會對模型的泛化能力產(chǎn)生負(fù)面影響。
過擬合就像學(xué)校里的學(xué)生記憶概念而加理解。
最后,在決策樹中的深度是不同的,讓我們看看模型的準(zhǔn)確性。
結(jié)果

結(jié)論
我認(rèn)為,對于一個正在踏上數(shù)據(jù)科學(xué)/機器學(xué)習(xí)之旅的人來說,這場比賽是一個很好的起點。一個人可以玩不同的分類模型,如 logistic 回歸,隨機森林,樸素貝葉斯,支持向量機等。這場比賽應(yīng)該是一個很好的試驗臺,你還可以嘗試一些更復(fù)雜的算法,如 xgboost,自動編碼,梯度增強,神經(jīng)網(wǎng)絡(luò)或以上算法的集合。
相應(yīng)的源代碼可以在這里找到:https://github.com/abhinavsagar/Kaggle-Titanic-Solution?source=post_page-----7716386ba298----------------------
當(dāng)然,如果同學(xué)們已經(jīng)學(xué)過這個經(jīng)典項目了,需要進(jìn)一步提高怎么辦?為滿足大家的需求,AI 研習(xí)社最新上線了一個有趣的比賽——英文垃圾信息分類挑戰(zhàn)賽!
參賽地址:https://god.yanxishe.com/11

大賽簡介
數(shù)據(jù)集
本次比賽數(shù)據(jù)來源于 SMS Spam Collection,感謝新加坡國立大學(xué)靳民彥教授對本次比賽提供的支持!
在這個數(shù)據(jù)集中,訓(xùn)練集共3450條數(shù)據(jù),測試集1672。
數(shù)據(jù)集下載鏈接:https://dwz.cn/NaPIpNg7 。
比賽任務(wù)
正確識別測試集樣本數(shù)是否為垃圾信息(0是正常短信,1是垃圾短信)。
比賽獎金
本次比賽共設(shè)置3種獎項,獎金將在比賽后提現(xiàn)時發(fā)放到微信零錢。
1.參與獎(Participation Award)
金額:占總獎金的30%;
獲獎人數(shù):所有人(每人僅能獲得一次參與獎);
獲獎條件:提交結(jié)果大于標(biāo)準(zhǔn)分,標(biāo)準(zhǔn)分=90;
R為得分區(qū)間系數(shù),R1(0.45)、R2(0.2)、R3(0.15)、R4(0.12)、R5(0.08);
money為已經(jīng)發(fā)放的參與獎獎金;

2.突破獎(Prizes)
金額:占總獎金20%;
獲獎人數(shù):所有人;
score為參數(shù)選手得分,N表示第N次更新排行榜;Prizes_N-1表示:排行榜更新后已發(fā)放的突破獎金。

3.排名獎(Ranking Award)
金額:占總獎金50%;
獲獎人數(shù):得分前5名
T為獎金時間系數(shù),比賽上線第一周、一個月,T(周)=0.5,T(月)=0.5;
K為排名獎金分配系數(shù),前5名分配系數(shù)分別為0.45、0.2、0.15、0.12、0.08;

評審標(biāo)準(zhǔn)
我們將會對比選手提交的csv文件,確認(rèn)正確識別短信數(shù)據(jù):
True:模型分類正確數(shù)量
Total :測試集樣本總數(shù)量

參賽條件
歡迎所有在校學(xué)生、在職工程師和AI愛好者參賽!歡迎點擊:https://god.yanxishe.com/11 訪問相關(guān)頁面,查看比賽詳情~
雷鋒網(wǎng)雷鋒網(wǎng)雷鋒網(wǎng)
雷峰網(wǎng)版權(quán)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。