本文參照《Kaggle賽題解析:邏輯回歸預(yù)測(cè)模型實(shí)現(xiàn)》是复,使用PowerBI替換原文用Python對(duì)Titanic數(shù)據(jù)集進(jìn)行分析懦傍,故本文不包括模型只锭、預(yù)測(cè)等內(nèi)容。
Kaggle是一個(gè)數(shù)據(jù)分析建模的應(yīng)用競(jìng)賽平臺(tái)洒嗤,有點(diǎn)類似KDD-CUP(國(guó)際知識(shí)發(fā)現(xiàn)和數(shù)據(jù)挖掘競(jìng)賽)箫荡,企業(yè)或者研究者可以將問題背景、數(shù)據(jù)渔隶、期望指標(biāo)等發(fā)布到Kaggle上羔挡,以競(jìng)賽的形式向廣大的數(shù)據(jù)科學(xué)家征集解決方案。而熱愛數(shù)(dong)據(jù)(shou)挖(zhe)掘(teng)的小伙伴們可以下載/分析數(shù)據(jù)间唉,使用統(tǒng)計(jì)/機(jī)器學(xué)習(xí)/數(shù)據(jù)挖掘等知識(shí)绞灼,建立算法模型,得出結(jié)果并提交呈野,排名top的可能會(huì)有獎(jiǎng)金哦低矮!
關(guān)于泰坦尼克號(hào)之災(zāi)
帶大家去該問題頁(yè)面溜達(dá)一圈吧
下面是問題背景頁(yè)
泰坦尼克號(hào)問題之背景
就是那個(gè)大家都熟悉的『Jack and Rose』的故事,豪華游艇倒了被冒,大家都驚恐逃生军掂,可是救生艇的數(shù)量有限,無(wú)法人人都有昨悼,副船長(zhǎng)發(fā)話了『lady and kid first蝗锥!』,所以是否獲救其實(shí)并非隨機(jī)率触,而是基于一些背景有rank先后的终议。
訓(xùn)練和測(cè)試數(shù)據(jù)是一些乘客的個(gè)人信息以及存活狀況,要嘗試根據(jù)它生成合適的模型并預(yù)測(cè)其他人的存活狀況闲延。
通過(guò)PowerBI工具認(rèn)識(shí)數(shù)據(jù)痊剖。
加載分析數(shù)據(jù)
1、打開PowerBI客戶端垒玲,點(diǎn)擊獲取數(shù)據(jù)
選擇Excel文件類型
選擇Titanic訓(xùn)練文件打開即可。
我們看到找颓,總共有12列合愈,其中Survived字段表示的是該乘客是否獲救,其余都是乘客的個(gè)人信息击狮,包括:
PassengerId => 乘客ID
Pclass => 乘客等級(jí)(1/2/3等艙位)
Name => 乘客姓名
Sex => 性別
Age => 年齡
SibSp => 堂兄弟/妹個(gè)數(shù)
Parch => 父母與小孩個(gè)數(shù)
Ticket => 船票信息
Fare => 票價(jià)
Cabin => 客艙
Embarked => 登船港口
分析數(shù)據(jù)
每個(gè)乘客都這么多屬性佛析,那我們咋知道哪些屬性更有用,而又應(yīng)該怎么用它們氨肱睢寸莫??jī)H僅最上面的對(duì)數(shù)據(jù)了解,依舊無(wú)法給我們提供想法和思路档冬。我們?cè)偕钊胍稽c(diǎn)來(lái)看看我們的數(shù)據(jù)膘茎,看看每個(gè)/多個(gè) 屬性和最后的Survived之間有著什么樣的關(guān)系呢桃纯。
乘客各屬性分布
看看屬性和結(jié)果之間的關(guān)系
被救的人300多點(diǎn),不到半數(shù)披坏;3等艙乘客灰常多态坦;遇難和獲救的人年齡似乎跨度都很廣;3個(gè)不同的艙年齡總體趨勢(shì)似乎也一致棒拂,2/3等艙乘客20歲多點(diǎn)的人最多伞梯,1等艙40歲左右的最多(→_→似乎符合財(cái)富和年齡的分配哈,咳咳帚屉,別理我谜诫,我瞎扯的);登船港口人數(shù)按照S攻旦、C猜绣、Q遞減,而且S遠(yuǎn)多于另外倆港口敬特。
這個(gè)時(shí)候我們可能會(huì)有一些想法了:
不同艙位/乘客等級(jí)可能和財(cái)富/地位有關(guān)系掰邢,最后獲救概率可能會(huì)不一樣
年齡對(duì)獲救概率也一定是有影響的,畢竟前面說(shuō)了伟阔,副船長(zhǎng)還說(shuō)『小孩和女士先走』呢
和登船港口是不是有關(guān)系呢辣之?也許登船港口不同,人的出身地位不同皱炉?
獲救情況分析
口說(shuō)無(wú)憑怀估,空想無(wú)益。老老實(shí)實(shí)再來(lái)統(tǒng)計(jì)統(tǒng)計(jì)合搅,看看這些屬性值的統(tǒng)計(jì)分布吧多搀。
嘖嘖,果然灾部,錢和地位對(duì)艙位有影響康铭,進(jìn)而對(duì)獲救的可能性也有影響啊←_←
咳咳,跑題了赌髓,我想說(shuō)的是从藤,明顯等級(jí)為1的乘客,獲救的概率高很多锁蠕。恩夷野,這個(gè)一定是影響最后獲救結(jié)果的一個(gè)特征。
歪果盆友果然很尊重lady荣倾,lady first踐行得不錯(cuò)悯搔。性別無(wú)疑也要作為重要特征加入最后的模型之中
恩,堅(jiān)定了之前的判斷舌仍。
我們看看各登船港口的獲救情況妒貌。
下面我們來(lái)看看 堂兄弟/妹通危,孩子/父母有幾人,對(duì)是否獲救的影響苏揣。
好吧黄鳍,沒看出特別特別明顯的規(guī)律(為自己的智商感到捉急…),先作為備選特征平匈,放一放框沟。
Cabin屬性分析
這三三兩兩的…如此不集中…我們猜一下,也許增炭,前面的ABCDE是指的甲板位置忍燥、然后編號(hào)是房間號(hào)?…好吧隙姿,我瞎說(shuō)的梅垄,別當(dāng)真…
關(guān)鍵是Cabin這鬼屬性,應(yīng)該算作類目型的输玷,本來(lái)缺失值就多队丝,還如此不集中,注定是個(gè)棘手貨…第一感覺欲鹏,這玩意兒如果直接按照類目特征處理的話机久,太散了,估計(jì)每個(gè)因子化后的特征都拿不到什么權(quán)重赔嚎。加上有那么多缺失值膘盖,要不我們先把Cabin缺失與否作為條件(雖然這部分信息缺失可能并非未登記,maybe只是丟失了而已尤误,所以這樣做未必妥當(dāng))侠畔,先在有無(wú)Cabin信息這個(gè)粗粒度上看看Survived的情況好了。
簡(jiǎn)單數(shù)據(jù)預(yù)處理
數(shù)據(jù)預(yù)處理包括數(shù)據(jù)清理损晤、數(shù)據(jù)集成软棺、數(shù)據(jù)變換、數(shù)據(jù)歸約四個(gè)環(huán)節(jié)沉馆,這四個(gè)環(huán)節(jié)并非完全獨(dú)立码党,相互之間會(huì)有重疊。
大體數(shù)據(jù)的情況看了一遍斥黑,對(duì)感興趣的屬性也有個(gè)大概的了解了。
下一步干啥眉厨?咱們?cè)撎幚硖幚磉@些數(shù)據(jù)锌奴,為機(jī)器學(xué)習(xí)建模做點(diǎn)準(zhǔn)備了。
對(duì)了憾股,我這里說(shuō)的數(shù)據(jù)預(yù)處理鹿蜀,其實(shí)就包括了很多Kaggler津津樂道的feature engineering過(guò)程箕慧,灰常灰常有必要茴恰!
先從最突出的數(shù)據(jù)屬性開始吧颠焦,對(duì),Cabin和Age往枣,有丟失數(shù)據(jù)實(shí)在是對(duì)下一步工作影響太大伐庭。
先說(shuō)Cabin,暫時(shí)我們就按照剛才說(shuō)的分冈,按Cabin有無(wú)數(shù)據(jù)圾另,將這個(gè)屬性處理成Yes和No兩種類型吧。這屬于數(shù)據(jù)轉(zhuǎn)換雕沉,通過(guò)Excel公式簡(jiǎn)單的做變換集乔。
【通過(guò)Weka如何將數(shù)據(jù)集處理成兩個(gè)字段,這還需要仔細(xì)研究一下】
再說(shuō)Age:
通常遇到缺值的情況坡椒,我們會(huì)有幾種常見的處理方式
如果缺值的樣本占總數(shù)比例極高扰路,我們可能就直接舍棄了,作為特征加入的話倔叼,可能反倒帶入noise汗唱,影響最后的結(jié)果了。通過(guò)Weka可以看到Age屬性的缺失比例為20%【缺失比例為什么值時(shí)算高缀雳?】
如果缺值的樣本適中渡嚣,而該屬性非連續(xù)值特征屬性(比如說(shuō)類目屬性),那就把NaN作為一個(gè)新類別肥印,加到類別特征中识椰。可以通過(guò)前文所說(shuō)的weka.filters.unsupervised.attribute.ReplaceMissingWithUserConstant
如果缺值的樣本適中深碱,而該屬性為連續(xù)值特征屬性腹鹉,有時(shí)候我們會(huì)考慮給定一個(gè)step(比如這里的age,我們可以考慮每隔2/3歲為一個(gè)步長(zhǎng))敷硅,然后把它離散化功咒,之后把NaN作為一個(gè)type加到屬性類目中。
Weka 離散化命令【weka.filters.unsupervised.attribute.Discretize -B 4 -M -1.0 -R 6】
缺失值以NaN填充:
有些情況下绞蹦,缺失的值個(gè)數(shù)并不是特別多力奋,那我們也可以試著根據(jù)已有的值,擬合一下數(shù)據(jù)幽七,補(bǔ)充上景殷。
本例中,后兩種處理方式應(yīng)該都是可行的,我們先試試擬合補(bǔ)全吧(雖然說(shuō)沒有特別多的背景可供我們擬合猿挚,這不一定是一個(gè)多么好的選擇)
我們這里用scikit-learn中的RandomForest來(lái)擬合一下缺失的年齡數(shù)據(jù)(注:RandomForest是一個(gè)用在原始數(shù)據(jù)中做不同采樣咐旧,建立多顆DecisionTree,再進(jìn)行average等等來(lái)降低過(guò)擬合現(xiàn)象绩蜻,提高結(jié)果的機(jī)器學(xué)習(xí)算法铣墨,我們之后會(huì)介紹到)