:::

自動決定最佳化分群數量:層疊K平均分群法 / Determin the Optimal Number of Clusters: Cascade K-means

image

在資料探勘課程常教的K平均法雖然好用,但它最大的問題在於,到底該如何決定分群數量K呢?幸好我們還有其他的分群演算法可以選擇。Weka中另一個分群演算法層疊K平均分群法(Cascade K-means)採用建立大量不同分群數量的做法,評估每一次分群結果的Calinski-Harabasz指標(CH指標),找出組內距離最短、組間距離最長的最佳分群數量。我在資料聚類:分群分群與分類的整合應用:無監督分類器都有使用層疊K平均分群法來自動決定分群數量,這篇就讓我們在Weka中使用層疊K平均分群法來進行分群,並使用Weka分群結果分析器來試著解釋分群結果吧。


資料集 / Data set

image

image

請下載CSV格式檔案,待會會用到。

這份資料集包含了47筆資料,除了第一欄「工作編號」之外,其他欄位則是個別調查了「合約期間」、「第1年調薪   第2年調薪   第3年調薪   生活津貼調整  每週工時」、「退休金規劃   待命薪資」、「工作轉換補助  允許進修」、「法定假日」、「帶薪年假」、「殘廢補助」、「牙醫補助」、「喪事補助」、「健保補助」等16個變項的結果。

有些變項是數值的連續變項,像是調薪;有些變項是類別變項,像是生活津貼調整、退休金規劃。裡面也很多缺漏值,以「?」表示。

我們能夠從這樣混亂的資料中看出什麼模式嗎?這種時候,你需要的就是分群技術了。

環境配置 / Environment: Weka

安裝Weka / Install Weka

image

我們將使用免費的資料探勘工具Weka來進行分群,在這裡使用的是Weka 3.8版。

套件安裝:層疊K平均分群法 / Install package: cascadeKMeans

image

Weka預設並沒有內建層疊K平均分群法,我們必須要透過Weka的套件安裝功能來新增層疊K平均分群法:

中文環境 / File encoding

最後,因為資料本身含有中文字,所以必須修改Weka的設定使其能夠正常顯示中文。

環境準備好了之後,我們就要來操作Weka進行分群囉。


Step 1. 載入資料 / Open file

image

開啟Weka,在Weka GUI Chooser中,選擇Explorer。

image

按下左上角的「Open file…」。

image

現在Files of Type選擇「CSV data files (*.csv)」,這時候才能顯示CSV格式的檔案,然後按下右下角的「Open」。

image

如果看到左下角的Attributes有正常載入17個特徵變項,就代表檔案順利開啟了。這個階段也就到這邊為止。


Step 2. 分群 / Cluster

接著我們要來為資料進行分群。

分群設定 / AddCluster

image

請按下Filter底下的Choose。

image

選擇「weka.filters.unsupervised.attribute.AddCluster」。

image

用滑鼠左鍵點下粗體字「AddCluster」,進入AddCluster的設定。

AddCluster設定 / AddCluster configuration

image

在clusterer的右邊按下「Choose」,選擇「weka.clusterers.CascadeSimpleKMeans」。

image

在ignoredAttributeIndices裡面輸入1,表示「編號1的特徵(也就是工作編號)不納入分群中」。

image

按下clusterer旁邊的粗體字「CascadeSimpleKMeans」,開啟進階設定。

CascadeSimpleKMeans設定 / CascadeSimpleKMeans configuration

image

在CascadeSimpleKMeans設定中,最重要的就是「maxNumClusters」(最大分群數量)跟「minNumClusters」(最小分群數量)。層疊K平均分群法會在最大分群數量和最小分群數量之間選擇一個最佳的分群數量。你可以在這裡調整分群數量的範圍,否則層疊K平均分群法會採用預設值,從2到10個分群數量之間選擇最佳分群數量。

image

層疊K平均分群法設定完成後,按下「OK」退出。

image

再按「OK」退出AddCluster的設定。

套用分群 / Apply

image

AddCluster設定完成之後,按下右上角的「Apply」。

image

Weka會建立一個額外的屬性「cluster」來記錄分群結果。讓我們在左下角的Attributes找到最後一個屬性「cluster」,點選它,右邊Selected attribute就會顯示該屬性的細節。可以看到分群結果跑出了4個分群。也就是Weka把這47筆資料分成了4群。

