用SPK技術分析,泰坦尼克號沉船之後哪些人活下來了

本文采用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上面,以便下次進行使用。

加載模型的時候就可以從上面加載下來,直接使用了。

以上就是預測泰坦尼克號獲救的完整案例,後面會有更加精彩的內容推薦,歡迎關注!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章