探索模式——基於關聯規則的泰坦尼克號生存人員分析

一、實驗目的:

了解Apriori演算法的R語言實現;學會用Apriori( )函數對數據進行關聯規則挖掘

二、實驗環境:

R語言

三、實驗數據:

titanic數據

四、實驗內容、要求及實驗步驟:

1、實驗內容:對titanic數據進行關聯規則挖掘分析

2、實驗要求:輸出關聯規則,並結合可視化圖像對結果進行解釋;

3、實驗步驟:

①、收集數據

②、探索和準備數據

2.1 數據準備——為數據創建一個稀疏矩陣

2.2可視化信息的支持度——商品的頻率圖

③、基於數據訓練模型

④、提升模型的性能

4.1對生成規則進行強度控制

4.2對關聯規則集合排序

⑤、關聯規則的可視化


五、實驗結果與分析(含程序、數據記錄及分析和實驗總結等):

①、收集數據

泰坦尼克號數據集(The Titanic

Dataset):在數據集包中的泰坦尼克號數據集是一個四維表,它根據社會地位(social class)、性別、年齡、和是否倖存(survival)匯總了在泰坦尼克號上的乘客命運的信息。我們利用titanic.csv數據進行分析其中的關聯性。

②、探索和準備數據

2.1 數據準備——為數據創建一個稀疏矩陣

我們採用類似於read.csv()的read.transactions()函數,該函數可以產生一個適用於事務型數據的稀疏矩陣,而read.csv()函數則不能。利用參數sep=「,」指定輸入到文件的項之間用逗號隔開。

>Groceries=read.transactions("C:/Users/Administrator/Desktop/大三下課程/數據挖掘/關聯挖掘/titanic.csv",sep=",") >summary(Groceries) #觀察數據的一些基本信息

輸出信息中(如上圖所示)提供了我們創建的稀疏矩陣的概要。2201rows指的是人員數量,10 columns指的是可能出現的10條items。如果矩陣上有信息的表示為1,沒有則為0。

密度(density)值0.4指的是非零矩陣單元的比例。在下面則列出了事務型數據中出現叫頻繁的items。成年人有2092,男性有1731人等相關信息。

最後,它為我們呈現了一組相關的統計。人員信息中有四條的有2201位。(因為前期數據被我進行了處理去掉了缺失數據)

其次利用inspect( )觀察數據的前10為人員的信息。

>inspect(Groceries[1:10]) #觀測Groceries的前10條記錄

2.2可視化信息的支持度——商品的頻率圖

為了直觀呈現統計數據,使用itemFrequencyPlot( )函數,可以得到各種items的柱狀圖。

>itemFrequencyPlot(Groceries,support=0.1) #畫出頻率圖。支持度至少大於10%

③、基於數據訓練模型

利用arules添加寶中的Apriori演算法實現。

>rules0=apriori(Groceries,parameter=list(support=0.001,confidence=0.5))#parameter參數可以對支持度(support)、置信度(confidence)、提升度(lift)進行設置#每個項集所包含項數的最大值和最小值(maxlen/minlen)、#以及輸出結果(target)等重要參數進行設置。#其中各參數的默認值為:support=0.1,confidence=0.8,maxlen=10,minlen=1,target="rules"#>rules0 #顯示rules0中生成關聯規則條數

我們可知rules0對象包含了一組139個關聯規則。為了確實他們是否有用,我們進行深入挖掘。

>inspect(rules0[1:5]) #觀測rules0中前5條規則

觀看前五條關聯規則我們可以發現前三條存在一定的問題,不能進行有效使用。於是我們進行了其他方式的篩選,選取出正真能解釋,有意義的關聯規則。

④、提升模型的性能

4.1對生成規則進行強度控制

下面,我們可以通過逐步提高最小支持度和最小置信度的值的辦法,來獲取關聯性較強的若干關聯規則。

>rules1=apriori(Groceries,parameter=list(support=0.005,confidence=0.5));rules1 >rules2=apriori(Groceries,parameter=list(support=0.005,confidence=0.6));rules2 >rules3=apriori(Groceries,parameter=list(support=0.005,confidence=0.64));rules3

