本文采用Kaggle中比較知名的數據集Titanic Machine Learning from Disaster作爲分析數據源,該數據集被評爲五大最適合數據分析練手項目之一。
分析目的是根據訓練集預測部分乘客在沉船事件中是否會存活?
數據分析的整個流程如下:
(1)數據清洗
(2)特徵工程
(3)缺失值
(4)模型設計與預測
1. 數據的下載和字段的描述
數據的下載地址爲https://www.kaggle.com/c/titanic/data
目前,我們已經對變量,變量類型及其前幾個取值情況有了初步的瞭解。
我們知道: 我們的目標是要預測生存情況(Survived)——因變量可供使用的自變量11個。
2. 使用的分析工具介紹
我們使用的工具是FEA-spk技術,它的底層基於最流行的大數據開發框架spark,對各種算子的操作都是基於DataFrame的。使用FEA-spk來做交互分析,不但非常簡單易懂而且幾乎和spark的功能一樣強大,更重要的一點,它可以實現可視化,處理的數據規模更大,可以進行分佈式的機器學習等,下面我們就來實現這個案例。
3. 案例的具體實現原語如下
(1) 加載數據
訓練集的數據格式如上圖所示
(2)清洗數據
a. 觀察姓名變量
首先,我注意到在乘客名字(Name)中,有一個非常顯著的特點:乘客頭銜每個名字當中都包含了具體的稱謂或者說是頭銜,比如Mrs,Mr等。將這部分信息提取出來後可以作爲非常有用一個新變量,可以幫助我們預測。
下面我們統計一下Title各個類別的個數。
下面我們將字符串映射爲對應索引。
b.家庭情況是否會影響生存結果?
目前爲止,我們已經處理完乘客姓名這一變量,並從其中提取了一些新的變量。 下一步考慮衍生一些家庭相關的變量。首先,生成家庭人數family_size這一變量。可以基於已有變量SubSp和Parch(具體含義參照上面)。
family_size=SubSp+Parch+1(包括自己)。
缺失值
————————————————————————————————————————————
現在我們開始對原始數據當中的缺失值進行處理(填補)。具體做法有很多種,考慮到數據集本身較小,樣本數也不多,因而不能直接整行或者整列刪除缺失值樣本。那麼只能通過現有數據和變量對缺失值進行預估填補。例如:可以用均值中位數模型填補缺失值,這裏使用後面兩種方式進行。
首先查看一下哪些字段有缺失值。
可以看到Age字段,Embarked字段有缺失值, Cabin字段雖然有缺失值,但是缺失值太多了,所以這個變量不考慮。Age字段爲數值型,可以使用平均值進行填充,Embarked字段爲字符型,選擇頻率最大的字符進行填充。
可以看到出現次數最多的字符是S。
可以看到沒有缺失值了。
特徵工程
—————————————————————————————————————————————
由於機器學習只支持數字類型,所以我們要將字符型的數據轉化爲數字類型的。
首先對於Sex字段,只有male,female兩種類型,要將它轉化爲數字類型。
Embarked字段,同樣要將字符型的數據轉化爲數字類型的,然後將其映射爲獨熱編碼。
然後刪除不需要的列。
由於Spark機器學習需要的數據類型爲double類型,所以我們將字符類型的轉化爲double類型。
模型設定與預測
———————————————————————————————————————————
在完成上面的工作之後,我們進入到最後一步:預測泰坦尼克號上乘客的生存狀況。 在這裏我們使用邏輯迴歸算法。我們前期那麼多工作都是爲了這一步服務的。首先我們要將所有的特徵值聚合爲向量。
我們發現數據格式不一致,所以我們要進行歸一化處理。
下面就是建立邏輯迴歸模型了。
此刻的模型已經建立好了,下面我們來評價模型的好壞
可以看到準確率達到了86%,如果想提高精確度,可以進行參數的調節
下面開始預測是否他們存活下來,這個時候就要用到測試集了,對測試集進行同樣的變換,這裏不再敘述了,變換後的df表如下所示
下面開始使用訓練好的模型進行預測。
其中prediction列就是預測的結果,1代表活下來了,0代表沒有獲救。
最後我們還可以把模型保存在hdfs上面,以便下次進行使用。
加載模型的時候就可以從上面加載下來,直接使用了。
以上就是預測泰坦尼克號獲救的完整案例,後面會有更加精彩的內容推薦,歡迎關注!