資料探勘研究與實務_鐵達尼號生存預測
作業故事背景
世紀之難-鐵達尼號
1912年4月10日,鐵達尼號展開了首航,也是唯一一次載客出航。
目的地是紐約,部分乘客是當時的富豪,和一些來自英國、愛爾蘭的及歐洲的移民,尋求在美國展開新生活發展機會。
https://www.kaggle.com/c/titanic/submissions
資料集介紹
將資料集下載解壓存放至python程式檔相對目錄下
一開始先用pandas來做csv表格資料讀取進來做後續的parser
有些欄位資料為空有缺失無法直接拿來計算會出錯,因此要將空的值補齊
比方年齡為空的乘客age資料用其他有值的做加總平均回填
性別就原始資料給定的純文字內容無法做預測處裡,因此可轉為數字來取代表示,女性是1,男性是0。建立新的column叫Sex_Code再將資料回填,利於後續預測程式的訓練模型用途。
第一階段.前處理程式碼
1 2 3 4 5 6 7 8 | # -*- coding: utf-8 -*- import pandas as pd df = pd.read_csv('./titanic/train.csv') df['Age'] = df['Age'].fillna(df['Age'].mean()) df['SexCode'] = df['Sex'].map({'female' : 1 , 'male' : 0}).astype('int') df['Sex'] = df['SexCode'] df |
預測模型產生的3 steps
Step1.輸入特徵值及最終結果(類別、種類…)
在乎乘客是否存活,特徵值(艙等、年齡、性別….最終結果:是否有存活)
Step2.呼叫預測模型函式
採用決策樹
Step3.建立預測模型
用決策樹來fit特徵值及最終結果來訓練出模型,之後就能預測下一筆資料。
第二階段.程式碼
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | # -*- coding: utf-8 -*- import pandas as pd df = pd.read_csv('./titanic/train.csv') df['Age'] = df['Age'].fillna(df['Age'].mean()) df['SexCode'] = df['Sex'].map({'female' : 1 , 'male' : 0}).astype('int') df['Sex'] = df['SexCode'] #df from sklearn import tree x = df[['Pclass','Sex','Age']] y = df['Survived'] cla = tree.DecisionTreeClassifier() #創建決策樹 cla.fit(x,y) #開始training jack_is_survived = cla.predict([[3,0,25.0]]) print("Jack:",jack_is_survived) rose_is_survived = cla.predict([[1,1,20.0]]) print("Rose:",rose_is_survived) |
x部分用於讀取特徵值
y部分用於讀取最終結果類別
Jack 偷渡客男生(0) 住最差的3等艙 大約25歲
跟
Rose 有錢人女生(1)住一等艙 大約23歲
Jack 不幸罹難
Rose存活了
最終程式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | # -*- coding: utf-8 -*- import pandas as pd df = pd.read_csv('./titanic/train.csv') df['Age'] = df['Age'].fillna(df['Age'].mean()) df['SexCode'] = df['Sex'].map({'female' : 1 , 'male' : 0}).astype('int') df['Sex'] = df['SexCode'] #df from sklearn import tree x = df[['Pclass','Sex','Age']] y = df['Survived'] cla = tree.DecisionTreeClassifier() #創建決策樹 cla.fit(x,y) #開始training #jack_is_survived = cla.predict([[3,0,25.0]]) #print("Jack:",jack_is_survived) #rose_is_survived = cla.predict([[1,1,20.0]]) #print("Rose:",rose_is_survived) # 讀取測試數據 test_df = pd.read_csv('./titanic/test.csv') test_df['Age'] = test_df['Age'].fillna(test_df['Age'].mean()) test_df['SexCode'] = test_df['Sex'].map({'female' : 1 , 'male' : 0}).astype('int') test_df['Sex'] = test_df['SexCode'] test_df # 分割特徵 x_test = test_df[['Pclass', 'Sex', 'Age']] # 使用模型進行預測 y_pred = cla.predict(x_test) # 創建一個包含預測結果的DataFrame submission_df = pd.DataFrame({'PassengerId': test_df['PassengerId'], 'Survived': y_pred}) # 保存預測結果到gender_submission.csv submission_df.to_csv('./titanic/gender_submission.csv', index=False) |
使用已經訓練好的模型進行預測,並將預測結果保存到gender_submission.csv中。然後,您可以將gender_submission.csv提交到Kaggle競賽進行評估。
https://www.kaggle.com/chousamuel
留言
張貼留言