資料聚類:分群 / Clustering
這是巨量資料探勘與統計應用課程的投影片「資料聚類:分群」。本單元是屬於系列課程中的「資料敘述級」,處理資料類型主要是「連續」類型資料,不過其實Weka的K平均法也能處理「類別」資料就是了。
本單元的「分群技術」屬於「資料探勘」(data mining)領域的其中一個主題,而此技術是繼前面統計圖表、資料的中心與離度之上,可用於描述多維度、超大量複雜資料的有效方法。如果你拿到一份複雜的資料,不知道該怎麼解析它的時候,不妨先丟進分群跑看看資料會有什麼特徵吧。
我為了這個單元開發了「Weka分群結果分析器」,可以搭配Weka中K平均法分群一起使用。這個單元包含了四個實作學習單,供同學邊看邊練習。
單元大綱 / Outline
- 樞紐分析:RFM模型
- 實作:RFM模型分析
- 資料聚類:分群
- k平均法介紹
- 實作:k平均法之群集分析
- 如何選擇分群數量k?
- 實作:層疊k平均法之群集分析
- 課堂練習:誰是足球強國跟弱國?
投影片 / Slide
- 教學投影片: Google Presentation
- 教學投影片其他格式: Power Point、 PDF、 OpenDocument Presnetation
我以Google簡報的檔案匯出成PPTX,再備份到以下位置:
- SlideShare 、 GitHub 、 OneDrive 、 Box 、 Mega 、 MediaFire 、 Google Drive
學習單 / Worksheets
本單元包含了以下的學習單,請搭配課程投影片一起練習吧。
資料集 / Dataset
本單元用到了以下資料:
- 客戶關係資料(RFM):修改自Derya Birant的「Data Mining Using RFM Analysis」中的例子,大部分都是我使用Google試算表中的XLMiner Analysis ToolPak來產生的隨機資料。
- 國家足球排名:本例子取自「算法杂货铺——k均值聚类(K-means)」,用來解釋分群是很不錯的好例子。
- 圖書館讀者使用記錄:我使用Google試算表中的XLMiner Analysis ToolPak來產生的隨機資料。
線上操作平臺 / Online Workplace
本單元的實作不需使用以下線上雲端服務跟安裝Weka
- Google試算表 (Google雲端硬碟):建議使用Google Chrome瀏覽器開啟
- Weka:Weka下載與套件安裝教學
- Weka分群結果分析器
Weka分群結果分析器 / Weka cluster result anlyzer
本實作會用到一個我自製的分析器:Weka分群結果分析器
測驗 / Examine
本單元最後提供了一份測驗,供同學驗證所學:
小結 / In closing
我之前也有寫過一篇「Weka的K Means分群演算法使用教學:SimpleKMeans」來介紹分群,基本上這個單元是該篇文章的完整版。而且這個單元我介紹的自動決定分群數量的方法是層疊K平均法(Cascade K-Means),比起之前提到的XMeans效果還要好,很多時候它都能給我比較合理的分群數量。
本單元提到的K-Means是描述多維資料的一個很好的起始點,它可以傳達出比單一的中心和離度更多的資訊。另一方面,如果你有一些具體的目標想分析的話,不妨試試我之前講的另外一篇「Weka的HotSpot演算法」看看。
有人可能會問:雖然我這個單元在講K-Means的分群,為什麼前面還要講RFM的分析呢?這是因為其實很多資料探勘課程的介紹都沒能很好的傳達出分群的用處。我受到學長寫的「資料分析鍊金術(七)-消費者分層-RFM模型原理與應用」這篇所影響,才決定先以RFM開場,強調分群在「市場區隔」的應用。這個單元中利用Weka作簡單的資料整理之後,再使用Weka來對同一份資料進行分群,希望同學可以看到資料分析方法的轉變。
就我個人而言,這是我覺得比較有趣的資料分析技術單元。不過就課程結果來看,好像對同學來說還是覺得挺複雜的就是了。
最後,也許有人可能會感到奇怪。為什麼前面還在講統計圖表、中心跟離度,怎麼這一單元就變成資料探勘的分群了呢?感覺像是把統計課程跟資料探勘課程混為一談了。這是因為我在課程安排上,這些分析技術都被我視為是描述資料使用的「資料敘述級」的一種。實際應用的時候,Weka也會同時呈現資料的直方圖、資料的中心和離度,將這些資訊提供給使用者作初步的判斷,然後再來開始作資料探勘。這些技術在我看來,都是屬於資料分析的一環,也就是現在時髦用詞「大數據分析」的一種。所以這堂課的名字才叫做「巨量資料探勘與統計應用」的喔。
關於課程設計的問題,最後我會在整理目錄的時候再來介紹一下。那這個單元的整理就先到這邊了。
這份教學有個錯誤的地方,在Preprocess的地方,要在右下角「Visualize All」左邊的class選擇器選擇「No class」,然後再來做分群,這樣才正確
回覆刪除https://lh3.googleusercontent.com/-Tkge0-JyMiM/WiYwMvrDFpI/AAAAAAADlMs/g1P-ZJVCkwsIozednXUfuTEaw1bfW-SZQCHMYCw/s0/2017-12-05_13-35-47.png
未來如果有機會再講分群,我再來修正這部分的操作吧
來記錄一下Calinski-Harabasz指標的公式
回覆刪除論文參考來源:
Caliński, T., & Harabasz, J. (1974). A dendrite method for cluster analysis. Communications in Statistics, 3(1), 1-27. doi:10.1080/03610927408827101
CH(K)的公式
https://lh3.googleusercontent.com/-2tktJCRD6nw/Wv6-Va_3ZAI/AAAAAAADvFI/gX82TTSYgYMqZmodaz10_97KXjafuyJdACHMYCw/s0/chk.png
trace B的公式
https://lh3.googleusercontent.com/-WKm5TuROVEw/Wv6-VFlrPRI/AAAAAAADvFA/xZGKsbYo74UALS-weYGTcF1-hFhJHPjmQCHMYCw/s0/traceB.png
traceW的公式
https://lh3.googleusercontent.com/-XAOw9erDF7M/Wv6-VHBC13I/AAAAAAADvFE/FeyAu5Dz3TQMCOxiK2jZI-WfJ_-0RNhmgCHMYCw/s0/traceW.png
有網友提問,分群結果不僅包括了連續數值的資料(例如年齡、身高、體重),還包括了類別資料(例如性別)。
回覆刪除這是正常的嗎?
答案:這是正常的。
K-means的計算方式的確只能處理連續數值資料。
因此,在處理類別資料的時候,我們會將類別資料轉換成虛擬變項。
例如原本的資料爲
性別
男
女
男
轉換成虛擬變項後就成爲
性別=男,性別=女
1,0
0,1
1,0
其中1表示類別變項屬於該類別,0表示不屬於該類別
虛擬變項的做法請看這篇:
https://dasanlin888.pixnet.net/blog/post/34469150-%E8%BF%B4%E6%AD%B8%E5%88%86%E6%9E%90%E4%BD%BF%E7%94%A8%E8%99%9B%E6%93%AC%E8%AE%8A%E9%A0%85%E7%9A%84%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A0%85%EF%BC%88dummy-variab