R語言Kmeans聚類、PAM、DBSCAN、AGNES、FDP、PSO粒子群聚類分析iris數據結果可視化比
全文鏈接:http://tecdat.cn/?p=32007
原文出處:拓端數據部落公眾號
本文以iris數據和模擬數據為例,幫助客戶了比較R語言Kmeans聚類算法、PAM聚類算法、 DBSCAN聚類算法、 AGNES聚類算法、 FDP聚類算法、 PSO粒子群聚類算法在 iris數據結果可視化分析中的優(yōu)缺點。結果:聚類算法的聚類結果在直觀上無明顯差異,但在應用上有不同的側重點。在 研究中,不能僅僅依靠傳統的統計方法來進行聚類分析,而應該采用多種數據挖掘手段相結合,綜合利用各種方法的優(yōu)勢,分析不同的數據集,從中找到適合自己研究需要的聚類分析方法。
查看數據
head(y)##?????????? y 1????? y 2????? y 3????? y 4????? y 5????? y 6????? y 7 ?## [1,] 2.386422 1.528006 2.013216 1.522790 2.530115 2.127977 2.654109 ?## [2,] 1.740713 2.013977 2.322683 1.956941 1.799946 2.298104 2.146921 ?## [3,] 2.072196 2.129213 2.087725 2.146289 2.213800 2.459264 2.319424 ?## [4,] 2.418096 1.852121 1.668246 2.418176 2.513029 2.048056 1.996828 ?## [5,] 1.485875 2.072700 1.921772 1.645422 1.655471 1.840675 2.368683 ?## [6,] 2.111412 1.868223 2.022289 2.310057 1.716986 2.031257 2.069675 ?##?????????? y 8????? y 9???? y 10 ?## [1,] 1.964454 2.050723 1.755493 ?## [2,] 2.255674 1.836552 2.432906 ?## [3,] 1.859537 1.527330 2.227598 ?## [4,] 1.460083 2.033105 1.743962 ?## [5,] 2.364364 2.123679 1.741008 ?## [6,] 2.211410 2.073793 1.424886
Kmeans算法聚類
k均值聚類算法(k-means?clustering algorithm)是一種迭代求解的聚類分析算法,其步驟是,預將數據分為K組,則隨機選取K個對象作為初始的聚類中心,然后計算每個對象與各個種子聚類中心之間的距離,把每個對象分配給距離它最近的聚類中心。 聚類數為2,將數據聚成2個類別
查看模型結果
?summary(cl)##????????????? Length Class? Mode?? ?## cluster????? 2000?? -none- numeric ?## centers??????? 20?? -none- numeric ?## totss?????????? 1?? -none- numeric ?## withinss????? ??2?? -none- numeric ?## tot.withinss??? 1?? -none- numeric ?## betweenss?????? 1?? -none- numeric ?## size??????????? 2?? -none- numeric ?## iter??????????? 1?? -none- numeric ?## ifault????????? 1?? -none- numericpch1=rep("1",1000)#類標號
pch2=rep("2",1000)
PAM算法聚類
pam聚類算法?PAM?(Partitioning Around Medoids) 聚類算法屬于基于質心的聚類算法,它是K-Medoids算法的一種變體。
DBSCAN算法聚類
DBSCAN(Density-Based Spatial Clustering of Applications with Noise,具有噪聲的基于密度的聚類方法)是一種很典型的密度聚類算法。
ds<-dbscan(y
其中黑色的2代表分類錯誤的第2個類別,因此可以看到該數據集中dbscan的分類結果最好。
iris數據
Iris數據集是常用的分類實驗數據集,由Fisher, 1936收集整理。Iris也稱鳶尾花卉數據集,是一類多重變量分析的數據集。數據集包含150個數據樣本,分為3類,每類50個數據,每個數據包含4個屬性??赏ㄟ^花萼長度,花萼寬度,花瓣長度,花瓣寬度4個屬性預測鳶尾花卉屬于(Setosa,Versicolour,Virginica)三個種類中的哪一類。
#查看數據 ?
?head(y)##?? Sepal.Length Sepal.Width Petal.Length Petal.Width Species ?## 1????????? 5.1???????? 3.5????????? 1.4???????? 0.2? setosa ?## 2????????? 4.9???????? 3.0????????? 1.4???????? 0.2? setosa ?## 3????????? 4.7???????? 3.2????????? 1.3???? ????0.2? setosa ?## 4????????? 4.6???????? 3.1????????? 1.5???????? 0.2? setosa ?## 5????????? 5.0???????? 3.6????????? 1.4???????? 0.2? setosa ?## 6????????? 5.4???????? 3.9????????? 1.7???????? 0.4? setosa
Kmeans算法聚類
聚類數為3,將數據聚成3個類別
plot(y[,1:2],col= (cl$cluster
DBSCAN算法聚類
ds<-dbscan(y[,1:4]
結果比較圖
plot(y,col=cl$cluste
AGNES算法
“算法是凝聚的層次聚類方法。AGNES最初將每個對象作為一個簇,然后這些簇根據某些準則被一步一步地合并。例如,在簇A中的一個對象和簇B中的一個對象之間的距離是所有屬于不同簇的對象之間最小的,AB可能被合并。
agn1 <- agnes(votes
pres <- apcluster(neg## create two Gaussian clouds ??## APResult object ?## ?## Number of samples???? =? 150 ?## Number of iterations? =? 138 ?## Input preference????? =? -31.0249 ?## Sum of similarities?? =? -45.0528 ?## Sum of preferences??? =? -124.0996 ?## Net similarity??????? =? -169.1524 ?## Number of clusters??? =? 4 ?## ?## Exemplars: ?##??? 8 64 81 103 ?## Clusters: ?##??? Cluster 1, exemplar 8: ?##?????? 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 48 49 ?##?????? 50 ?##??? Cluster 2, exemplar 64: ?##?????? 51 52 53 55 56 57 59 62 64 66 67 69 71 72 73 74 75 76 77 78 79 84 85
plot(apres, x)
PSO 粒子群聚類算法
“PSO是粒子群優(yōu)化算法(——Particle Swarm Optimization)的英文縮寫,是一種基于種群的隨機優(yōu)化技術,由Eberhart和Kennedy于1995年提出。粒子群算法模仿昆蟲、獸群、鳥群和魚群等的群集行為,這些群體按照一種合作的方式尋找食物,群體中的每個成員通過學習它自身的經驗和其他成員的經驗來不斷改變其搜索模式。
myPSO <- function(x, k, ?w) {
?#創(chuàng)建隨機質心
?centroid_acak <- sample(c(1:length(x[,1])), k, replace = FALSE)
?centroid <- x[centroid_acak,1:length(x)]
?
?#計算歐幾里得距離
?hitung_jarak <- function(x){
? ?sqrt(
? ? ?for(i in 1:length(x)) {
? ? ? ?euclidean <- ((x[i] - centro
FDP 聚類算法
針對密度峰值算法 FDP在找到聚類中心后,分配其余數據時存在的漏洞,提出了基于密度聚類算法 DBSCAN的改進方法。具體做法是求出聚類中心后利用DBSCAN 算法將其余數據分配到正確的類別中,保證了在分配其余數據時考慮到數據和數據之間的關聯性,而不是直接簡單的將所有數據分配到離得最近的那個中心所在的類別中。所提算法和原始FDP算法相比,可處理非凸數據、能得到更好的聚類結果。
fdp<-function(X,G,p=rep(FALSE){ ?if(is.null(TstX)==TRUE) TstX<-X
?n<-nrow(TstX)
?belong<-matrix(
?
?plot(iris,col=cl
最受歡迎的見解
1.R語言k-Shape算法股票價格時間序列聚類
2.R語言基于溫度對城市層次聚類、kmean聚類、主成分分析和Voronoi圖
3.R語言對用電負荷時間序列數據進行K-medoids聚類建模和GAM回歸
4.r語言鳶尾花iris數據集的層次聚類
5.Python Monte Carlo K-Means聚類實戰(zhàn)
6.用R進行網站評論文本挖掘聚類
7.R語言KMEANS均值聚類和層次聚類:亞洲國家地區(qū)生活幸福質量異同可視化
8.PYTHON用戶流失數據挖掘:建立邏輯回歸、XGBOOST、隨機森林、決策樹、支持向量機、樸素貝葉斯模型和KMEANS聚類用戶畫像
9.R語言基于Keras的小數據集深度學習圖像分類