您當前的位置:首頁 > 文化

資料分析之機器學習入門

作者:由 薯片大叔 發表于 文化時間:2018-06-07

資料分析是一門包含眾多專業要素的技術。究其本質,是研究已經發生的事件產生的資料,透過歸納統計,提取有用資訊,從而預測未知資料,或者對相關變數進行控制。機器學習是資料分析中的一件利器,可以透過科學的統計方法,對已知資料歸納整理,建立模型,對未知資料進行預測。

資料分析之機器學習入門

本篇文章只作為最簡單的機器學習入門介紹,以泰坦尼克號生還率預測為例,方法為簡單線性迴歸和邏輯迴歸。(文章只講原理,程式碼放在最後)

此案例分析資料來自於kaggle上6年前的一個分析專案:

Titanic: Machine Learning from Disaster。

本案例提供了兩份資料:已知生還與否的乘客資訊,和未知的乘客資訊。透過對乘客的年齡,階級地位,性別等因素,預測未知生還的乘客的生還狀況。

首先理清思路,按照機器學習的步驟進行操作:

獲取資料,檢視資訊輪廓

清洗資料,提取特徵值

建立迴歸模型,並對模型透過已有資料進行訓練

模型評估,預測結果

清洗資料(重要的一步)

kaggle已經提供了資料,因此我們可以直接進行清洗資料。清洗資料是繁瑣而且坑比較多的地方,資料清洗的好壞直接影響預測結果。

我們需要先檢視資料的特徵項資訊,檢視缺失資料的數目佔比。對於缺失量很小的特徵,我們可以選擇個案剔除法,均值替換法等,對於缺失量較多的資料則可採用多重替代法,迴歸替換法等。每種方法都有自己的優勢,操作簡單或者預測準確,但同樣都會對結果產生不確定的影響。

在Titanic專案中,資料總量為1309條,其中891條為已知資料,其餘未知,列表大致資訊如下:

資料分析之機器學習入門

資料分析之機器學習入門

根據以上資訊,大致可以看出,乘客的平均年齡大概29。7歲(只統計未缺失),階級特徵大概在2~3class,平均擁有親人接近1個(sibsp+parch),有人的船票不要錢,也有人的船票高達500+。但是以上資訊有些雜亂,比如Pclass有三個等級,Name的資訊也不確定,所以考慮將所有資料整合後,進行特徵提取。

作為特徵的缺失資料有:

Age 1046 non-null float64

Cabin 295 non-null object

Embarked 1307 non-null object

Fare 1308 non-null float64

年齡:

缺失值較多,但是這又是一個不可忽視的因素,可以考慮將他作為一個小標籤(target)進行預測,但問題是,本專案的資料只有1309條,屬於少量資料,如果進行迴歸預測,過擬合的可能性極大,因此還是老實地選擇均值填充。

船艙號:

缺失資料更大,佔了70%以上。分兩點考慮:

船艙號和Pclass在現實意義上應該具有相關性;

會不會社會地位高的人船艙號遺失機率小一些,而社會地位低的人船艙號遺失可能較大?

分析之後決定做重新命名,以U代替船艙號。

登船地點:

只有兩條缺失,考慮到資料量本身不大,選擇眾數填充。

船票價格:

船票價格從資料框給出的描述,標準差在50左右,但只缺失一條,考慮用平均值填充。

特徵分類

資料清洗完成之後,需要對有用特徵進行分類,這一步的意義在於,降低單個特徵值內部熵值,也就是降低特徵值內部複雜度。這種做法有利於資料分析時對特徵的判斷,擴大有效範圍。

在Titanic專案中需要處理的專案有:

Embarked 登船口岸

Sex 性別

Pclass 階層

Name 姓名

SibSp和Parch 親人數量

Cabin 船艙號

資料分析之機器學習入門

根據具體資料情況,Sex中有male和female之分,SibSp和Parch為數值,Pclass中有三個等級,Embarked中有S,Q,C三個選擇,Name中有Mr,Master等分類。

對於已經確定分類的特徵,以Embarked為例:

登船港口(Embarked)的值是:

C = Cherbourg

Q = Queenstown

S = Southampton

對此列特徵進行one-hot encoding 獨熱編碼處理。獨熱編碼又叫一維有效編碼,作用是將一個具有n個變數的特徵轉換為n個特徵,每個特徵只有一個變數。

資料分析之機器學習入門

對於不確定分類的特徵,以Name為例:

資料框中的名字都有很長,但是每條資料中都會在第二個欄位處出現稱謂:

資料分析之機器學習入門

根據上述規律,決定提取中間的稱謂,提取方法可以是字串切片,也可以是正則匹配,那個順手就用哪個。提取完畢之後,得到如下資訊:

資料分析之機器學習入門

接下來要根據常識分類(事實上我這兒是看別人的…),將一些歸為皇室成員,一些歸為政府官員等等:

資料分析之機器學習入門

特徵提取

特徵整理完畢之後,就要篩選相關度較高的特徵了:

資料分析之機器學習入門

按照上邊的相關係數,根據相關性大小,選擇一些相關係數絕對值較大的特徵,作為模型的輸入:(稱謂)TitleDF、客艙等級(PclassDF)、親人數量(familyDF)、船票價格(Fare)、船艙號(CabinDF)、登船港口(EmbarkedDF)、性別(Sex)

建立模型,模型訓練,模型評估

這一步事實上很重要,因為不同型別的資料適合的建模方法都不盡相同,如果是大神,可以選擇自己建模,這裡只選擇用sklearn中提供的寫好的邏輯迴歸模型。(這裡是機器學習的核心,此案例只以應用為主)

邏輯迴歸模型,實質上是一個分類器。它透過對標籤資料的逆向推導,求出最大似然估計引數,然後將得到的引數帶入Logistic函式(或稱為Sigmoid函式)進行人為分類。其中求最大似然估計時,方法可選,不同的方法,不同的梯度下降切入點等因素都會導致模型的不同。

sklearn包提供了一個已經寫好的方法,我們直接帶入即可:

資料分析之機器學習入門

首先將已知資料切分為兩部分,一部分用於訓練,一部分用於評估模型

將訓練資料帶入,然後用測試資料帶入進行模型評估。

如果資料量較大時,一般情況會選擇KFold交叉驗證的方法,來防止模型的過擬合,此案例資料太少,故只選擇一組。

最後,模型訓練完畢,將未知資料的特徵值帶入模型,即可返回預測結果。

這篇文章只介紹了資料分析中機器學習的大致過程,機器學習水太深,還需要長期學習。下面是案例程式碼。

標簽: 資料  模型  特徵  缺失  船艙