摘要:新增特征,先把空缺值填充為,再提取中的首字母構(gòu)成乘客的甲板號。新增特征,統(tǒng)計每個乘客的共票號數(shù)。為了使處于這兩種反常組中的樣本能夠被正確分類,對測試集中處于反常組中的樣本的,,進行懲罰修改。選取特征,轉(zhuǎn)換為數(shù)值變量,劃分訓(xùn)練集和測試集
1.新增Title
從姓名中提取乘客的稱呼,歸納為六類。
將["Capt", "Col", "Major", "Dr", "Rev"]映射為Officer,這些都是工作人員;
將["Don", "Sir", "the Countess", "Dona", "Lady"]映射為Royalty,the Countess是伯爵夫人,這幾類稱呼都是尊稱,表明了這些乘客的社會地位很高還有貴族;
將["Mme", "Ms", "Mrs"]映射為Miss,這些稱呼只能看出性別是女性;
將["Mr"]映射為Mr;
將["Master","Jonkheer"]映射為Master
Title_Dict.update(dict.fromkeys(["Capt", "Col", "Major", "Dr", "Rev"], "Officer")) Title_Dict.update(dict.fromkeys(["Don", "Sir", "the Countess", "Dona", "Lady"], "Royalty")) Title_Dict.update(dict.fromkeys(["Mme", "Ms", "Mrs"], "Mrs")) Title_Dict.update(dict.fromkeys(["Mlle", "Miss"], "Miss")) Title_Dict.update(dict.fromkeys(["Mr"], "Mr")) Title_Dict.update(dict.fromkeys(["Master","Jonkheer"], "Master"))
2.將Parch和SibSp合并為FamilySize,這個特征描述了家庭成員的數(shù)量。接著按生存概率給FamiliSize分組。[2,4]的分為一組,(4,7]分為一組,大于7的分為一組,是FamilyLable特征。
>
>
3.新增Deck特征,先把Cabin空缺值填充為"Unknown",再提取Cabin中的首字母構(gòu)成乘客的甲板號。
4.新增TicketGroup特征,統(tǒng)計每個乘客的共票號數(shù)。按生存率把TicketGroup分為三類:[2,4]一類,(4,8] && 1一類,(8,)一類。
5.數(shù)據(jù)清洗
1)Age缺失量為263,缺失量較大,用Sex, Title, Pclass三個特征構(gòu)建隨機森林模型,填充年齡缺失值。
from sklearn.ensemble import RandomForestRegressor age_df = all_data[["Age", "Pclass","Sex","Title"]] age_df=pd.get_dummies(age_df) known_age = age_df[age_df.Age.notnull()].as_matrix() unknown_age = age_df[age_df.Age.isnull()].as_matrix() y = known_age[:, 0] X = known_age[:, 1:] rfr = RandomForestRegressor(random_state=0, n_estimators=100, n_jobs=-1) rfr.fit(X, y) predictedAges = rfr.predict(unknown_age[:, 1::]) all_data.loc[ (all_data.Age.isnull()), "Age" ] = predictedAges
2)Embarked缺失量為2,缺失Embarked信息的乘客的Pclass均為1,且Fare均為80。因為Embarked為C且Pclass為1的乘客的Fare中位數(shù)為80,所以缺失值填充為C。
all_data["Embarked"] = all_data["Embarked"].fillna("C") all_data.groupby(by=["Pclass","Embarked"]).Fare.median()
3) Fare缺失量為1,缺失Fare信息的乘客的Embarked為S,Pclass為3,所以用Embarked為S,Pclass為3的乘客的Fare中位數(shù)填充。
all_data.groupby(by=["Pclass","Embarked"]).Fare.median() fare=all_data[(all_data["Embarked"] == "S") & (all_data["Pclass"] == 3)].Fare.median() all_data["Fare"]=all_data["Fare"].fillna(fare)
4) 把姓氏相同的乘客劃分為同一組,從人數(shù)大于一的組中分別提取出每組的婦女兒童和成年男性,發(fā)現(xiàn)絕大部分女性和兒童組的平均存活率都為1或0,即同組的女性和兒童要么全部幸存,要么全部遇難。
all_data["Surname"]=all_data["Name"].apply(lambda x:x.split(",")[0].strip()) Surname_Count = dict(all_data["Surname"].value_counts()) all_data["FamilyGroup"] = all_data["Surname"].apply(lambda x:Surname_Count[x]) Female_Child_Group=all_data.loc[(all_data["FamilyGroup"]>=2) & ((all_data["Age"]<=12) | (all_data["Sex"]=="female"))] Male_Adult_Group=all_data.loc[(all_data["FamilyGroup"]>=2) & (all_data["Age"]>12) & (all_data["Sex"]=="male")]
因為普遍規(guī)律是女性和兒童幸存率高,成年男性幸存較低,所以我們把不符合普遍規(guī)律的反常組選出來多帶帶處理。把女性和兒童組中幸存率為0的組設(shè)置為遇難組,把成年男性組中存活率為1的設(shè)置為幸存組,推測處于遇難組的女性和兒童幸存的可能性較低,處于幸存組的成年男性幸存的可能性較高。
Female_Child=pd.DataFrame(Female_Child_Group.groupby("Surname")["Survived"].mean().value_counts()) Female_Child.columns=["GroupCount"] Female_Child sns.barplot(x=Female_Child.index, y=Female_Child["GroupCount"]).set_xlabel("AverageSurvived")
為了使處于這兩種反常組中的樣本能夠被正確分類,對測試集中處于反常組中的樣本的Age,Title,Sex進行懲罰修改。
Female_Child_Group=Female_Child_Group.groupby("Surname")["Survived"].mean() Dead_List=set(Female_Child_Group[Female_Child_Group.apply(lambda x:x==0)].index) print(Dead_List) Male_Adult_List=Male_Adult_Group.groupby("Surname")["Survived"].mean() Survived_List=set(Male_Adult_List[Male_Adult_List.apply(lambda x:x==1)].index) print(Survived_List) train=all_data.loc[all_data["Survived"].notnull()] test=all_data.loc[all_data["Survived"].isnull()] test.loc[(test["Surname"].apply(lambda x:x in Dead_List)),"Sex"] = "male" test.loc[(test["Surname"].apply(lambda x:x in Dead_List)),"Age"] = 60 test.loc[(test["Surname"].apply(lambda x:x in Dead_List)),"Title"] = "Mr" test.loc[(test["Surname"].apply(lambda x:x in Survived_List)),"Sex"] = "female" test.loc[(test["Surname"].apply(lambda x:x in Survived_List)),"Age"] = 5 test.loc[(test["Surname"].apply(lambda x:x in Survived_List)),"Title"] = "Miss"
5) 選取特征,轉(zhuǎn)換為數(shù)值變量,劃分訓(xùn)練集和測試集
all_data=pd.concat([train, test]) all_data=all_data[["Survived","Pclass","Sex","Age","Fare","Embarked","Title","FamilyLabel","Deck","TicketGroup"]] all_data=pd.get_dummies(all_data) train=all_data[all_data["Survived"].notnull()] test=all_data[all_data["Survived"].isnull()].drop("Survived",axis=1) X = train.as_matrix()[:,1:] y = train.as_matrix()[:,0]
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/43527.html
摘要:船上每位旅客的身份證明乘客等級。簡單地用平均年齡或中位年齡替換它們可能不是最佳解決方案,因為年齡可能因乘客的類別和類別而不同。例如如果乘客是女性,則來自和來自王室,中位年齡為歲。失蹤的年齡已被取代。此函數(shù)將值替換為表示。 由 Kaggle 主持的泰坦尼克號生存挑戰(zhàn)賽是一項競賽,其目標(biāo)是基于一組描述乘客的變量,例如他的年齡,性別或乘客在船上的等級,來預(yù)測特定乘客是生存或死亡。 我一直在玩...
摘要:年月日,機器之心曾經(jīng)推出文章為你的深度學(xué)習(xí)任務(wù)挑選最合適從性能到價格的全方位指南。如果你想要學(xué)習(xí)深度學(xué)習(xí),這也具有心理上的重要性。如果你想快速學(xué)習(xí)深度學(xué)習(xí),多個廉價的也很好。目前還沒有適合顯卡的深度學(xué)習(xí)庫所以,只能選擇英偉達(dá)了。 文章作者 Tim Dettmers 系瑞士盧加諾大學(xué)信息學(xué)碩士,熱衷于開發(fā)自己的 GPU 集群和算法來加速深度學(xué)習(xí)。這篇博文最早版本發(fā)布于 2014 年 8 月,之...
摘要:數(shù)據(jù)可視化僅按照性別劃分,顯然女性的生還數(shù)量明顯高于男性是船艙等級,等級越高生還概率越大代表兄弟姐妹配偶的數(shù)量,只有一個兄弟姐妹配偶的乘客生還人數(shù)最多代表直系親屬即父母和子女的數(shù)量代表登船港口,港口的生存概率最高 1.總體預(yù)覽 showImg(https://segmentfault.com/img/bVbqODH); RangeIndex: 891 entries, 0 to 89...
摘要:文章翻譯自深度學(xué)習(xí)是一個計算需求強烈的領(lǐng)域,的選擇將從根本上決定你的深度學(xué)習(xí)研究過程體驗。因此,今天就談?wù)勅绾芜x擇一款合適的來進行深度學(xué)習(xí)的研究。此外,即使深度學(xué)習(xí)剛剛起步,仍然在持續(xù)深入的發(fā)展。例如,一個普通的在上的售價約為美元。 文章翻譯自:Which GPU(s) to Get for Deep Learning(http://t.cn/R6sZh27)深度學(xué)習(xí)是一個計算需求強烈的領(lǐng)域...
閱讀 3949·2021-11-22 13:53
閱讀 1676·2021-08-25 09:39
閱讀 2410·2019-08-29 18:36
閱讀 1469·2019-08-26 13:35
閱讀 1215·2019-08-26 11:57
閱讀 1678·2019-08-23 15:57
閱讀 803·2019-08-23 14:55
閱讀 1163·2019-08-23 14:51