大綱
- 序
- 數(shù)據(jù)來(lái)源
- 工具介紹
- 數(shù)據(jù)分析
- 數(shù)據(jù)概覽
- 測(cè)定基準(zhǔn)
- 分析特征重要性
- 數(shù)據(jù)展示(可視化)
- 特征工程
- 數(shù)據(jù)清洗
- 提取新特征
- 特征選取
- 數(shù)據(jù)導(dǎo)出
- 機(jī)器學(xué)習(xí)預(yù)測(cè)
- 選擇算法
- 訓(xùn)練及評(píng)估
- 預(yù)測(cè)結(jié)果
- 人物畫像
- 總結(jié)
- 結(jié)合歷史核對(duì)結(jié)論
- 一些特別的數(shù)據(jù)
- 結(jié)語(yǔ)
- 參考
序
- 1912年索烹,當(dāng)時(shí)世界上體積最龐大工碾、內(nèi)部設(shè)施最豪華的客運(yùn)輪船,有“永不沉沒(méi)”美譽(yù)的泰坦尼克號(hào)百姓,在她的處女航中撞冰山沉入大西洋底3700米處渊额,船上1500多人喪生。
- 1985年垒拢,美國(guó)和法國(guó)聯(lián)合搜索隊(duì)發(fā)現(xiàn)泰坦尼克號(hào)殘骸旬迹。
- 1997年,詹姆斯·卡梅隆執(zhí)導(dǎo)美國(guó)電影《泰坦尼克號(hào)》子库,將整個(gè)驚心動(dòng)魄的過(guò)程首次以電影的方式還原舱权。
- 2012年,《泰坦尼克號(hào)》3D版在中國(guó)內(nèi)地重映仑嗅,再次喚起人們對(duì)艘富有傳奇色彩的巨輪的緬懷宴倍。
- 2017年5月,有科學(xué)家表示仓技,細(xì)菌正在蠶食泰坦尼克號(hào)沉船殘骸鸵贬。據(jù)最近的估計(jì),到2030年脖捻,這艘船可能會(huì)迎來(lái)它的末日阔逼,徹底消失。
假設(shè)如果真有穿越這回事地沮,突然哪一天你的靈魂穿越到了正在航行的泰坦尼克號(hào)上的某個(gè)乘客身上嗜浮,你發(fā)現(xiàn)你身處某層客艙內(nèi),被你的同伴稱為Mr/Miss摩疑,而你只有現(xiàn)代的記憶危融。突然一聲巨響同時(shí)船身劇烈搖晃,人們驚慌不知所措雷袋,那么此時(shí)此刻的你吉殃,有多大機(jī)率可以活下來(lái)?
接下來(lái),我會(huì)通過(guò)數(shù)據(jù)分析蛋勺,告訴你有哪些特征會(huì)影響你的存活機(jī)率瓦灶。
數(shù)據(jù)來(lái)源
著名的數(shù)據(jù)分析競(jìng)賽網(wǎng)站Kaggle上,舉行了很多數(shù)據(jù)分析比賽抱完,其中比較著名的就有 泰坦尼克號(hào)乘客生還預(yù)測(cè) 贼陶。
Kaggle提供的數(shù)據(jù)集中,共有1309名乘客數(shù)據(jù)乾蛤,其中891是已知存活情況每界,剩下418則是需要進(jìn)行分析預(yù)測(cè)的。
提供的數(shù)據(jù)特征如下:
PassengerId: 乘客編號(hào)
Survived :存活情況(存活:1 ; 死亡:0)
Pclass : 客艙等級(jí)
Name : 乘客姓名
Sex : 性別
Age : 年齡
SibSp : 同乘的兄弟姐妹/配偶數(shù)
Parch : 同乘的父母/小孩數(shù)
Ticket : 船票編號(hào)
Fare : 船票價(jià)格
Cabin :客艙號(hào)
Embarked : 登船港口
PassengerId
是數(shù)據(jù)唯一序號(hào)家卖;Survived
是存活情況,為預(yù)測(cè)標(biāo)記特征
庙楚;剩下的10個(gè)是原始特征數(shù)據(jù)上荡。
下面我將嘗試分析所得原始數(shù)據(jù),通過(guò)構(gòu)建特征工程馒闷,建模預(yù)測(cè)乘客的生存情況酪捡。
工具介紹
以下數(shù)據(jù)分析過(guò)程中,我使用的是我自己用Ruby
語(yǔ)言開發(fā)的一套簡(jiǎn)單的可通用的數(shù)據(jù)分析工具纳账,集成了數(shù)據(jù)分析報(bào)告逛薇、數(shù)據(jù)可視化、特征工程構(gòu)建疏虫、機(jī)器學(xué)習(xí)分類模型訓(xùn)練永罚、數(shù)據(jù)導(dǎo)出等。
先看下有哪些命令可以使用:
每個(gè)任務(wù)的用途和前置子任務(wù)用途描述如下:
每個(gè)任務(wù)都可以單獨(dú)執(zhí)行卧秘,具體用法會(huì)在后面的分析過(guò)程中逐個(gè)演示呢袱。
數(shù)據(jù)分析
說(shuō)到數(shù)據(jù)挖掘,是把散亂數(shù)據(jù)轉(zhuǎn)換成「有價(jià)值」信息的過(guò)程翅敌,數(shù)據(jù)是可以是數(shù)字或者文本內(nèi)容甚至圖像羞福,而信息是有語(yǔ)義的、人腦可理解的報(bào)告蚯涮、圖表治专。
數(shù)據(jù)分析的結(jié)果,就是把數(shù)字轉(zhuǎn)化成人類可理解的信息遭顶。
數(shù)據(jù)概覽
先看一眼已有的數(shù)據(jù)概括张峰。
第一步,配置好數(shù)據(jù)路徑:
第二步液肌,執(zhí)行數(shù)據(jù)分析任務(wù) profile_data
輸出數(shù)據(jù)摘要信息:
rake app:classifiers:titanic:profile_data
得到基本的數(shù)據(jù)信息:
Rows: 1309, Cols: 12挟炬,Columns: ["PassengerId", "Survived", "Pclass", "Name", "Sex", "Age", "SibSp", "Parch", "Ticket", "Fare", "Cabin", "Embarked"]
(注:uniq_proportions
是數(shù)據(jù)唯一值數(shù)量的占比值,下面描述時(shí)直接x100,如 0.616
描述為 61.6%
谤祖,方便理解)
從輸出統(tǒng)計(jì)中可以得出以下信息:
-
Survived
中549條是0(死亡)婿滓,342條是1(生還);占比(uniq_proportions)分別是61.6%和38.4粥喜,死亡率很高凸主。有418條missing
(表示沒(méi)有值),是要預(yù)測(cè)的數(shù)據(jù)量额湘。 -
Pclass
的unit_count
(唯一數(shù)量)是3卿吐,通過(guò)uniq_frequencies
看出分為1,2锋华,3 個(gè)類別嗡官,對(duì)應(yīng)頭等艙、二等艙和三等艙)毯焕,其中3占了過(guò)半為54.2% - 有幾個(gè)特征有缺失數(shù)據(jù)(
missing
不為0的)衍腥,Age
為263,Fare
為1纳猫,Cabin
為1014婆咸,Embarked
為2 -
Sex
乘客性別分布中男性占 64.4%,女性 35.6%(人多不一定是好事芜辕,后面分析中發(fā)現(xiàn)男性死亡很高) -
Age
乘客年齡分布中最小0.17(嬰兒)尚骄,最大是80歲,平均為29.881 -
Ticket
總數(shù)是1309侵续,而唯一數(shù)是929倔丈,說(shuō)明有一票多人使用情況(這個(gè)信息在后面的特征提取中有用) -
Fare
最高是512.3292,而平均是33.295询兴,貧富分化差距不心松场(同樣,這個(gè)信息在后面的特征提取中會(huì)有用) -
Embarked
有3組為"S"诗舰、"Q"警儒、"C",其中"S"占69.9%眶根,我猜這可能是啟航的港口蜀铲,登船港口跟存活率有什么關(guān)系這是個(gè)疑問(wèn)
測(cè)定基準(zhǔn)-沒(méi)事跑個(gè)分
先跑個(gè)分看看,執(zhí)行訓(xùn)練任務(wù)train
:
rake app:classifiers:titanic:train summary=n
在什么數(shù)據(jù)都沒(méi)改動(dòng)的情況下属百,使用所有特征數(shù)據(jù)來(lái)跑訓(xùn)練任務(wù)(任務(wù)沒(méi)有配置時(shí)记劝,默認(rèn)使用樸素貝葉斯分類)和CV(Cross Validation,交叉驗(yàn)證)族扰,得到平均的 F1 Score
是 0.75889
厌丑,意味這個(gè)是我們的模型的最低基準(zhǔn)定欧,最終構(gòu)建出的模型分?jǐn)?shù)要高于這個(gè)之上才是可靠的模型。
分析特征重要性
這么多特征怒竿,有哪些特征是跟存活率比較相關(guān)的砍鸠?
可以使用這個(gè)數(shù)據(jù)分析任務(wù),再做進(jìn)一步分析:使用任務(wù)參數(shù) label_column=Survived
來(lái)指明哪個(gè)是要預(yù)測(cè)的標(biāo)記特征
耕驰,再執(zhí)行一次數(shù)據(jù)分析任務(wù):
rake app:classifiers:titanic:profile_data label_column=Survived
這次的輸出就有些差異爷辱,可以看到是針對(duì) Survived
有值的數(shù)據(jù)來(lái)統(tǒng)計(jì):
Profile 891 data which Survived is not nil
還多了特征分布占比統(tǒng)計(jì):
Calcualte proportions of "Survived"
從而能知道各個(gè)特征值與標(biāo)簽特征Survived
的對(duì)比,得出符合該特征時(shí)的“生存率”朦肘。
例如 Pclass 的統(tǒng)計(jì):
+-------------+-------+------------+--------------------------------------------------------------+--------------------------------------------------------------+
| | count | uniq_count | Survived=0 | Survived=1 |
+-------------+-------+------------+--------------------------------------------------------------+--------------------------------------------------------------+
| Pclass | 891 | 3 | {3=>[372, "75.8%"], 1=>[80, "37.0%"], 2=>[97, "52.7%"]} | {3=>[119, "24.2%"], 1=>[136, "63.0%"], 2=>[87, "47.3%"]} |
Pclass=3(Survived=0)有372條饭弓,占75.8%,意思是三等艙的乘客中死亡率是75.8%媒抠;
Pclass=1(Survived=1)有136條弟断,占63.0%混狠,意味頭等艙的乘客中有63.0%是存活了下來(lái)。
以此類推猪半,性別數(shù)據(jù)中:
+-------------+-------+------------+--------------------------------------------------------------+--------------------------------------------------------------+
| | count | uniq_count | Survived=0 | Survived=1 |
+-------------+-------+------------+--------------------------------------------------------------+--------------------------------------------------------------+
| Sex | 891 | 2 | {"male"=>[468, "81.1%"], "female"=>[81, "25.8%"]} | {"male"=>[109, "18.9%"], "female"=>[233, "74.2%"]} |
- 男性死亡率是81.1%豪椿,女性的死亡率是25.8%;
- 男性存活率是18.9%只洒,女性的存活率是74.2%。
不用建模光是根據(jù)這2組數(shù)據(jù)就已經(jīng)可以想象到,如果當(dāng)時(shí)是女性锉桑,并入駐在頭等艙,存活下來(lái)的機(jī)率是很高的窍株;反之民轴,如果是男性,又是入駐在三等艙區(qū)的球订,差不多5個(gè)人中只能活1個(gè)后裸。。冒滩。
這些分類結(jié)果比較少微驶、存活率傾斜比較明顯的,顯然是比較重要的特征开睡。那么其他特征值分布比較離散的因苹,對(duì)最終的存活率影響是怎樣的呢?
在這里可以先使用 evaluate_features
(特征評(píng)估)任務(wù)來(lái)對(duì)每個(gè)特征進(jìn)行一次初步評(píng)估篇恒,原理是單獨(dú)使用每個(gè)特征來(lái)自動(dòng)訓(xùn)練(默認(rèn)使用了樸素貝葉斯做分類算法)并進(jìn)行Cross Validation(交叉驗(yàn)證)扶檐,得出Accuracy(準(zhǔn)確率)、Precision(精確率)胁艰、Recall(召回值)款筑,用來(lái)評(píng)估該特征對(duì)預(yù)測(cè)標(biāo)記特征的重要程度智蝠。
執(zhí)行特征評(píng)估任務(wù),并使用選項(xiàng)label_column
指明Survived
為標(biāo)記特征:
rake app:classifiers:titanic:evaluate_features label_column=Survived
留意提示:
Tips: if Average Accuracy > 0.8 means it's an important feature; if Precision is 0 means it's not reliable
從分析結(jié)果中可以看到:
-
Sex
的Accuracy
大于0.8奈梳,屬于比較重要的特征杈湾。 -
PassengerId
以及Name
的Precision
是0
,表示特征值太離散颈嚼,不適合用來(lái)做預(yù)測(cè)的特征毛秘,而事實(shí)上這2個(gè)特征的值都是唯一不重復(fù)的(Name只有2條重復(fù)),確實(shí)不適合做為分類特征阻课。 -
Age
叫挟、SibSp
、Parch
限煞、Cabin
抹恳、和Embarked
的Precision
值都偏低(< 0.3),說(shuō)明這個(gè)幾項(xiàng)相關(guān)性不足(有部分是受到缺失值得影響)署驻。
數(shù)據(jù)展示(可視化)
人是視覺(jué)生物奋献,天生對(duì)圖像信息比數(shù)字、文字信息更敏感旺上,為了能更直觀的表達(dá)統(tǒng)計(jì)數(shù)據(jù)所體現(xiàn)的意義瓶蚂,可將數(shù)據(jù)以各種圖表的形式來(lái)可做視化展示,輔助對(duì)數(shù)據(jù)的理解宣吱。
我編寫的這套工具中集成了一些圖表的Web UI窃这,可以直接使用數(shù)據(jù)分析任務(wù)的輸出報(bào)表來(lái)生成圖表,可以查看每一個(gè)特征的統(tǒng)計(jì)征候。
例如性別數(shù)量統(tǒng)計(jì):
男多女少杭攻!那人多力量就大嗎?讓數(shù)據(jù)回答疤坝,加入存活狀態(tài)對(duì)比看看:
很明顯兆解,不用看數(shù)字都看得明白:女性存活率更高!
乘客的年齡與人數(shù)的分布統(tǒng)計(jì)圖:
從圖中可看出在乘客中跑揉,人數(shù)最多的是24歲锅睛、有47人,整體呈現(xiàn)出中間層年齡段人數(shù)居多畔裕,人群以年輕衣撬、中年人為主。年輕力壯就會(huì)更有利嗎扮饶?未必具练!
在接下來(lái)的特征工程的后半段中會(huì)有更多的圖表展示,這里先不展開了甜无。
特征工程
什么是特征工程扛点?
數(shù)據(jù)和特征決定了機(jī)器學(xué)習(xí)的上限哥遮,而模型和算法只是逼近這個(gè)上限而已。而特征工程的目的是最大限度地從原始數(shù)據(jù)中提取特征以供算法和模型使用陵究。顧名思義眠饮,特征工程其實(shí)就是一項(xiàng)工程活動(dòng),它是能夠?qū)?shù)據(jù)像藝術(shù)一般展現(xiàn)的技術(shù)铜邮。這樣說(shuō)的原因是好的特征工程很好的混合了專業(yè)領(lǐng)域知識(shí)仪召、直覺(jué)和基本的數(shù)學(xué)能力。
數(shù)據(jù)清洗
通過(guò)前面的數(shù)據(jù)分析知道有一些數(shù)據(jù)有缺失松蒜,需要先填充扔茅。
這里可以使用console=y
選項(xiàng)來(lái)以交互模式
來(lái)執(zhí)行數(shù)據(jù)清洗任務(wù)clean_data
:
rake app:classifiers:titanic:clean_data console=y
填補(bǔ) Fare
看下 Fare
數(shù)據(jù)的缺失情況:
只有一條缺失記錄,而這個(gè)乘客的Ticket只有他一個(gè)人在使用秸苗,無(wú)法通過(guò)查找相同票號(hào)的價(jià)格來(lái)填補(bǔ)召娜。
船票的價(jià)格顯然是跟 Pclass
(客艙等級(jí))及 Cabin
(客艙號(hào))有關(guān)的,因此使用具有相同Pclass
和Cabin
的中位數(shù)來(lái)填補(bǔ):
df.where(df['Fare'].not_eq(nil) & df['Pclass'].eq(3) & df['Cabin'].eq(nil) )['Fare'].median
=> 8.05
填補(bǔ) Age
df['Age'].missing
=> 263
發(fā)現(xiàn)所有 Name
中有“Mr.” “Mrs.” 等頭銜字眼惊楼,因此提取出來(lái)可以作為一個(gè)輔助特征Title
玖瘸,然后再使用具有相同Title
和Sex
的中位數(shù)來(lái)填補(bǔ)。
填補(bǔ) Cabin
Cabin
缺失的比較多檀咙,但發(fā)現(xiàn)相同Cabin
的Ticket
也相同雅倒,因此可以反推具有相同Ticket
的乘客也會(huì)住在同一個(gè)Cabin
內(nèi),因此可以找出具有相同Ticket
但Cabin
不為空的乘客數(shù)據(jù)來(lái)填補(bǔ):
df['Cabin'].missing
=> 1014
same_cabins = 0
df.where(df['Cabin'].eq(nil)).each_row_with_index do |row, idx|
same_cabin = df.where( df['Cabin'].not_eq(nil) & df['Ticket'].eq(row['Ticket']) )
if same_cabin.size != 0
same_cabins += 1
end
end
same_cabins
# => 16
發(fā)現(xiàn)這類數(shù)據(jù)也不多弧可,只有16條屯断。
其他的不確定性太多放棄填補(bǔ)。Cabin
數(shù)據(jù)雖然不完整侣诺,但還可以用來(lái)提取新的特征,下文有說(shuō)明氧秘。
填補(bǔ) Embarked
+-----+-------------+----------+--------+-------------------------------------------+--------+-----+-------+-------+--------+------+-------+----------+
| | PassengerId | Survived | Pclass | Name | Sex | Age | SibSp | Parch | Ticket | Fare | Cabin | Embarked |
+-----+-------------+----------+--------+-------------------------------------------+--------+-----+-------+-------+--------+------+-------+----------+
| 62 | 62 | 1 | 1 | Icard, Miss. Amelie | female | 38 | 0 | 0 | 113572 | 80 | B28 | |
| 830 | 830 | 1 | 1 | Stone, Mrs. George Nelson (Martha Evelyn) | female | 62 | 0 | 0 | 113572 | 80 | B28 | |
+-----+-------------+----------+--------+-------------------------------------------+--------+-----+-------+-------+--------+------+-------+----------+
Embarked
的缺失只有2條年鸳,觀察數(shù)據(jù)后發(fā)現(xiàn)是2位女士,共用同一張Ticket
“113572”丸相,住在同一個(gè)Cabin
“B28”搔确,在同一個(gè)Pclass
1,因此推斷她們可能是認(rèn)識(shí)的灭忠,因此也非常有可能是一起出行并在同一個(gè)港口登船膳算,所以不用分別處理。另外我按常理推斷相同港口出售的票是相連的弛作,可取Ticket
前4位數(shù)字相同的表示是相同港口涕蜂,最后找出有相同Pclass
和相似Ticket
中 Embarked
的眾數(shù):
df.filter_rows { |p| p['Ticket'].to_s.first(4) == '113572'.first(4) && p['Pclass'] == 1 } ['Embarked'].frequencies.max_index
=> #<Daru::Vector(1)>
C 7
得出是 “C”。
完成數(shù)據(jù)清洗后映琳,查看現(xiàn)有的數(shù)據(jù)概況:
可以看到只有 Cabin
還有998條是缺失的了机隙,至此數(shù)據(jù)清洗完畢蜘拉,接下來(lái)做新特征提取。
提取新特征
問(wèn)題:應(yīng)該提取出哪些特征?
面對(duì)這樣的群體災(zāi)難事件場(chǎng)景中有鹿,有什么因素會(huì)影響到個(gè)人生存機(jī)會(huì)呢旭旭?是個(gè)人的年齡、體力葱跋、社會(huì)身份持寄、財(cái)富、擁有的權(quán)力娱俺?是因?yàn)槟闶桥陨晕丁е⒆拥哪赣H?小孩和老人行動(dòng)緩慢會(huì)很不利矢否?人緣好朋友多會(huì)更有優(yōu)勢(shì)仲闽?拖家?guī)Э谑抢圪樳€是助力,還是獨(dú)善其身更有利僵朗?亦或是你當(dāng)時(shí)所處的位置導(dǎo)致了最后的結(jié)局赖欣?
設(shè)想
結(jié)合已有的數(shù)據(jù),我覺(jué)得有如下這些因素可以嘗試:
- Sex(性別):性別是人類個(gè)體之間最大的生理特征區(qū)別验庙,影響到體力顶吮、社交地位,在群體中往往也受到優(yōu)待(女士?jī)?yōu)先)粪薛,而且前面的特征評(píng)估已說(shuō)明這個(gè)特征很重要
- AgeLevel(年齡層):年齡影響到體力悴了、社交地位,年紀(jì)小的违寿、或者年紀(jì)大的在群體中往往也受到優(yōu)待(尊老愛幼)湃交;這里可以分組為(child, young, midlife, aged),基于
Age
提取 - SocialTitle(社交頭銜):在群體活動(dòng)中藤巢,不同身份顯然也會(huì)影響到群體決策 搞莺;這里分組為 Mrs, Miss, Mr and Master,基于
Name
提取 - IncomeClass(收入水平): 收入決定了所買的船票類型掂咒,也就決定了客艙所在的位置才沧,以及社交地位;分組為 no-income, lower-income, middle-income, upper-income), 可基于
Fare
和Pclass
提取 - SocialClass(社交地位):一個(gè)人可以沒(méi)有很多錢绍刮,但他從事的職業(yè)温圆、貴族身份在群體活動(dòng)中是有影響力的;分為 lower-class, middle-class, upper-class孩革,基于
Title
,IncomeClass
提取 - FamilyRole(家庭角色):如果你是位父親岁歉,你所肩負(fù)的責(zé)任能讓你愿意作出巨大犧牲;一位母親在災(zāi)難面前為了保護(hù)孩子往往迸發(fā)超出常人的生存欲望嫉戚;可分組為grandparent, couple, father, mother, child刨裆;可基于
Sex
,AgeLevel
,SibSp
,Parch
- CabinArea(艙位所在區(qū)域):顯然這會(huì)影響到逃生的時(shí)機(jī)澈圈,基于
Cabin
- Mates(伙伴數(shù)量):這次航行中的同行人數(shù)(有多少人使用相同的
Ticket
) - FamilySize(同船的家庭成員數(shù)量): 家人在一起互助肯定比一群陌生人有更多的信任和生存機(jī)會(huì);基于
SibSp
和Parch
- TravelAlone(是否孤身上路):
Mates
+FamilySize
帆啃,無(wú)論是朋友還是家人瞬女,多一個(gè)熟人在身邊也許就比別人多一份生存機(jī)率
實(shí)現(xiàn)
提取Sex
(性別)
使用原有數(shù)據(jù),不需要改動(dòng)努潘。
提取 AgeLevel
(年齡層)
按如下年齡劃分:
age_level = lambda { |age, default="unknown"|
{
0..14.5 => 'child', # 少年0-14
15..35.5 => 'young', # 青年15-35
36..60.5 => 'midlife', # 中年36-60
61..90.5 => 'aged', # 老年61-90
}.select { |range| range === age }.values[0] || default
}
df['AgeLevel'] = df['Age'].map { |age| age_level.call(age) }
提取 SocialTitle
(社交頭銜)
# extract "Title" from "Name"
df['NameTitle'] = df['Name'].map { |name| name.match(/, ([^.]+)./)[1] }
# extract SocialTitle: what was his social title?
social_title = lambda { |title, sex|
title = title.sub("the ", "")
title = 'Mrs' if title == 'Dr' && sex == 'female' # a special case
{
%w{Mr Don Major Capt Jonkheer Rev Col Dr Sir}=> 'Mr',
%w{Miss Mlle Ms Lady Dona} => 'Miss',
%w{Mrs Countess Mme} => 'Mrs',
%w{Master} => 'Master',
}.select { |_| _.include? title }.values[0]
}
df['SocialTitle'] = df['NameTitle', 'Sex'].map(:row) { |row| social_title.call(row["NameTitle"], row["Sex"]) }
這樣把一些數(shù)量較少的NameTitle
都?xì)w類起來(lái)诽偷,另外提取這個(gè)特征時(shí),發(fā)現(xiàn)有一條特殊記錄疯坤,有一個(gè)Dr
是女性报慕,因此做了特殊處理:
title = 'Mrs' if title == 'Dr' && sex == 'female' # a special case
提取 IncomeClass
(收入水平)
考慮到游船還是需要一定的經(jīng)濟(jì)收入,我將上層階級(jí)
压怠、中產(chǎn)階級(jí)
眠冈、下層階級(jí)
按照 1:2:7 的比例(下層等級(jí)的數(shù)量是上層的數(shù)量之和),獲取對(duì)應(yīng)的唯一票價(jià)的分位數(shù)菌瘫,作為分層的水平線:
uniq_fare = df['Fare'].uniq
income_classes = {"no-income": 0, "lower-income": uniq_fare.percentile(100-70), "middle-income": uniq_fare.percentile(100-20), "upper-income": uniq_fare.percentile(100-10) }.stringify_keys
# => {"no-income"=>0, "lower-income"=>10.5, "middle-income"=>57.75, "upper-income"=>82.2667}
得出的數(shù)據(jù)統(tǒng)計(jì)如下:
df['IncomeClass'].uniq_frequencies
# => {"middle-income"=>587, "lower-income"=>513, "upper-income"=>192, "no-income"=>17}
df['IncomeClass'].uniq_proportions
# => {"middle-income"=>0.448, "lower-income"=>0.392, "upper-income"=>0.147, "no-income"=>0.013}
參考資料:
提取 SocialClass
(社交地位)
社交地位中“名”與”利“起主要作用(別不服氣蜗顽,現(xiàn)實(shí)社會(huì)的游戲規(guī)則就是這樣)。乘客數(shù)據(jù)中的頭銜信息很重要雨让,因此可以把有貴族頭銜以及IncomeClass
是高級(jí)的都視作upper-class
雇盖;中產(chǎn)收入的歸為middle-class
;其他的就是lower-class
栖忠。
代碼簡(jiǎn)單不展示了崔挖,只是有些英國(guó)的貴族頭銜信息我不熟悉需要查下參考資料。
參考資料:
提取 FamilyRole
(家庭角色)
這里判別規(guī)則比較復(fù)雜庵寞,看圖理解
提取 CabinArea
(艙位所在區(qū)域)
這里要先提取一個(gè)Deck
(甲板)特征狸相,這個(gè)是根據(jù)Cabin
的首位字母得出的,可以分為A捐川、B卷哩、C、D属拾、E、F冷溶、G和T渐白,未知的則標(biāo)記為N/A
。
# extract "Deck" from "Cabin"
df['Deck'] = df['Cabin'].map { |cabin| cabin && cabin[0] || 'N/A' }
可以參考泰坦尼克號(hào)的剖面圖:
從圖上可以看出從字母越前越靠近輪船上層逞频,意味逃生的路徑更短(這個(gè)和后面做新特征分析得到的統(tǒng)計(jì)信息是吻合的)纯衍。
這也是為什么Cabin
即使有缺失數(shù)據(jù),也可以換個(gè)姿勢(shì)用來(lái)提取新特征苗胀。
CabinArea
則由Pclass
和Deck
組合而成襟诸,如 "P-1 D-C"瓦堵,意思是“頭等艙的C區(qū)”
# extract CabinArea: where was he? () based on Pclass, Deck
# e.g.: "P-1 D-C"
df['CabinArea'] = df['Pclass', 'Deck'].map(:row) { |x| "P-#{x['Pclass']} D-#{x['Deck']}" }
提取 Mates
(伙伴數(shù)量)
tickets = df['Ticket'].to_a.group_by(&:itself)
df['Mates'] = df['Ticket'].map { |ticket| tickets[ticket].size }
df['Mates'].uniq_proportions
# => {1=>0.545, 2=>0.202, 3=>0.112, 4=>0.049, 5=>0.027, 7=>0.027, 6=>0.018, 8=>0.012, 11=>0.008}
發(fā)現(xiàn)有近55%的乘客是獨(dú)自出行,而后面做新數(shù)據(jù)分析發(fā)現(xiàn)歌亲,這樣的人的生存率菇用,不到3成。
提取 FamilySize
(同船的家庭成員數(shù)量)
很簡(jiǎn)單陷揪,SibSp
+ Parch
# extract "FamilySize" from "SibSp" and "Parch"
df['FamilySize'] = df['SibSp'] + df['Parch']
df['FamilySize'].uniq_proportions
# {0=>0.604, 1=>0.18, 2=>0.121, 3=>0.033, 5=>0.019, 4=>0.017, 6=>0.012, 10=>0.008, 7=>0.006}
有6成是不帶家人惋鸥,然而,后面的數(shù)據(jù)分析顯示悍缠,這個(gè)不是好主議卦绣。
提取 TravelAlone
(是否孤身上路)
是否有伙伴或親人,只有個(gè)人則標(biāo)記為1飞蚓,否則取0
df['TravelAlone'] = df['Mates', 'FamilySize'].map(:row) { |row| row.sum == 1 ? 1 : 0 }
df['TravelAlone'].uniq_frequencies
# => {1=>0.506, 0=>0.494}
各占一半滤港。
把所有特征提取相關(guān)代碼添加到 extract_features
子任務(wù)中保存,至此趴拧,新的特征構(gòu)建完畢溅漾!
至此我得到以下特征的數(shù)據(jù):
- Sex(性別)
- AgeLevel(年齡層)
- SocialTitle(社交頭銜)
- IncomeClass(收入水平)
- SocialClass(社交地位)
- FamilyRole(家庭角色)
- CabinArea(艙位所在區(qū)域)
- Mates(伙伴數(shù)量)
- FamilySize(同船的家庭成員數(shù)量)
- TravelAlone(是否孤身上路)
這些新特征是否真的對(duì)預(yù)測(cè)存活有幫助,接下來(lái)讓看下新特征的分析和評(píng)估八堡。
特征選取 - 評(píng)估及選取新特征
重新跑一次數(shù)據(jù)分析任務(wù)profile_data
樟凄,這次加上任務(wù)參數(shù)feature_columns
來(lái)指定要分析的特征數(shù)據(jù): feature_columns=Sex,AgeLevel,SocialTitle,IncomeClass,SocialClass,FamilyRole,CabinArea,Mates,FamilySize,TravelAlone
執(zhí)行的完整命令為:
rake app:classifiers:titanic:profile_data label_column=Survived feature_columns=Sex,AgeLevel,SocialTitle,IncomeClass,SocialClass,FamilyRole,CabinArea,Mates,FamilySize,TravelAlone
可以了解新增特征數(shù)據(jù)的整體概況,下面接著逐一分析每個(gè)新特征的數(shù)據(jù)統(tǒng)計(jì)兄渺。
新特征數(shù)據(jù)分析
要針對(duì)某個(gè)feature 分析缝龄,可以增加參數(shù)profile_feature=$feature_name
來(lái)執(zhí)行數(shù)據(jù)分析任務(wù)profile_data
,例如:
rake app:classifiers:titanic:profile_data label_column=Survived feature_columns=Sex,AgeLevel,SocialTitle,IncomeClass,SocialClass,FamilyRole,CabinArea,Mates,FamilySize,TravelAlone profile_feature=Sex
得到:
Sex(性別):
結(jié)合存活狀態(tài)分布圖:
在這場(chǎng)事故中挂谍,女性擁有更高的生存機(jī)率:74.2%叔壤;男性僅有18.9%。
性別為什么在這樣的災(zāi)難中其關(guān)鍵性作用口叙?從事后幸存者的口中得知炼绘,這是因?yàn)橐粋€(gè)男人的一個(gè)命令。我們帶著疑問(wèn)繼續(xù)看下其他特征的統(tǒng)計(jì)分析妄田。
AgeLevel(年齡層):
年齡層統(tǒng)計(jì)結(jié)果:
Profile feature "AgeLevel"
+----------+-------+-------------+----------------+----------------+
| AgeLevel | count | proportions | Survived=0 | Survived=1 |
+----------+-------+-------------+----------------+----------------+
| young | 591 | 0.663 | [379, "64.1%"] | [212, "35.9%"] |
| midlife | 196 | 0.22 | [118, "60.2%"] | [78, "39.8%"] |
| child | 82 | 0.092 | [35, "42.7%"] | [47, "57.3%"] |
| aged | 22 | 0.025 | [17, "77.3%"] | [5, "22.7%"] |
+----------+-------+-------------+----------------+----------------+
按生理階段分為4組:
-
child
:少年(0-14) -
young
:青年(15-35) -
midlife
:中年(36-60) -
aged
:老年(61-90)
生存率最高的是少年們俺亮,存活率是57.3%;老年人有最高的死亡率:77.3%疟呐;身強(qiáng)力壯的青年死亡率第二脚曾,為64.1%;更有生活經(jīng)驗(yàn)的中年存活率不到4成启具,為39.8%本讥。
看圖更直觀:
從這些數(shù)據(jù)對(duì)比可以看出,年齡與存活率不是線性的關(guān)系,不是越低越好拷沸,也不是越高越差色查。思考下,年齡的分組撞芍,實(shí)際上也形成社會(huì)關(guān)系秧了、家庭角色的分組差異,因此在這里統(tǒng)計(jì)表現(xiàn)可能只是表面結(jié)果勤庐,并不是深層原因示惊。
SocialTitle(社交頭銜):
Profile feature "SocialTitle"
+-------------+-------+-------------+----------------+----------------+
| SocialTitle | count | proportions | Survived=0 | Survived=1 |
+-------------+-------+-------------+----------------+----------------+
| Mr | 537 | 0.603 | [451, "84.0%"] | [86, "16.0%"] |
| Miss | 186 | 0.209 | [55, "29.6%"] | [131, "70.4%"] |
| Mrs | 128 | 0.144 | [26, "20.3%"] | [102, "79.7%"] |
| Master | 40 | 0.045 | [17, "42.5%"] | [23, "57.5%"] |
+-------------+-------+-------------+----------------+----------------+
被稱呼為 Mrs
(太太)的存活率最高為79.7%,這個(gè)只是簡(jiǎn)單的稱呼信息愉镰,別人尊稱你一聲“先生”米罚、“小姐”或者“太太”,不會(huì)決定你的生死丈探,但你可以據(jù)此快速了解到录择,當(dāng)有人稱呼你為Mr
或Miss
時(shí),你在這場(chǎng)事故中的存活概率碗降。
IncomeClass(收入水平):
Profile feature "IncomeClass"
+---------------+-------+-------------+----------------+----------------+
| IncomeClass | count | proportions | Survived=0 | Survived=1 |
+---------------+-------+-------------+----------------+----------------+
| middle-income | 403 | 0.452 | [222, "55.1%"] | [181, "44.9%"] |
| lower-income | 348 | 0.391 | [273, "78.4%"] | [75, "21.6%"] |
| upper-income | 125 | 0.14 | [40, "32.0%"] | [85, "68.0%"] |
| no-income | 15 | 0.017 | [14, "93.3%"] | [1, "6.7%"] |
+---------------+-------+-------------+----------------+----------------+
存活率最低的是no-income
只有6.7%隘竭,最高的是upper-income
為68.0%,收入水平跟存活率有很明顯的線性關(guān)系:收入水平越高生存機(jī)率越高讼渊。這樣的結(jié)果很殘酷也很現(xiàn)實(shí)动看,更富有則擁有更多的生存優(yōu)勢(shì),從來(lái)如此爪幻。
有錢就一定能活下來(lái)嗎菱皆?
SocialClass(社交地位):
Profile feature "SocialClass"
+--------------+-------+-------------+----------------+----------------+
| SocialClass | count | proportions | Survived=0 | Survived=1 |
+--------------+-------+-------------+----------------+----------------+
| lower-class | 361 | 0.405 | [286, "79.2%"] | [75, "20.8%"] |
| middle-class | 357 | 0.401 | [201, "56.3%"] | [156, "43.7%"] |
| upper-class | 173 | 0.194 | [62, "35.8%"] | [111, "64.2%"] |
+--------------+-------+-------------+----------------+----------------+
存活率最低的是lower-class
為20.8%,最高的是upper-class
為64.2%挨稿,社交地位跟存活率有很明顯的線性關(guān)系:社交地位越高生存機(jī)率越高仇轻。這是說(shuō)沒(méi)有利,也要有名嗎奶甘?數(shù)據(jù)不會(huì)撒謊篷店,同樣很現(xiàn)實(shí)。
FamilyRole(家庭角色):
不看外因看內(nèi)因臭家,從家庭的角度看看:
Profile feature "FamilyRole"
+-------------+-------+-------------+----------------+----------------+
| FamilyRole | count | proportions | Survived=0 | Survived=1 |
+-------------+-------+-------------+----------------+----------------+
| single | 530 | 0.595 | [363, "68.5%"] | [167, "31.5%"] |
| mother | 87 | 0.098 | [27, "31.0%"] | [60, "69.0%"] |
| child | 82 | 0.092 | [35, "42.7%"] | [47, "57.3%"] |
| husband | 72 | 0.081 | [57, "79.2%"] | [15, "20.8%"] |
| wife | 49 | 0.055 | [8, "16.3%"] | [41, "83.7%"] |
| father | 49 | 0.055 | [42, "85.7%"] | [7, "14.3%"] |
| grandparent | 22 | 0.025 | [17, "77.3%"] | [5, "22.7%"] |
+-------------+-------+-------------+----------------+----------------+
存活率最低的是father
父親(14.3%)疲陕,緊接是husband
丈夫(20.8%);最高的不是mother
母親(69.%)钉赁,而是沒(méi)有孩子的wife
太太(83.7%)鸭轮。
作為男性,明明是群體中最具有強(qiáng)壯的體魄橄霉,又有相對(duì)更豐富的生存經(jīng)驗(yàn),怎么反而在這場(chǎng)事故中就成了生存機(jī)率最低的?這里再提出一個(gè)疑問(wèn)姓蜂。
CabinArea(艙位所在區(qū)域):
“天時(shí)不如地利”按厘,艙位所在區(qū)域是否影響乘客到達(dá)甲板的時(shí)間、登上救生艇的機(jī)會(huì)钱慢?
Profile feature "CabinArea"
+-----------+-------+-------------+----------------+----------------+
| CabinArea | count | proportions | Survived=0 | Survived=1 |
+-----------+-------+-------------+----------------+----------------+
| P-3 D-N/A | 478 | 0.536 | [366, "76.6%"] | [112, "23.4%"] |
| P-2 D-N/A | 167 | 0.187 | [93, "55.7%"] | [74, "44.3%"] |
| P-1 D-C | 67 | 0.075 | [26, "38.8%"] | [41, "61.2%"] |
| P-1 D-B | 48 | 0.054 | [12, "25.0%"] | [36, "75.0%"] |
| P-1 D-N/A | 31 | 0.035 | [19, "61.3%"] | [12, "38.7%"] |
| P-1 D-D | 29 | 0.033 | [7, "24.1%"] | [22, "75.9%"] |
| P-1 D-E | 25 | 0.028 | [7, "28.0%"] | [18, "72.0%"] |
| P-1 D-A | 15 | 0.017 | [8, "53.3%"] | [7, "46.7%"] |
| P-2 D-F | 8 | 0.009 | [1, "12.5%"] | [7, "87.5%"] |
| P-3 D-F | 6 | 0.007 | [4, "66.7%"] | [2, "33.3%"] |
| P-2 D-E | 5 | 0.006 | [2, "40.0%"] | [3, "60.0%"] |
| P-2 D-D | 4 | 0.004 | [1, "25.0%"] | [3, "75.0%"] |
| P-3 D-G | 4 | 0.004 | [2, "50.0%"] | [2, "50.0%"] |
| P-3 D-E | 3 | 0.003 | [0, "0.0%"] | [3, "100.0%"] |
| P-1 D-T | 1 | 0.001 | [1, "100.0%"] | [0, "0.0%"] |
+-----------+-------+-------------+----------------+----------------+
- 存活率最低的是
P-1 D-T
逮京,頭等艙T層甲板,只有1個(gè)人束莫,存活率只有0%懒棉; - 存活率最高的是
P-3 D-E
,頭等艙E層甲板览绿,有3個(gè)人策严,都活了下來(lái),存活率100%饿敲; - 幸存人數(shù)最多的是
P-3 D-N/A
妻导,三等艙其他區(qū)域,112人活了下來(lái)怀各,而存活率只有23.4%倔韭; - 人數(shù)次之的是
P-2 D-N/A
,二等艙其他區(qū)域瓢对,存活率44.3%寿酌; - 第三的是
P-1 D-C
,頭等艙C層甲板硕蛹,存活率61.2%醇疼;
觀察泰坦尼克號(hào)的艙室布局圖:
可以發(fā)現(xiàn)頭等艙分布在船體的各段部位,比二等妓美、三等艙有更好的出入口僵腺、更接近甲板,因此應(yīng)該擁有更有利的生存機(jī)會(huì)壶栋,跟得出的統(tǒng)計(jì)信息是吻合的辰如。
你在哪里出發(fā)也就決定了你能走到哪里?輸在起跑線上贵试,又有誰(shuí)愿意呢琉兜。
Mates(伙伴數(shù)量):
中國(guó)古語(yǔ)云:“地利不如人和”,“在家靠父母毙玻,出門靠朋友”豌蟋,看看出行的伙伴數(shù)量:
Profile feature "Mates"
+-------+-------+-------------+----------------+----------------+
| Mates | count | proportions | Survived=0 | Survived=1 |
+-------+-------+-------------+----------------+----------------+
| 1 | 481 | 0.54 | [351, "73.0%"] | [130, "27.0%"] |
| 2 | 181 | 0.203 | [88, "48.6%"] | [93, "51.4%"] |
| 3 | 101 | 0.113 | [35, "34.7%"] | [66, "65.3%"] |
| 4 | 44 | 0.049 | [12, "27.3%"] | [32, "72.7%"] |
| 7 | 24 | 0.027 | [19, "79.2%"] | [5, "20.8%"] |
| 5 | 21 | 0.024 | [14, "66.7%"] | [7, "33.3%"] |
| 6 | 19 | 0.021 | [15, "78.9%"] | [4, "21.1%"] |
| 8 | 13 | 0.015 | [8, "61.5%"] | [5, "38.5%"] |
| 11 | 7 | 0.008 | [7, "100.0%"] | [0, "0.0%"] |
+-------+-------+-------------+----------------+----------------+
- 1個(gè)獨(dú)自出行是最多的,但存活率只有 27.0%桑滩;
- 2個(gè)人結(jié)伴出行是數(shù)量排第二梧疲,存活率為 51.4%;
- 人數(shù)最多的有11個(gè),有存活狀態(tài)的有7人幌氮,然后一個(gè)也沒(méi)活下來(lái)缭受,存活率是0%;
- 存活率最高的是4個(gè)人一組的该互,有44個(gè)米者,存活率是72.7%;
- 除了0%以外存活率最低的是7個(gè)人一組的宇智,有24人蔓搞,存活率比單人還低,僅有20.8%随橘;
從數(shù)據(jù)看掌唾,伙伴數(shù)量跟存活率并非是線性關(guān)系对嚼,而是呈現(xiàn)“凸函數(shù)”特征乔妈,2魔策、3、4這樣的中間值都有過(guò)半的存活機(jī)率蜒车;1及6讳嘱、7、11 兩端數(shù)值的生存率均不過(guò)3成酿愧。這是否是表明在出行時(shí)沥潭,3到4人是最佳的團(tuán)隊(duì)人數(shù),人數(shù)過(guò)少或過(guò)多都不利團(tuán)隊(duì)生存嬉挡。
FamilySize(同船的家庭成員數(shù)量):
家庭規(guī)模對(duì)生存的影響:
Profile feature "FamilySize"
+------------+-------+-------------+----------------+----------------+
| FamilySize | count | proportions | Survived=0 | Survived=1 |
+------------+-------+-------------+----------------+----------------+
| 0 | 537 | 0.603 | [374, "69.6%"] | [163, "30.4%"] |
| 1 | 161 | 0.181 | [72, "44.7%"] | [89, "55.3%"] |
| 2 | 102 | 0.114 | [43, "42.2%"] | [59, "57.8%"] |
| 3 | 29 | 0.033 | [8, "27.6%"] | [21, "72.4%"] |
| 5 | 22 | 0.025 | [19, "86.4%"] | [3, "13.6%"] |
| 4 | 15 | 0.017 | [12, "80.0%"] | [3, "20.0%"] |
| 6 | 12 | 0.013 | [8, "66.7%"] | [4, "33.3%"] |
| 10 | 7 | 0.008 | [7, "100.0%"] | [0, "0.0%"] |
| 7 | 6 | 0.007 | [6, "100.0%"] | [0, "0.0%"] |
+------------+-------+-------------+----------------+----------------+
- 沒(méi)有與親人同行的有537人钝鸽,存活率30.4%;
- 存活率最低的去到0%庞钢,是成員數(shù)最大的7和10拔恰;
- 存活率最高是72.4%,是成員數(shù)為3基括;而人數(shù)到了4時(shí)生存率急劇下降到20.0%颜懊;
3人加上自己,也就是4风皿,跟前面的Mates=4
時(shí)生存率最高的結(jié)果重疊了河爹,這應(yīng)該是團(tuán)體票都是同一個(gè)票號(hào)的緣故。
TravelAlone(是否孤身上路):
Profile feature "TravelAlone"
+-------------+-------+-------------+----------------+----------------+
| TravelAlone | count | proportions | Survived=0 | Survived=1 |
+-------------+-------+-------------+----------------+----------------+
| 1 | 448 | 0.503 | [327, "73.0%"] | [121, "27.0%"] |
| 0 | 443 | 0.497 | [222, "50.1%"] | [221, "49.9%"] |
+-------------+-------+-------------+----------------+----------------+
當(dāng)你一個(gè)人時(shí)桐款,只有27.0%的機(jī)率存活咸这;你有伙伴時(shí),有49.9%的機(jī)會(huì)活下去魔眨。
所以出遠(yuǎn)門時(shí)媳维,還是結(jié)伴出行吧酿雪。
Mates
、FamilySize
侄刽、TravelAlone
這幾組數(shù)據(jù)表明执虹,組隊(duì)是有必要的,但人數(shù)不宜過(guò)多唠梨,4個(gè)人在一起是最有優(yōu)勢(shì)的組合。
數(shù)據(jù)導(dǎo)出
導(dǎo)出需要的特征數(shù)據(jù)進(jìn)行存檔侥啤,執(zhí)行數(shù)據(jù)導(dǎo)出任務(wù)export_features
:
rake app:classifiers:titanic:export_features label_column=Survived feature_columns=Sex,AgeLevel,SocialTitle,IncomeClass,SocialClass,FamilyRole,CabinArea,Mates,FamilySize,TravelAlone
Save to tmp/classifiers_output/titanic_survival_prediction-export.csv
導(dǎo)出數(shù)據(jù)在這里可以下載: titanic_survival_prediction-export.csv
機(jī)器學(xué)習(xí)預(yù)測(cè)
選擇算法
訓(xùn)練數(shù)據(jù)有帶標(biāo)注的特征当叭、需要預(yù)測(cè)是否存活,顯然這是一個(gè)非常典型的二元分類問(wèn)題盖灸,屬于監(jiān)督學(xué)習(xí)分類問(wèn)題蚁鳖;特征數(shù)據(jù)中有連續(xù)數(shù)值(continuous)和離散值(discrete),數(shù)據(jù)量也不大赁炎,這里我選擇了決策樹算法(Decisiontree)醉箕。另外,選擇這個(gè)算法徙垫,這也有種命運(yùn)在做決策的意味讥裤。
訓(xùn)練及評(píng)估
為了讓要預(yù)測(cè)特征比較語(yǔ)義,我加了一個(gè)新的特征 Survival
姻报,只是簡(jiǎn)單把1和0值映射為Survived
和No
:
# extract "Survival" so that can use it as the label_column
df['Survival'] = df['Survived'].map { |survived| survived && (survived == 1 ? 'Survived' : 'No') }
然后配置模型參數(shù):
訓(xùn)練及交叉驗(yàn)證:
執(zhí)行訓(xùn)練任務(wù)train
會(huì)自動(dòng)把有標(biāo)記的數(shù)據(jù)集按比例拆分成訓(xùn)練集和測(cè)試集己英,進(jìn)行交叉驗(yàn)證:
rake app:classifiers:titanic:train summary=n
模型評(píng)估結(jié)果的F1 Score
平均分是 0.81489,高于最開始的評(píng)分基準(zhǔn)值吴旋,說(shuō)明新增的特征整體上有更高的相關(guān)性损肛。
要評(píng)估每個(gè)新特征的相關(guān)性,執(zhí)行特征評(píng)估任務(wù) evaluate_features
:
rake app:classifiers:titanic:evaluate_features
對(duì)比原始數(shù)據(jù)的評(píng)估結(jié)果荣瑟,新特征的相關(guān)性更高些(CabinArea
由于有數(shù)據(jù)缺失治拿,精確度不高)。
訓(xùn)練結(jié)束后選擇 Persist trained data?(y/n):y
保存訓(xùn)練結(jié)果笆焰,任務(wù)會(huì)自動(dòng)保存模型圖像劫谅,可得到一棵決定存活與否的命運(yùn)決策之樹:
預(yù)測(cè)結(jié)果
認(rèn)為模型可信后,就可以對(duì)待預(yù)測(cè)數(shù)據(jù)進(jìn)行預(yù)測(cè)仙辟,執(zhí)行預(yù)測(cè)任務(wù) predict
:
rake app:classifiers:titanic:predict summary=n
至此同波,完成了從數(shù)據(jù)分析到數(shù)據(jù)清洗、特征工程叠国、機(jī)器學(xué)習(xí)建模以及最后的乘客生存狀態(tài)預(yù)測(cè)未檩。
人物畫像
有了特征提取的規(guī)則,以及預(yù)測(cè)的模型粟焊,最后我們可以做下簡(jiǎn)單的人物畫像冤狡,構(gòu)建一個(gè)persona
任務(wù)孙蒙,運(yùn)行:
rake app:classifiers:titanic:persona
輸出如下:
... ...
"Klasen, Miss. Gertrud Emilia" was a child Miss.
She was 1 years old.
She was a child, with 2 families.
She was in a middle-income family since She spent $12.1833 to buy a 3rd Class ticket.
She embarked from Southampton port.
> Did She survive? Probably No.
"Parker, Mr. Clifford Richard" was a young Mr.
He was 28 years old.
He was single.
He was in a lower-income family since He spent $10.5 to buy a 2nd Class ticket.
He embarked from Southampton port.
> Did He survive? Probably No.
"Chaffee, Mrs. Herbert Fuller (Carrie Constance Toogood)" was a midlife Mrs.
She was 47 years old.
She was a wife, with Her husband.
She was in a upper-income family since She spent $61.175 to buy a 1st Class ticket.
She embarked from Southampton port.
Her cabin was on E Deck.
> Did She survive? Probably Survived.
... ...
那么,現(xiàn)在在船上的“你”悲雳,可以對(duì)照“自己”的特征挎峦,預(yù)測(cè)下自己有多少機(jī)會(huì)可以活下來(lái)了。
總結(jié)
結(jié)合歷史核對(duì)結(jié)論
數(shù)據(jù)分析的目的:通過(guò)數(shù)據(jù)合瓢,找出事件背后的原因坦胶、規(guī)律,用來(lái)改進(jìn)晴楔、預(yù)防未來(lái)相似的事件顿苇。
在先前的分析數(shù)據(jù)時(shí)提出的疑問(wèn):
性別為什么在這樣的災(zāi)難中其關(guān)鍵性作用?
為什么婦女兒童這類“弱者”反而更能生存税弃?
根據(jù)泰坦尼克號(hào)唯一存活副船長(zhǎng)查爾斯·萊特勒
纪岁,事后描述,面對(duì)沉船災(zāi)難時(shí)则果,船長(zhǎng)愛德華·約翰·史密斯(Edward J. Smith)
在最后的時(shí)刻下命令幔翰,命令先讓婦女和兒童上救生艇,許多乘客顯得十分平靜西壮,一些人則拒絕與家人分開遗增。
在生命面前,一切都是平等的茸时。是什么抑制了生存的本能贡定,讓人能作出如此犧牲讓步?顯然可都,是社會(huì)文明發(fā)展的結(jié)果缓待。
是不是可以有個(gè)結(jié)論:災(zāi)難發(fā)生時(shí),如果跟高素質(zhì)的人群聚集渠牲,弱者能得到優(yōu)待旋炒?
再看另外一個(gè)問(wèn)題:
有錢就一定能活下來(lái)嗎?
回憶錄中有描述:
亞斯特四世(當(dāng)時(shí)世界第一首富)把懷著五個(gè)月身孕的妻子送上4號(hào)救生艇后签杈,站在甲板上瘫镇,帶著他的狗,點(diǎn)燃一根雪茄煙答姥,對(duì)劃向遠(yuǎn)處的小艇最后呼喊:"我愛你們O吵"
還有一個(gè)問(wèn)題:
作為男性,明明是群體中最具有強(qiáng)壯的體魄鹦付,又有相對(duì)更豐富的生存經(jīng)驗(yàn)尚粘,怎么反而在這場(chǎng)事故中就成了生存機(jī)率最低的?
作為男人敲长、作為孩子的父親郎嫁、作為妻子的丈夫秉继,肩頭上扛的一邊感情,另一邊是責(zé)任泽铛,面對(duì)災(zāi)難是作出了何種抉擇尚辑,其實(shí)不用多說(shuō),看一段回憶錄:
一名叫那瓦特列的法國(guó)商人把兩個(gè)孩子送上了救生艇盔腔,委托幾名婦女代為照顧杠茬,自己卻拒絕上船。
兩個(gè)兒子得救后弛随,世界各地的報(bào)紙紛紛登載兩個(gè)孩子的照片澈蝙,直到他們的母親從照片上認(rèn)出了他們。不幸的是撵幽,孩子們永遠(yuǎn)失去了父親。
新婚燕爾的麗德帕絲同丈夫去美國(guó)度蜜月礁击,她死死抱住丈夫不愿獨(dú)自逃生盐杂。
丈夫在萬(wàn)般無(wú)奈中一拳將她打昏。麗德帕絲醒來(lái)時(shí)哆窿,她已在一條在海上漂浮的救生艇上了链烈。
此后,她終生未再嫁挚躯,以此懷念亡夫强衡。
一些特別數(shù)據(jù)
- 人數(shù)最多的家庭:
是 Sage一家,有11個(gè)人码荔,大部分沒(méi)有存活漩勤。
- 年紀(jì)最小的乘客:
一個(gè)不足2個(gè)月的女嬰。
- 年紀(jì)最大的乘客:
是一位80高齡的老先生缩搅,當(dāng)時(shí)幸存了下來(lái)越败。
- 唯一的女博士:
- 沒(méi)有家人的小孩:
不知為何沒(méi)有登記父母記錄,還是真的沒(méi)有父母陪同出行硼瓣。
- 同名的人:
不確定是真的巧合同名究飞,還是乘客登記信息有誤。
結(jié)語(yǔ)
泰坦尼克號(hào)事件發(fā)生距今已有105年堂鲤,即使是年齡最小的幸存者也早已不在人世亿傅,這個(gè)事件留下給世人的教訓(xùn)不應(yīng)該只有對(duì)影視作品的唏噓與緬懷。
在冰冷沒(méi)有情感的數(shù)據(jù)上進(jìn)行分析解讀瘟栖,我們發(fā)現(xiàn)“物競(jìng)天擇葵擎,適者生存”這樣的大自然生存法則,在泰坦尼克這樣的災(zāi)難事件上完全失去了作用慢宗。
隨著科技的發(fā)展坪蚁、更為先進(jìn)的探測(cè)奔穿、預(yù)警工具的研發(fā),人工智能駕駛技術(shù)的投入敏晤,以后這樣大型的意外事件可能會(huì)越來(lái)少發(fā)生贱田,但一旦發(fā)生了,影響個(gè)體存活的因素嘴脾,除了科技手段男摧,還有群體的文明程度。很慶幸译打,我們生活在一個(gè)科技耗拓、文明都在高速發(fā)展的時(shí)代。
那么當(dāng)科技發(fā)展的速度超過(guò)文明發(fā)展奏司,由沒(méi)有感性只有理性的機(jī)器乔询、人工智能來(lái)定最佳的生存選擇的策略時(shí),又會(huì)是一種什么局面韵洋?