我們可以得出rules1含有132條相關規則,rules2含有109條相關規則,rules2含有103條相關規則。(再次對於最小支持度和最小置信度的值如何調整的辦法我們不做進一步的探討,詳細可以參考《機器學習與R語言》)

4.2對關聯規則集合排序

由於不同的客戶有不同的需求,例如找出支持度最大的一個關聯規則或者找出有關女性的關聯規則。於是我們對數據進行參數的設置利用sort()進行排序,利用appearance參數的設置選出有關女性的關聯規則。

4.2.1對rules0中所生成的規則分別按照「三度」進行降序排列

>rules.sorted_sup = sort ( rules0, by="support" ) #對rules0中的規則按照支持度降序排序>inspect ( rules.sorted_sup [1:5] ) >rules.sorted_con = sort ( rules0, by="confidence" ) #對rules0中的規則按照置信度降序排序>inspect ( rules.sorted_con [1:5] ) >rules.sorted_lift = sort ( rules0, by="lift" ) #對rules0中的規則按照提升度降序排序>inspect ( rules.sorted_lift [1:5] )

上圖為得出支持度前5條的相關規則。我們可以得出男性與成人有強相關性。而其他的關聯度則存在缺失(為什麼?)

4.2.2下面我們還可以通過appearance參數設置對關聯規則的前項和後項進行限制,僅生成關聯結果中含有「女性」的關聯規則

>rules4=apriori(Groceries,parameter=list(maxlen=2,supp=0.001,conf=0.1),appearance=list(rhs="Female",default="lhs"))>inspect ( rules4 )

由上圖我們可以得知,孩子和女性有強相關性,二等艙與女性有最強相關性,一等艙以及三等艙與女性關係較小,倖存的女性相關性也不是很強。於是我們可以有理由假定大多數女性會選擇買二等艙的船票,倖存的女性不是很多。孩子大多數是女孩,而男孩佔少數。

⑤、關聯規則的可視化

以下我們嘗試用圖形的方式更直觀地顯示出關聯分析的結果,這裡需要用到R的擴展軟體包arulesViz。

>rules5 = apriori ( Groceries, parameter = list ( support=0.002,confidence=0.5 ) )>plot(rules5) #對rules5作散點圖

如圖上圖我們可以得知,圖中每個點相應的支持度與置信度值,分別由橫縱軸顯示,且其中關聯規則點的顏色深淺由lift的高低決定。但是由於不能具體對應那些信息,以及關聯強度如何等信息。而這一缺陷可以通過互動參數(interactive)的設置來彌補。

>plot(rules5,interactive=TRUE) #繪製互動散點圖

如上圖所示,我們可以通過單擊「inspect」按鈕得到相應點的詳細信息,我們選取了左上提升度較高的一點作為例子。

由上圖我們可以得知:在二等艙的女性成年人與生存強相關性,也就是意味著二等艙的女性成年人生存的概率較大。除此之外,在二等艙存活的女性與成年人有較強的相關性,也就是意味著二等艙存活的女性大多數是成年人。

如此之外我們還可以通過其他方式將關聯規則進行可視化。

plot(rules5,shading="order", control=list(main = "Two‐key plot"))#繪製Two-key圖,此圖中顏色越深代表該關聯規則中商品種類越多plot(rules5[1:50], method="matrix", measure="lift")plot(rules5[1:50], method="matrix3D", measure="lift")plot(rules5[1:50], method="paracoord")

五、思考題:

1、在有些得出的關聯規則中為什麼會存在缺失的結果。

2、事務型數據與我們平時所用的數據的聯繫與區別。

3、最終的得出的結論還是不夠明確,可信度以及解釋度不高。

推薦閱讀:

數據挖掘中常見的特徵工程方法
利用R語言繪製世界航班路線圖
數據挖掘實戰1:利用LM神經網路演算法進行電力竊漏電用戶自動識別
2017年歷史文章匯總|機器學習
推薦系統中的矩陣分解技術

TAG:機器學習 | 數據挖掘 | R編程語言 |