機器學習之Kaggle實戰:泰坦尼克號生存預測
上兩篇文章講了機器學習的回歸演算法和分類演算法中比較經典的簡單線性回歸和邏輯回歸,這次是對Kaggle上的入門項目--Titanic辛存者預測練習過程的回顧和總結。
理論知識請查看腦圖
一、提出問題:
本文主要是對泰坦尼克號沉船事件進行預測:在當時的情況下,什麼樣的人更容易存活?
二、採集數據:
2.1獲取數據:在Kaggle中泰坦尼克項目主界面的Data欄獲取,有測試數據、訓練數據和提交格式三個文件,如下圖:
2.2導入數據:
此處用append()函數合併數據集。
2.3理解數據:
full.head() 查看數據集前5行。
full.describe() 查看數據集的描述統計信息,看看數據是否有異常。
full.info ( )查看每一列的數據類型,和數據總數,看看是否有缺失數據
三、數據清洗:
3.1數據預處理
先把缺失值補全了,否則彈藥(數據框)裝不進武器(模型)啊。
在這裡,對於數值型缺失值,可採用平均值填補;對於非數值型,可採用眾數填補。
填補缺失值後,整體上檢查一下是否有問題:
3.2特徵工程:
特徵工程,就是從原始數據中,最大限度地提取特徵,經過特徵變換、特徵融合等微操,形成後期訓練模型的輸入自變數集合。
特徵工程決定了這個任務完成的好壞,如果持有一個好的特徵工程,哪怕演算法選的比較初級,仍然可以很好地做正確率高的預測。
3.2.1特徵提取
數據分類:查看數據類型,分為3種數據類型。並對類別數據處理:用數值代替類別,並進行One-hot編碼。
有直接類別的
只有2種類別時:例如性別,我使用Series的map方法,可以將Series的每個元素,執行map所指定的操作。
One-hot編碼是對操作2個類別以上的採集型編碼,因為性別只有兩個類別,所以不需要使用One-hot編碼。
技能:使用數據框的get_dummies( )方法可以實現One-hot編碼。
所以,重編碼後新的特徵,需要新建一個數據框存儲下來:
例如:
有了上面的一套連招:創建特徵數據框→pd.get_dummies→按列合併至原數據集→刪除舊變數→查看合併結果。
字元串類型:
例如:
補充知識:匿名函數
python 使用 lambda 來創建匿名函數。
所謂匿名,意即不再使用 def 語句這樣標準的形式定義一個函數,預防如下:
lambda 參數1,參數2:函數體或者表達式
# 定義匿名函數:對兩個數相加
sum = lambda a,b: a + b
例如:
3.3 特徵選擇
選取原則:根據所有變數的相關係數矩陣,篩選出與預測標籤Survived最相關的特徵變數。
單獨選擇Survived列,按列降序排列,就能看到哪些特徵最正相關,哪些特徵最負相關,將其篩選出來作為模型的特徵輸入。
選擇title_df, pclass_df, family_df, Fare, cabin_df, Sex作為特徵。
構建整體數據集的特徵數據框full_x(包含1309行整體數據集特徵),再使用loc屬性拆分出891行原始數據集特徵source_x和標籤source_y、481行測試數據集特徵test_x:
四、建立模型
用訓練數據和某個機器學習演算法得到機器學習模型,用測試數據評估模型
建模的時候,需要將原始數據集進行二八拆分:80%訓練集+20%測試集。
訓練集用於訓練模型;測試集用於評估模型效果。
建模:
五、評估模型
使用model.score方法,通過測試集得到模型預測準確率。
六、方案實施(Deployment)
提交Kaggle
我們看到預測結果pred_y是浮點數,而官網範例給的是整型int,故需先進行數據類型轉換,然後按照範例文件,創建具有兩個欄位的無index文件(Titanic.csv)
上傳到Kaggle看看戰績吧:
總結:
第一次在Kaggle上實踐機器學習,主要目的是掌握數據清洗中的特徵工程方法,其實最重要的部分也在這裡。涉及到的幾個新技能:
- Series的map方法:高效、快速地批量處理列數據,也適用二水平分類數據的編碼
- pd.get_dummies方法:適用多水平分類數據的虛擬編碼,premix增加變數名前綴
- lamda匿名函數:配合以上技能效果更佳哦
- pd.concat方法:axis=1按列合併
- df.drop(column, axis=1,inplace=True)原地刪除無用變數
- 數據集縱向合併df1.append(df2, ignore_index=True)
改日修得更NB的特徵工程方法和演算法,再來提高排名。
推薦閱讀:
TAG:機器學習 | 深度學習DeepLearning | 數據挖掘 |