数据挖掘学习05 - 使用R对文本进行hierarchical cluster并验证结果
本文目的
最近一直在使用R進行hcluster計算,主要采用了一些R自帶的距離公式和cophenetic距離驗證聚類的質量。其中R自帶的hclust方法不支持cosine函數,如果需要下載R的擴展,要下載許多關聯的庫,所以自己編寫了一個簡單的cosine函數,并且使用了R的proxy擴展(距離計算框架),計算向量距離。內容涉及比較多,所以記錄一下,作為備忘。
采用R計算hclust
步驟一:準備數據。采用read.table函數,讀取外部文件,實驗文件這里下載。
cd = read.table("d:/cluster_data.txt", header = TRUE); attributes(cd);截圖如下:
cd是一個特征舉證,每一行是文檔的id和此文檔的特征向量,代表一個文本,列代表的是詞語,這里用wN代替。
?
步驟二:計算文本之間的距離矩陣。距離矩陣用作度量聚類之間的相近程度。常用的距離公式有歐式距離,manhattan距離。計算方法如下:
cds = dist(cd, method="euclidean") attributes(cds)截圖如下:
?
步驟三:計算層級聚類。常用的聚類方式有三種,single,complete和average。
- single: 兩個聚類之間最近的點作為聚類的距離
- complete:兩個聚類之間最遠的點作為聚類的距離
- average:將聚類中的所有向量之和的平局向量作為聚類中心點,中心點最近的聚合成一類。
averge聚類的效果介于single和complte之間,如下面命令,
cave = hclust(cds, method="average") plot(cave,hang=-1)下面聚類后的依賴樹:
?
步驟四:驗證聚類。層級聚類采用cophenetic distance用于度量聚類的效果(具體什么是cophenetic disctance可以參見Introduction to Data Mining by Pang-Ning Tan & Michael Steinbach & Vipin Kumar: Chapter 8.5.4)。R提供了此函數的實現,所以可以直接調用cophenetic函數驗證結果,此函數值是介于-1~1之間,越大,說明聚類效果越好。命令如下,
cop = cophenetic(cave) cor(cop, cds)結果如下:
采用余弦定理cosine計算文本之間的距離
余弦定理可以計算文本向量的相似度,吳軍先生的數學之美系列描述過此應用。但是,上面提到的dist方法不知此余弦公式。嘗試過使用其他擴展中的相關實現,但是無法直接使用。最后找到一個解決方案,使用R擴展庫proxy提供的dist計算框架,然后加入加入自己的cosine的簡單實現,如果添加R擴展,可以參見這里。自定義cosine函數如下:
cosine = function(a,b) { len = (sqrt(a %*% a)*sqrt(b %*% b)); if (len == 0) { 0; } else { (a %*% b)/len; } }(是不是寫法有點像JS)
定義好cosine后,加載proxy庫,
library(proxy)計算距離方法與上面一樣,只是method的值為cosine,如下
cds = dist(t,method="cosine")注意,一定要加引號,否則調用的是sine。計算聚類的方式與上面一樣,這里不再重復。
所有距離方法和聚類方法的測試腳本
disFunc = c("euclidean", "maximum", "manhattan" , "canberra", "binary", "minkowski"); #disFunc = c("euclidean", "cosine"); cluFunc = c("complete", "single", "average", "ward", "mcquitty", "median", "centroid"); qc = read.table("d:/cluster_data.txt", header = TRUE); for (dis in disFunc) { for (clu in cluFunc) { qcDis = dist(qc, method=dis); c = hclust(qcDis, method=clu); cop = cophenetic(c); r = cor(cop,qcDis); print(paste(dis, clu, r, sep=" ")); } }運行結果如下:
實驗總結
實驗過程中,發現距離公司相同的情況下,average的評測結果一般是最好的。不同距離公式的同一種聚類方式沒有比較意義,比如即使euclidean的average方式比manhattan的average的驗證結果低,但是并不意味前者的聚類結果比后者差,因為聚類評測都是根據統一中方法的距離公司計算相關系數,所以沒有比較性。
相關資料
- proxy框架與自定義距離函數: http://stackoverflow.com/questions/7482797/how-to-specify-other-method-for-dist-function-in-r
- Cluster Analysis : Toturial with R: http://cc.oulu.fi/~jarioksa/opetus/metodi/sessio3.pdf
- Introduction to Data Mining by Pang-Ning Tan & Michael Steinbach & Vipin Kumar: Chapter 8.5.4
- 數學之美十二 余弦定理和新聞分類: http://www.google.com.hk/ggblog/googlechinablog/2006/07/12_4010.html
轉載于:https://www.cnblogs.com/bourneli/archive/2012/10/30/2746996.html
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的数据挖掘学习05 - 使用R对文本进行hierarchical cluster并验证结果的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Linux】——常见的rc的含义
- 下一篇: Entropy Broker 2.0 发