儲存分群結果 / Save

image

接著按下右上角的「Save…」。

image

Files of Type選擇「CSV file: comma separated files (*.csv)」,換一個檔案名稱,然後按下「Save」。

image

這樣就保存了分群結果囉。這樣就順利完成這個階段的操作了。


Step 3. 解釋分群 / Explain cluster result

前面分群結果跑出了4個分群,但這4個分群代表什麼意思呢?我們可以藉助Weka分群結果分析器來解讀分群結果。

接下來就讓我們來看看怎麽操作這個工具吧。

開啟檔案 / Open file

image

請在選擇檔案的地方上傳剛剛取得的分群結果檔。

image

下面的Result就會顯示分群結果的分析表格。

分群結果 / Statistic Result

image

先讓我們來看看Statistic Result表格。

該表格首先先列出筆數,可以看到第3群筆數最多、第2群筆數最少。

藉著可以看到全部資料與每個分群在每個變項的平均數與標準差。若該群的平均值高於全部資料的平均值,則會以綠底表示,否則會以紅底表示。如果該群為全部分群中平均數最高的一群,則會加上綠色框。例如第4群的「合約期間」平均數為2.6667,為四個分群中最高的一群,以綠色框表示。第1群的「第1年調薪」平均值為2.97,為四個分群中最低的一群,以紅框表示。

分群比較表 / Compare Clusters

image

最後的分群比較表更進一步摘要了前面的Statistic Result表格。分群比較表挑出了連續變項的變項,將各分群的變項分成「大於全部資料均值」跟「小於全部資料均值」兩種。以第1群來說,僅有「每週工時」大於全部資料均值,其他變項皆小於全部資料均值。若該變項的均值是為全部分群中最高或最低,則會加上「*」跟顏色表示。例如第1群的「每週工時」為各分群最高的一群,則以「每週工時*」表示。

藉著我們要來仔細審視前面的分群結果中各分群的特性。這裡需要用到推論統計來檢定是不是該分群的此變項真的明顯比較多或比較少。如果是數值的連續變項,應採用變異數分析搭配多重比較;如果是類別變項,應採用卡方獨立性檢定。我們看看下面的做法吧。

比較連續變項:單因子變異數分析 / ANOVA

image

在Result標題下方,按下「NUMERRIC VARIABLES」按鈕,下載所有連續變項的資料。

image

這份資料會抓取所有連續變項的值,然後將變項名稱改為編號「var0」、「var1」等等,最後一個變項則是分群結果「cluster」。我們要把這個資料丟到SPSS去做變異數分析與多重比較。做法可以參考商管研究資料分析 單變量變異數分析這個投影片 (竟然一時間找不到中文的教學文章?之後有時間我再寫一份吧)。

image

將因子設為「cluster」,依變數清單加入所有變數,多重比較檢定(Post Hot檢定)勾選「Scheffe」之後進行分析。

image

分析結果發現var0、var1、var2、var6、var8、var9、var11皆達顯著,表示這些變項之間有明顯的差異。藉著我們要一個一個檢視每個變項的多重比較結果,例如以「var11: 法定假日」為例,多重比較結果表格如下:

image

觀察有星號的結果,可發現第4群的法定假日數量顯著的大於第1群,其他兩群沒明顯差別。

image

回來看看法定假日的分群結果,第4群的12.1429的確明顯大於第1群的10.2呢。

其他變項的分析方法也是以此類推進行。

比較類別變項:卡方獨立性檢定 / Chi-Square test of independence

接下來要針對類別變項進行檢定。

image

在分群結果左邊的變項中,如果是類別變項,就會出現一個下載按鈕,請點選它下載該變項與分群的列聯表。

image

先下載「帶薪年假」變項來做分析吧。

image

接下來要用卡方獨立性檢定計算器進行分析,將CSV檔案上傳之後,下面就會顯示分析結果了。

image

分析結果顯示,不同分群的帶薪年假有顯著的不同,第1群的帶薪年假偏少,第4群偏多,第3群大多都是平均。

其他類別變項的分析也依此類推。

命名分群 / Label clusters

