層次聚類
- stats::hclust
stats::dist
R使用dist()函數來計算距離,Usage: dist(x, method = "euclidean", diag = FALSE, upper = FALSE, p = 2)
- x: 是樣本矩陣或者數據框
- method: 表示計算哪種距離
-
- euclidean 歐幾里德距離,就是平方再開方。
- maximum 切比雪夫距離
- manhattan 絕對值距離
- canberra Lance 距離
- minkowski 明科夫斯基距離,使用時要指定p值
- binary 定性變量距離
- diag: 為TRUE的時候給出對角線上的距離
- upper: 為TURE的時候給出上三角矩陣上的值.
base::scale
R使用scale()函數對數據矩陣做中心化和標准化變換, Usage: scale(x, center = TRUE, scale = TRUE)
base::sweep
R語言中使用sweep() 函數對矩陣進行運算. Usage: sweep(x, MARGIN, STATS, FUN = "-", check.margin = TRUE, ...)
- MARGIN: 為1,表示行的方向上進行運算,為2表示列的方向上運算。
- STATS: 是運算的參數
- FUN為: 運算函數,默認是減法
stats::hclust
Usage:hclust(d, method = "complete", members = NULL)
- d:為距離矩陣
- method: 表示類的合並方法
-
- single: (單聯動)最短距離法: 一個類中的點和另一個類中的點的最小距離
- complete: (全聯動) 最長距離法: 一個類中的點和另一個類中的點的最大距離
- median: (平均聯動) 中間距離法: 一個類中的點和另一個類中的點的平均距離
- mcquitty: 相似分析法
- average: 平均距離法,測量兩類每對觀測間的平均距離
- centroid:重心法, 兩類間的距離定義為兩類重心之間的距離
- ward:離差平方和法,基於方差分析思想,如果分類合理,則同類樣品間離差平方和應當較小,類與類間離差平方和應當較大
示例 代碼:
> library(stats) > data=iris[,-5] > dist.e=dist(data,method='euclidean') > iris.hc <- hclust( dist.e,"single") > plot( iris.hc, hang = -1,cex=.8) #hang小於0時,樹將從底部畫起
效果圖如下:
用矩形畫出分為3類的區域
> #用矩形畫出分為3類的區域
> re <- rect.hclust(iris.hc, k = 3) > re [[1]] [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 [47] 47 48 49 50 [[2]] [1] 118 132 [[3]] [1] 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 [36] 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 119 120 121 [71] 122 123 124 125 126 127 128 129 130 131 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150
效果圖
輸出結果
> ##得到分為3類的數值,輸出結果
> iris.id <- cutree(iris.hc, 3) > table(iris.id, iris$Species) iris.id setosa versicolor virginica 1 50 0 0 2 0 50 48
3 0 0 2
BIRCH
BIRCH(Balanced Iterative Reducing and Clustering Using Hierarchies)全稱是:利用層次方法的平衡迭代規約和聚類。BIRCH是一種聚類算法,它最大的特點是能利用有限的內存資源完成對大數據集的高質量的聚類,同時通過單遍掃描數據集能最小化I/O代價。BIRCH算法有如下特點:
- BIRCH試圖利用可用的資源來生成最好的聚類結果,給定有限的主存,一個重要的考慮是最小化I/O時間。
- BIRCH采用了一種多階段聚類技術:數據集的單邊掃描產生了一個基本的聚類,一或多遍的額外掃描可以進一步改進聚類質量。
- BIRCH是一種增量的聚類方法,因為它對每一個數據點的聚類的決策都是基於當前已經處理過的數據點,而不是基於全局的數據點。
- 如果簇不是球形的,BIRCH不能很好的工作,因為它用了半徑或直徑的概念來控制聚類的邊界。
BIRCH算法中引入了兩個概念:聚類特征和聚類特征樹,詳細參見:http://www.cnblogs.com/tiaozistudy/p/6129425.html
說明:birch 包在cran上很多年沒更新,如果要使用,必須安裝R3.0以前的版本,此處先略過,參見:https://cran.r-project.org/src/contrib/Archive/birch/
CURE
CURE(Clustering Using REprisentatives)算法即使用代表點的聚類方法。該算法先把每個數據點看成一類,然后合並距離最近的類直至類個數為所要求的個數為止。CURE算法將傳統對類的 表示方法進行了改進,回避了用所有點或用中心和半徑來表示一個類,而是從每一個類中抽取固定數量、分布較好的點作為描述此類的代表點,並將這些點乘以一個 適當的收縮因子,使它們更靠近類的中心點。將一個類用代表點表示,使得類的外延可以向非球形的形狀擴展,從而可調整類的形狀以表達那些非球形的類。另外, 收縮因子的使用減小了嗓音對聚類的影響。CURE算法采用隨機抽樣與分割相結合的辦法來提高算法的空間和時間效率,並且在算法中用了堆和K-d樹結構來提 高算法效率
說明:未找着下載包
參考資料:
- http://www.cnblogs.com/tiaozistudy/p/6129425.html
- https://www.douban.com/note/274189091/
- http://artax.karlin.mff.cuni.cz/r-help/library/birch/html/birch.html
- https://www.douban.com/note/514091031/