:::

Weka的K Means分群演算法使用教學:SimpleKMeans / Clustering with Weka: SimpleKMeans

image

用資料探勘的分群演算法來為樣本分群是一種基本的分析方式。本篇就以「Data mining with WEKA, Part 2: Classification and clustering」這篇為例子,介紹如何使用K Means演算法來分群。



Weka下載 / Weka Download

2016-12-05_145933

Weka的全名是「Waikato Environment for Knowledge Analysis」,Waikato是紐西蘭北邊的行政區。

Weka是資料探勘領域相當知名的開放原始碼自由軟體,已經有許多文章介紹如何安裝與使用Weka,例如「資料探勘軟體Weka之安裝篇」。我這篇就不細講如何安裝Weka,只列出Weka相關連結供大家方便下載:

分群範例資料下載 / Clustering Example Data Download

2016-12-05_152156

Data mining with WEKA, Part 2: Classification and clustering」這篇只有介紹如何操作Weka,卻沒有提供關鍵的範例資料bmw-browsers.arff。

後來我在Weka Tutorials找到這篇教學使用的檔案,讓我在這裡備份如下:

bmw-browsers.arff 這個資料集來自汽車品牌BMW代理商的真實資料。代理商保存了過去的銷售資訊,包括誰買了BMW、觀賞BMW、瀏覽的BMW樓層等資訊。從資料內容來看,bmw-browsers.arff 中有9項屬性(特徵),總共100筆資料。屬性介紹如下:

  • CustomerID:顧客編號,資料類型為數字。
  • Dealership:是否有代理,0表示沒有,1表示有。
  • Showroom:顧客是否有看展示間,0表示沒有,1表示有。
  • ComputerSearch:顧客是否有用電腦搜尋,0表示沒有,1表示有。
  • M5:顧客是否有看BMW M5四門跑車,0表示沒有,1表示有。
  • 3Series:顧客是否有看BMW 3系列轎車,0表示沒有,1表示有。
  • Z4:顧客是否有看BMW Z4雙座敞篷跑車,0表示沒有,1表示有。
  • Financing:顧客是否符合貸款資格,0表示沒有,1表示有。
  • Purchase:顧客是否真的購車,0表示沒有,1表示有。

在實際進行分群的時候,我們會將辨識客戶的第一個屬性「CustomerID」排除在外。但是在最後分群儲存結果時,我們還是可以看到該客戶被分到哪一群裡面。


K Means分群教學 / Clustering Tutorial

接下來就讓我們實際操作看看吧。

1. 載入資料 / Loading Data

image

開啟Weka主程式「Weka GUI Chooser」,選擇「Explorer」。

image

在Weka Explorer中,點選左上角的「Open file…」。

image

選擇剛剛下載的「bmw-browsers.arff」。

image

資料已經成功載入Weka。

2. 進入分群功能 / Switch to Cluster Panel

image

接下來我們從「Preprocess (預處理)」切換到「Cluster (分群)」。

image

這是Weka的分群介面,但是大部分設定都只在上面的部分。

3. 選擇分群演算法 / Choose Clustering Algorithm

image

接下來我們要先選擇分群演算法,請點下左上角的「Choose」。

image

選擇K Means的演算法「SimpleKMeans」。

image

現在上面分群演算法切換成SimeleKMeans了。

4. 設定分群數量 / Change Number of Clusters

K Means演算法中,最終要分的組數是一個很關鍵的設定。Weka分群的預設數量是2群,很多研究會使用3群或5群。理想上應該是依據樣本資料的類型或是研究目的來決定群數,但對很多初探型的研究來說非常困難。有興趣可以看一下「深入淺出Mahout K-means (PART 5) 如何決定群聚的數量 Conopy」這篇的討論。

在本例中使用的分群數量是5群,以下我們就看看怎麼在Weka中調整分群數量。

image

在演算法這個位置按下滑鼠左鍵。

image

接著會跳出演算法的設定對話視窗。從裡面找到分群數量設定「numClusters」,把它從預設值2改成5。然後按下「OK」按鈕。

image

回到主畫面,分群數量變成-N 5了。

5. 排除不需要的屬性 / Ignore attributes

image

剛剛有講到,在分群的時候,我們應該先把客戶的辨識資料「CustomerID」移除掉。這個功能可以從「Ignore attributes」進去。

image

選擇「CustomerID」屬性,按下「Select」。這樣待會分群時就可以忽略掉這個屬性了。

6. 進行分群與解釋結果 / Start Clustering and Interpret Results

image

設定完成之後,就按下左邊的「Start」按鈕吧。

image

很快的,第一個分群結果就出來了。

image

我們從右邊的「Clusterer output」裡面找到「Cluster centroids」,來看一下分群最後結果的各群特性。

分群結果如下:

Cluster#
Attribute            Full Data      0          1          2          3          4
                       (100)       (26)       (27)        (5)       (14)       (28)
==================================================================================
Dealership              0.6     0.9615     0.6667          1     0.8571          0
Showroom               0.72     0.6923     0.6667          0     0.5714          1
ComputerSearch         0.43     0.6538          0          1     0.8571     0.3214
M5                     0.53     0.4615      0.963          1     0.7143          0
3Series                0.55     0.3846     0.4444        0.8     0.0714          1
Z4                     0.45     0.5385          0        0.8     0.5714     0.6786
Financing              0.61     0.4615     0.6296        0.8          1        0.5
Purchase               0.39          0     0.5185        0.4          1     0.3214

這個分群結果中的數值是平均值,越靠近0表示越多人沒有這個屬性,越靠近1表示越多人有這個屬性。根據該篇文章的解釋,我們可以為這5群結果進行以下的描述:

  • Cluster 0 (26人):本群可以稱為「夢想者(Dreamers)」,他們什麼都想要,但是卻不買。
  • Cluster 1 (27人):這群是「M5的愛好者(M5 Lovers)」,因為他們傾向於直接走向M5,並且忽略3系列或Z4。儘管如此,他們購買率並不高,只有52%。也許代理商可以安排更多M5的銷售人員來提升M5的銷量。
  • Cluster 2 (5人):該群因為人數太少而可以被稱為「可忽略 (Throw Away)」,而且他們的行為也看不太出特色。
  • Cluster 3 (14人):本組可稱為「BMW寶寶 (BMW Babies)」,因為他們最後總能夠買車並且符合貸款資格。本群可以看到一些有趣的事情:他們看起來會到處去看不同的車子,然後轉向去用電腦搜尋代理商有的車子,最後傾向於購買M5或是Z4,而不是3系列。這一群讓代理商知道他們應該考慮在各樓層安排電腦搜尋站,或是讓M5或Z4在搜尋結果中更加突出。只要客戶決定要購車時,他們就能很快地完成購車手續。
  • Cluster 4 (28人:本組可稱為「BMW入門 (Starting Out With BMW)」,因為他們只看3系列,而總是不看更貴的M5。他們總是走進展示間直接選擇,而不是到處去看車,也不仰賴電腦搜尋結果。只有50%的人符合貸款資格,而僅有32%的人最後完成交易。這個意思是說,這些購買他們第一輛BMW的顧客很明確地知道他們要的類型,也就是3系列,而且他們也希望容易貸款來購買。代理商可以考慮降低貸款標準或是降低3系列的價格。

在實務操作上,如果分組最後的結果讓你覺得難以解釋的話,可以試著回到「4. 設定分組數量」改變分組數量,也許不同的分法會讓你看到不同的觀點。

7. 匯出結果 / Save Output

最後,我們會想要知道那些顧客是被分在那些組裡面。雖然前面我們在分群時排除了可辨識顧客資料的「CustomerID」,但其實還是有辦法可以看到顧客與分群結果的對應。

image

在左下角的「Result list」中選擇剛剛分群的結果,按右鍵開啟「Visualize cluster assignments (產生分群結果圖表)」。

image

在「Weka Clusterer Visualize」對話視窗中點下「Save」按鈕。

image

這時候會將分群結果儲存成arff檔案,請選擇一個位置保存它吧。

image

arff格式是純文字檔案,我們可以用Notepad++來開啟。分群結果跟原本的bmw-browsers.arff看起來很像,但是多了兩個屬性:

  • Instance_number:實體編號,類型是數字。
  • Cluster:分群結果。因為我們設定分成5群,所以資料只會有cluster0、cluster1、cluster2、cluster3、cluster4這五種。

而我們在意的只有第二個屬性「CustomerID」跟最後的屬性「Cluster」。從@data之後的資料就能看到CustomerID對應的分群結果,每一行代表一位客戶。舉例來說,客戶編號1對應到cluster 0,客戶編號4對應到cluster 3。

8. 將arff轉換成csv / Convert arff format to csv format

對很多人來說arff格式的檔案很不容易處理,大家還是比較習慣用試算表工具,如Excel來處理資料。要將arff格式轉換成試算表格式也不困難,看看以下怎麼操作吧。

image

首先選取包含「@data」上面的文字。

2016-12-05_172307

刪除掉。

image

再來把檔案另存新檔,記得將副檔名存為「csv」。

image

接著我們就可以用Excel來開啟這個csv檔案了。


結語 / In Closing

網路上介紹分群的文章很多,為什麼我還要多此一舉寫這樣的一篇呢?這是因為雖然單純的演算法介紹或是原理介紹的文章雖多,但是一步一步操作Weka的教學卻很少,而且更少人在講分群之後怎麼看到樣本跟分群結果的對應。所以我想還是把它們整理一下,未來要介紹怎麼用K Means分群的時候也比較方便。

image

然而K Means分群演算法最大的問題在於如何決定分群數量K,而Weka中有另一個改良式的分群方法叫做XMeans,可以讓人先決定分群的區間,像是最少5最多10,然後由演算法決定最佳的分群數量。以這個例子來說,XMeans給出的最佳分群數量就是6群。但是這樣子的分群結果不一定容易解釋,就看個人如何取捨了。

總共33 則留言 ( 我要發問 , 隱藏留言 顯示留言 )

  1. 回覆刪除
    回覆
    1. 回覆刪除
  2. 回覆刪除
    回覆
    1. 回覆刪除
    2. 回覆刪除
    3. 回覆刪除
  3. 回覆刪除
  4. 回覆刪除
  5. 回覆刪除
    回覆
    1. 回覆刪除
    2. 回覆刪除
  6. 回覆刪除
    回覆
    1. 回覆刪除
  7. 回覆刪除
    回覆
    1. 回覆刪除
    2. 回覆刪除
    3. 回覆刪除
    4. 回覆刪除
    5. 回覆刪除
  8. 回覆刪除
    回覆
    1. 回覆刪除
  9. 回覆刪除
  10. 回覆刪除