基於上面的分群結果,我們必須要為每個分群訂一個的名稱,賦予其意義。實際上還要結合理論與研究目的來命名,但這裡我就簡單點,照資料特性來命名好了:

  • 第1群的每週工時最長,但合約期短、調薪低、假日少,什麼都少。就叫它「短期工作」好了。
  • 第2群的每週工時較短,每年調薪較多,假日也比較多,筆數最少。就叫它「優質工作」好了,質優量少呢。
  • 第3群筆數最多,雖然第2年跟第3年調薪較少,但是其他的待遇尚可,可惜每週工時較長。就叫它「普通工作」好了,有好有壞呢。
  • 第4群筆數較少,每週工時最短,但假日最多、每年調薪也尚可。就叫它「輕鬆工作」好了,不求錢多、但求清閒呢。

到這裡為止,我們做完了解釋分群的操作囉。


Step 4. 查看每筆資料的分群結果:篩選器 / View each instance in clusters

接下來我們要仔細觀察每一筆資料到底被分到哪一群去。因為這個CSV是以萬國碼UTF8編碼,因此不建議大家使用Excel開啟,Excel只認得早期的Big5編碼,開起來會變成亂碼。我推薦使用LibreOffice CalcGoogle試算表來進行下面步驟。以下我用Google試算表來介紹。

匯入檔案到Google試算表 / Import CSV to Google Spreadsheet

image

點下Weka結果分群分析器中的「NEW SPREEEDSHEET」,或是開啟這個連結,以建立一個新的Google試算表:

image

選擇「檔案」中的「匯入」。

image

選擇「上傳」,然後「從您的電腦中選取檔案」,選擇剛剛的分群結果。

image

使用預設設定即可,按下「匯入」吧。接下來要等待一段時間,請耐心等候。

image

現在我們可以看到分群結果已經順利匯入到Google試算表。你可以查看下面的範例:

使用過濾器 / Filter

image

接著我們要開啟工具列的過濾器。

image

開啟過濾器之後,會看到欄跟列的名稱都有綠色底色,表示現在是在過濾器的檢視畫面。

image

讓我們找到最後一欄「cluster」,點下「cluster」右方的過濾器漏斗圖示,選擇我們要觀看的分群。舉例來說,我們對「優質工作」這個分群非常感興趣,因此我們現在只想看第2群cluster2,那就只保留cluster2打勾,其他分群取消打勾,然後按下「確定」。

image

這樣就會留下7筆皆為cluster2的資料,這些就是被分為「優質工作」的工作內容。

到這裡為止,我們完成了整個層疊K平均分群法的分群操作與結果解釋囉。


結語:沒有最佳的分群數量 / Conclusion: What is the optimal number of clusters?

這篇展示了使用層疊K平均分群法自動決定分群數量,然後使用Weka分群結果分析器來解釋分群結果,最後使用Google試算表來看到分群的細節。看到這裡,大家應該覺得很安心,這樣應該就夠了吧。

image

可惜的是,層疊K平均分群法幫你決定的分群數量,不一定是最佳的分群。層疊K平均分群法只會使用Calinski-Harabasz指標(CH指標)來找出最佳分群數量,但真正的最佳分群結果,其實是能夠用於解釋你研究結果、回答你的研究問題、讓你更容易理解資料的結果。

image

舉例來說,我在Weka的K Means分群演算法使用教學:SimpleKMeans中使用的BMW購買行為資料中,若使用層疊K平均分群法來分群,它只會找出2群,完全令人不知該從何解釋起。但原本例子中使用固定的分群數量「5」群,最後就能找出易於解釋的分群結果。

從這裡就可以看到,層疊K平均分群法幫你決定的分群結果並非萬靈丹,只有你能夠解釋的結果才是好的分群結果。

image

如果不滿意層疊K平均分群法預設的2到10個分群數量的話,我會建議將資料分成特徵數量相同的群數。如果蒐集了三個特徵,那就分成3群。這樣可能可以看到每一群都有大於或小於某特徵平均值的結果。但如果特徵數量太多,那也不要超過7個為宜。因為7個以上的分群通常難以解釋,也不易讓人理解。


以上就是使用層疊K平均分群法的整個做法。不知道這對學過K平均法分群的你來說,會有什麼想法呢?如果你能夠掌握這套方法,你會想要拿來分析什麼資料呢?對於分群的解釋,你是否有其他的看法呢?歡迎在下面留言處與我分享你的想法,或是在AddThis分享工具上按讚或分享到Facebook等社群媒體上。感謝你的耐心閱讀,讓我們下次見囉。

0 意見:

留言工具: