日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

r语言kmodes_聚类分析——k-means算法及R语言实现

發布時間:2023/12/1 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 r语言kmodes_聚类分析——k-means算法及R语言实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我們知道『物以類聚,人以群分』,這里并不是分類問題,而是聚類問題。

兩者主要區別在于,分類是將一組數據根據不同的類區分,已經知道有哪些類,也就是數據已經有了類的標簽。而聚類是一種事先不知道有多少類,通過算法學習,分出來了一些類別。

分類跟聚類也分別是有監督學習和無監督學習的范疇。

k-means算法

k-means是聚類算法中最簡單的,也是最常用的一種方法。

這里的

指的是初始規定要將數據集分成的類別,means是各類別數據的均值作為中心點。

算法步驟:

1.初始設置要分成的類別

,及隨機選取數據集中

個點作為初始點

2.根據相似性度量函數將其他點與初始點做比較,離哪個值近就分到哪一個類

3.將分出來的

類求取平均值,作為新的中心點

4.重復步驟,直到中心點不變或者變化不大(即收斂)或者達到規定的迭代次數則停止

相似性度量有多種函數,一般使用歐式距離。相似性度量函數

補充:為什么會使用均值作為中心點的選擇呢?

這主要是因為目標函數的設置決定的。我們使用誤差平方和作為聚類的目標函數,即

這里的

表示

個類,

表示第

個中心,

是歐幾里得距離。

對第

個中心

求解,最小化上述公式。對上述公式求導并令導數等于0,得到如下公式:

可以看到,每個簇中能夠讓目標函數達到最小的中心點就是這個簇的均值。

舉例說明

下面以一個具體例子來說明k-means算法步驟。數據集如下。

因為是二維的,可以畫下散點圖看下。

直觀來看,這個數據集是有兩類的,也就是兩個簇,一個是在右上角,一個是在左下角。可以使用算法看下是否符合預判。

Step1:

那我們可以設置

為2,初始中心值就選

Step2:

下面就是計算剩下的點到中心點的距離,使用歐氏距離。

比較之后,發現剩下的點到

距離更近,那現在有了兩類:

Step3:

然后重新選擇中心點,第一類只有一個值,則仍然為

。第二類按照5個點的均值作為中心點

: ((1+3+8+9+10)/5, (2+1+8+10+7)/5) = (6.2,5.6)。重新計算距離。

現在分成的兩類為

Step4:

Step2和Step3中心點相差較大,重新選擇中心點。

這次就是兩個類中數據的均值作為新的中心點了。分別為

現在仍然是兩類

繼續下去,中心點不變,也就是達到收斂了。分成的兩類就是上面兩組,與散點圖觀察到的一致。

R語言實現

使用R語言自帶的函數及可視化包。

數據及包的準備

# 載入數據

data("USArrests")

# 數據標準化

data

head(data)

# 可視化包

library(factoextra)

確定最佳聚類數,選擇坡度不明顯的點作為聚類數。

# 確定聚類數

fviz_nbclust(data, kmeans, method = "wss") + geom_vline(xintercept = 4, linetype = 2)

# 另一種方法

wss

for (i in 2:15)

wss[i]

plot(1:15, wss, type="b", xlab="Number of Clusters",ylab="Within groups sum of squares")

可以選擇4個類別。下面進行聚類。

#利用k-mean是進行聚類

km

# 查看結果

print(km)

查看結果并分析數據:print(km)

K-means clustering with 4 clusters of sizes 13, 16, 8, 13

Cluster means:

Murder Assault UrbanPop Rape

1 0.6950701 1.0394414 0.7226370 1.27693964

2 -0.4894375 -0.3826001 0.5758298 -0.26165379

3 1.4118898 0.8743346 -0.8145211 0.01927104

4 -0.9615407 -1.1066010 -0.9301069 -0.96676331

Clustering vector:

Alabama Alaska Arizona Arkansas

3 1 1 3

California Colorado Connecticut Delaware

1 1 2 2

Florida Georgia Hawaii Idaho

1 3 2 4

Illinois Indiana Iowa Kansas

1 2 4 2

Kentucky Louisiana Maine Maryland

4 3 4 1

Massachusetts Michigan Minnesota Mississippi

2 1 4 3

Missouri Montana Nebraska Nevada

1 4 4 1

New Hampshire New Jersey New Mexico New York

4 2 1 1

North Carolina North Dakota Ohio Oklahoma

3 4 2 2

Oregon Pennsylvania Rhode Island South Carolina

2 2 2 3

South Dakota Tennessee Texas Utah

4 3 1 2

Vermont Virginia Washington West Virginia

4 2 2 4

Wisconsin Wyoming

4 2

Within cluster sum of squares by cluster:

[1] 19.922437 16.212213 8.316061 11.952463

(between_SS / total_SS = 71.2 %)

Available components:

[1] "cluster" "centers" "totss" "withinss"

[5] "tot.withinss" "betweenss" "size" "iter"

[9] "ifault"

第一行結果是4類,每個類別的數據個數。

下面是聚類的中心點。

然后是每個值所屬哪個類別。

Within cluster sum of squares by cluster:是組間距離平方和。

聚類的目的是組內距離小,組間距離大。between_SS / total_SS就是組間距離占總距離的占比,越接近1越好。

聚類可視化

fviz_cluster(km, data = data,

palette = c("#2E9FDF", "#00AFBB", "#E7B800", "#FC4E07"),

ellipse.type = "euclid",

star.plot = TRUE,

repel = TRUE,

ggtheme = theme_minimal()

)

k-means不足

①需要確定分類數

,一般根據經驗或者已經有預判,其次是根據上面的方法確定分類數量。

②初始值的選取會影響最終聚類效果,并且目標函數

可能會達到局部最優解。這個有相應的改進方法,包括k-means++和二分k-means。

③對于類似下面圓形的數據集,聚類效果很差,主要是算法原因。所以還有其他的聚類算法,比如基于密度的方法等。

不過k-means實現簡單,易于理解,應用很廣泛。

總結

以上是生活随笔為你收集整理的r语言kmodes_聚类分析——k-means算法及R语言实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。