ML: 聚類算法R包-模糊聚類


       1965年美國加州大學柏克萊分校的扎德教授第一次提出了‘集合’的概念。經過十多年的發展,模糊集合理論漸漸被應用到各個實際應用方面。為克服非此即彼的分類缺點,出現了以模糊集合論為數學基礎的聚類分析。用模糊數學的方法進行聚類分析,就是模糊聚類分析。FCM(Fuzzy C-Means)算法是一種以隸屬度來確定每個數據點屬於某個聚類程度的算法。該聚類算法是傳統硬聚類算法的一種改進。

算法流程:

  • 標准化數據矩陣;
  • 建立模糊相似矩陣,初始化隸屬矩陣;
  • 算法開始迭代,直到目標函數收斂到極小值;
  • 根據迭代結果,由最后的隸屬矩陣確定數據所屬的類,顯示最后的聚類結果。

 優點:相比起前面的”硬聚類“,FCM方法會計算每個樣本對所有類的隸屬度,這給了我們一個參考該樣本分類結果可靠性的計算方法,若某樣本對某類的隸屬度在所有類的隸屬度中具有絕對優勢,則該樣本分到這個類是一個十分保險的做法,反之若該樣本在所有類的隸屬度相對平均,則我們需要其他輔助手段來進行分類。

  缺點:KNN的缺點基本它都有

模糊聚類 


  •  cluster::fanny 
  • e1071::cmeans 

cluster::fanny  


 需要R安裝包

install.packages("cluster")

示例代碼:

library(cluster) iris2 <- iris[-5] fannyz=fanny(iris2,3,metric="SqEuclidean")
summary(fannyz)

分類分布: 

> fannyz$clustering [1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 3 2 3 3 3 3 3 3 3 3 3 3 3 3 [66] 3 3 3 3 3 3 3 3 3 3 3 3 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 2 3 2 2 2 2 3 2 2 2 2 2 2 3 2 2 2 2 2 3 2 3 2 3 2 2 3 3 2 2 [131] 2 2 2 3 2 2 2 2 3 2 2 2 3 2 2 2 3 2 2 3

樣本隸屬度

> fannyz$membership [,1]         [,2]         [,3] [1,] 0.996623586 0.0010720343 0.0023043797 [2,] 0.975852543 0.0074979471 0.0166495094 [3,] 0.979825922 0.0064145785 0.0137594999 [4,] 0.967427446 0.0101075228 0.0224650314 [5,] 0.994470355 0.0017679352 0.0037617094 [6,] 0.934574112 0.0206196544 0.0448062334 [7,] 0.979491667 0.0065045178 0.0140038150 [8,] 0.999547263 0.0001412048 0.0003115325 [9,] 0.930379787 0.0219024180 0.0477177955 .......

 

 圖示顯示 :clusplot(fannyz)

結果顯示

> table(iris$Species,fannyz$clustering) 1  2  3 setosa 50 0 0 versicolor 0 3 47 virginica 0 37 13

 

e1071::cmeans 


 安裝包代碼: 

install.packages("e1071")

 示例代碼:

> library("e1071") > x <- iris[-5] > result1<-cmeans(x,3,50) > result1 Fuzzy c-means clustering with 3 clusters Cluster centers: Sepal.Length Sepal.Width Petal.Length Petal.Width 1     5.888999    2.761093     4.364049   1.3973654
2     6.775092    3.052406     5.646882   2.0535855
3     5.003966    3.414086     1.482821   0.2535487 Memberships: 1            2           3 [1,] 0.0023043721 0.0010720485 0.996623579 [2,] 0.0166481906 0.0074975084 0.975854301 [3,] 0.0137586391 0.0064142953 0.979827066 .......

統計結果:

> table(iris$Species,result1$cluster) 1  2  3 setosa 0 0 50 versicolor 47  3 0 virginica 13 37  0

 3d效果顯示示例

#install.packages("scatterplot3d")
library(scatterplot3d) scatterplot3d(result1$membership, color=result1$cluster, type="h", angle=55, scale.y=0.7, pch=16, main="Pertinence")
 
        

 

 

參考資料:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM