聚類分析:聚類分析指將物理或抽象對象的集合分組為由類似的對象組成的多個類的分析過程。它是一種重要的人類行為。 聚類分析的目標就是在相似的基礎上收集數據來分類。聚類源于很多領域,包括數學,計算機科學,統計學,生物學和經濟學。在不同的應用領域,很多聚類技術都得到了發展,這些技術方法被用作描述數據,衡量不同數據源間的相似性,以及把數據源分類到不同的簇中。
聚類的方法: 1、按聚類結果分:覆蓋型和非覆蓋型,若每個數據點都至少屬于一個類,則為覆蓋聚類,否則為非覆蓋聚類 2、按聚類變量類型分:數值型、分類型和混合型 3、按聚類原理分:分割聚類、層次聚類、基于密度的聚類和網格聚類
數值型觀測點與觀測點的聚類距離計算方式有很多種,有一篇博文【R語言:計算各種距離】專門介紹,這里只簡單的說一下有什么: 歐氏距離(Euclidean):
K-Means聚類: 按上面的劃分,它屬于覆蓋型數值分割聚類,使用R中的經典數據集iris來進行分析。
#使用數據集irisdata(iris)#使用kmeans進行K-Means聚類,K-Means使用的是歐氏距離來計算km<-kmeans(iris[1:4],3)#用table看一下聚類出來的結果和原有分類是否一致table(km$cluster,iris$Species)#結果得出來的分類相對來說較為理想,只有部分重疊了,可以使用fpc包中的plotcluster函數來作圖library(fpc)plotcluster(iris[1:4],km$cluster)層次聚類 層次聚類屬于覆蓋型數值分層聚類,與K-Means不同的是,K-Means是點與點的距離計算,而層次聚類在這基礎上,再進行點與小類,小類與小類間距離的測度。 層次聚類需要先計算其距離矩陣,即點與點的測量,距離矩陣的計算方式與K-Means一致,也有歐氏距離等,然后進行點與小類,小類與小類的距離的測量,其計算方式有以下幾種: 1、重心法(centroid):觀測點與小類的距離,是該觀測點與小類重心間的距離 2、最近鄰法(single):觀測點與小類的距離,是該觀測點與小類中所有觀測點距離中最小值 3、組間平均鏈鎖法(average):觀測點與小類的距離,是該觀測點與小類中所有觀測點距離的平均值 3、組內平均鏈鎖法(complete):觀測點與小類間的距離,是該觀測與小類中所有觀測點以及自身所在小類內各觀測點距離的平均值,即不單計算該觀測點與目標小類,還要計算與自身所有小類的各觀測點的距離,然后取平均,若該觀測點沒有被分類,則與組間平均鏈鎖法一致。 4、離差平方和法(ward):使兩小類的離差平方和增加最小的先合并。
#同樣,先引入iris數據data(iris)#計算觀測點距離D<-dist(iris[,1:4])#分類,使用默認方式“complete”,即組內平均鏈鎖法hc<-hclust(D)#在第三層砍樹,得到各觀測點的第三層分類IDhc.id<-cutree(hc,3)#與原有數據比較table(hc.id,iris$Species)#可以嘗試各種距離,看一下哪種距離組合得到的分類與原分類最為吻合hc.id<-cutree(hclust(dist(iris[,1:4],method="euclidean")),3)table(hc.id,iris$Specieshc.id<-cutree(hclust(dist(iris[,1:4],method="maximum")),3)table(hc.id,iris$Species)hc.id<-cutree(hclust(dist(iris[,1:4],method="manhattan")),3)table(hc.id,iris$Species)hc.id<-cutree(hclust(dist(iris[,1:4],method="canberra")),3)table(hc.id,iris$Species)hc.id<-cutree(hclust(dist(iris[,1:4],method="binary")),3)table(hc.id,iris$Species)hc.id<-cutree(hclust(dist(iris[,1:4],method="minkowski")),3)#還有重心法,最近鄰法等等,這里不寫代碼了。簡單的聚類分析至此結束,本來還有個兩步聚類法,但那個R包“brich”不更新了,只能用舊版的R來運行,就不折騰了。
新聞熱點
疑難解答