亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

R語言實(shí)現(xiàn)KMeans聚類算法實(shí)例教程

 更新時(shí)間:2022年07月01日 15:26:43   作者:夢想畫家  
聚類是從數(shù)據(jù)集中對(duì)觀測值進(jìn)行聚類的機(jī)器學(xué)習(xí)方法,下面這篇文章主要給大家介紹了關(guān)于R語言實(shí)現(xiàn)KMeans聚類算法的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下

本文和你一起學(xué)習(xí)無監(jiān)督機(jī)器學(xué)習(xí)算法 ———— kmeans算法,并在R中給詳細(xì)的實(shí)現(xiàn)示例和步驟。

什么是k-means聚類算法

聚類是從數(shù)據(jù)集中對(duì)觀測值進(jìn)行聚類的機(jī)器學(xué)習(xí)方法。它的目標(biāo)是聚類相似觀測值,不同類別之間差異較大。聚類是一種無監(jiān)督學(xué)習(xí)方法,因?yàn)樗鼉H嘗試從數(shù)據(jù)集中發(fā)現(xiàn)結(jié)構(gòu),而不是預(yù)測應(yīng)變量的值。

下面是一個(gè)市場營銷中對(duì)客戶分類的場景,通過下面客戶信息:

  • 家庭收入
  • 住房面積
  • 戶主職業(yè)
  • 據(jù)城區(qū)距離

我們利用這些信息進(jìn)行聚類,可識(shí)別相似家庭,從而能夠識(shí)別某類型家庭可能購買某種產(chǎn)品或?qū)δ撤N類型的廣告反應(yīng)更好。

最常用的聚類算法就是k-means聚類算法,下面我們介紹k-means算法并通過示例進(jìn)行說明。

k-means聚類算法把數(shù)據(jù)集中每個(gè)觀測值分為K個(gè)類別。每個(gè)分類中的觀測值相當(dāng)類似,K類之間彼此差異較大。實(shí)際應(yīng)用中執(zhí)行下列幾步實(shí)現(xiàn)k-means聚類算法:

1.確定K值

首先確定把數(shù)據(jù)集分為幾類。通常我們簡單測試幾個(gè)不同值K,然后分析結(jié)果,確定那個(gè)值更有現(xiàn)實(shí)意義。

2.將每個(gè)觀察結(jié)果隨機(jī)分配到一個(gè)初始簇中,從1到K。

3.執(zhí)行以下步驟,直到集群分配停止變化。

對(duì)于K個(gè)集群中的每一個(gè),計(jì)算集群的質(zhì)心。這僅僅是第k個(gè)簇中觀測的p特征的向量。

將每個(gè)觀測值分配到質(zhì)心最近的簇中。在這里最接近的是用歐氏距離來定義的。

下面通過示例展示R的實(shí)現(xiàn)過程。

R 實(shí)現(xiàn)kmeans聚類算法

加載包

首先加載兩個(gè)包,包括kmeans算法的一些輔助函數(shù)。

library(factoextra)
library(cluster)

加載示例數(shù)據(jù)

對(duì)于本例我們將使用R中內(nèi)置的usarrest數(shù)據(jù)集,該數(shù)據(jù)集包含1973年美國每個(gè)州每10萬居民因謀殺、襲擊和強(qiáng)奸而被捕的人數(shù),以及每個(gè)州居住在城市地區(qū)的人口百分比(UrbanPop)。

#load data
df <- USArrests

#remove rows with missing values
df <- na.omit(df)

#scale each variable to have a mean of 0 and sd of 1
df <- scale(df)

#view first six rows of dataset
head(df)

#                Murder   Assault   UrbanPop         Rape
# Alabama    1.24256408 0.7828393 -0.5209066 -0.003416473
# Alaska     0.50786248 1.1068225 -1.2117642  2.484202941
# Arizona    0.07163341 1.4788032  0.9989801  1.042878388
# Arkansas   0.23234938 0.2308680 -1.0735927 -0.184916602
# California 0.27826823 1.2628144  1.7589234  2.067820292
# Colorado   0.02571456 0.3988593  0.8608085  1.864967207

上面代碼首先加載USArrests數(shù)據(jù)集,刪除缺失值,對(duì)數(shù)據(jù)值進(jìn)行標(biāo)準(zhǔn)化。

尋找最佳聚類數(shù)量

執(zhí)行kmeans聚類算法,我們可以使用內(nèi)置包stat中的kmeans()函數(shù),語法如下:

kmeans(data, centers, nstart)

  • data : 數(shù)據(jù)集名稱
  • centers: 聚類數(shù)量,即選擇k的值
  • nstart: 初始配置個(gè)數(shù)。因?yàn)椴煌某跏紗?dòng)集合可能會(huì)導(dǎo)致不同的結(jié)果,所以建議使用幾種不同的初始配置。k-means算法將找到導(dǎo)致簇內(nèi)變異最小的初始配置。

既然在使用kmeans函數(shù)之前并不確定最優(yōu)聚類數(shù)量,下面通過兩個(gè)圖來輔助我們決定:

1.聚類數(shù)量 vs. 總體平方和

首先使用 fviz_nbclust 函數(shù)創(chuàng)建一個(gè)圖,展示聚類數(shù)量及總體平方和之間的關(guān)系:

fviz_nbclust(df, kmeans, method = "wss")

通常我們創(chuàng)建這類圖形尋找某個(gè)K類對(duì)應(yīng)的平方和值開始彎曲或趨于平緩的肘形。這通常是最理想的聚類數(shù)量。上圖中顯然在k = 4個(gè)時(shí)出現(xiàn)肘形。

2.聚類數(shù)量 vs. 差距統(tǒng)計(jì)

另一個(gè)決定最佳聚類數(shù)量的是使用指標(biāo):差距統(tǒng)計(jì)。它用于比較不同k值聚類差距變化情況。使用cluster包中的clusGap()以及fviz_gap_stat()函數(shù)畫圖:

#calculate gap statistic based on number of clusters
gap_stat <- clusGap(df,
                    FUN = kmeans,
                    nstart = 25,
                    K.max = 10,
                    B = 50)

#plot number of clusters vs. gap statistic
fviz_gap_stat(gap_stat)

從上圖可以看到k=4時(shí),差距統(tǒng)計(jì)最大,這與前面圖的結(jié)果一致。

使用最優(yōu)k執(zhí)行kmeans聚類

最后,我們執(zhí)行kmeans函數(shù),使用k=4作為最優(yōu)值:

# 設(shè)置隨機(jī)種子,讓結(jié)果可以重現(xiàn)
set.seed(1)

# 調(diào)用kmeans聚類算法 k = 4
km <- kmeans(df, centers = 4, nstart = 25)

# 查看結(jié)果
km

# Show in New Window
# Clustering k = 1,2,..., K.max (= 10): .. done
# Bootstrapping, b = 1,2,..., B (= 50)  [one "." per sample]:
# .................................................. 50 
# R Console
# 
# 
# Show in New Window
# K-means clustering with 4 clusters of sizes 13, 13, 16, 8
# 
# Cluster means:
#       Murder    Assault   UrbanPop        Rape
# 1 -0.9615407 -1.1066010 -0.9301069 -0.96676331
# 2  0.6950701  1.0394414  0.7226370  1.27693964
# 3 -0.4894375 -0.3826001  0.5758298 -0.26165379
# 4  1.4118898  0.8743346 -0.8145211  0.01927104
# 
# Clustering vector:
#        Alabama         Alaska        Arizona       Arkansas     California       Colorado 
#              4              2              2              4              2              2 
#    Connecticut       Delaware        Florida        Georgia         Hawaii          Idaho 
#              3              3              2              4              3              1 
#       Illinois        Indiana           Iowa         Kansas       Kentucky      Louisiana 
#              2              3              1              3              1              4 
#          Maine       Maryland  Massachusetts       Michigan      Minnesota    Mississippi 
#              1              2              3              2              1              4 
#       Missouri        Montana       Nebraska         Nevada  New Hampshire     New Jersey 
#              2              1              1              2              1              3 
#     New Mexico       New York North Carolina   North Dakota           Ohio       Oklahoma 
#              2              2              4              1              3              3 
#         Oregon   Pennsylvania   Rhode Island South Carolina   South Dakota      Tennessee 
#              3              3              3              4              1              4 
#          Texas           Utah        Vermont       Virginia     Washington  West Virginia 
#              2              3              1              3              3              1 
#      Wisconsin        Wyoming 
#              1              3 
# 
# Within cluster sum of squares by cluster:
# [1] 11.952463 19.922437 16.212213  8.316061
#  (between_SS / total_SS =  71.2 %)
# 
# Available components:
# 
# [1] "cluster"      "centers"      "totss"        "withinss"     "tot.withinss"
# [6] "betweenss"    "size"         "iter"         "ifault"     

從結(jié)果可見:

  • 16 州分在第一個(gè)類
  • 13 州分在第二個(gè)類
  • 13 州分在第三個(gè)類
  • 8 州分在第四個(gè)類

我們可以通過fviz_cluster()函數(shù)在二維空間中以散點(diǎn)圖方式展示結(jié)果:

#plot results of final k-means model
fviz_cluster(km, data = df)

也可以使用aggregate()函數(shù)查看每個(gè)類中變量的均值:

#find means of each cluster
aggregate(USArrests, by=list(cluster=km$cluster), mean)

# cluster	  Murder   Assault	UrbanPop	    Rape
# 				
# 1	3.60000	  78.53846	52.07692	12.17692
# 2	10.81538 257.38462	76.00000	33.19231
# 3	5.65625	 138.87500	73.87500	18.78125
# 4	13.93750 243.62500	53.75000	21.41250

輸出結(jié)果解釋如下:

  • 在第一類中的州中平均每100,000人謀殺數(shù)為 3.6
  • 在第一類中的州中平均每100,000人襲擊數(shù)為 78.5
  • 在第一類中的州中平均每100,000人城區(qū)居民率為 52.1%
  • 在第一類中的州中平均每100,000人強(qiáng)奸數(shù)為 3.6 12.2

最后我們把聚類結(jié)果附加到原始數(shù)據(jù)集中:

#add cluster assigment to original data
final_data <- cbind(USArrests, cluster = km$cluster)

#view final data
head(final_data)

# 	    Murder	Assault	UrbanPop  Rape	 cluster
# 				
# Alabama	    13.2	236	58	  21.2	 4
# Alaska	    10.0	263	48	  44.5	 2
# Arizona	     8.1	294	80	  31.0	 2
# Arkansas     8.8	190	50	  19.5	 4
# California   9.0	276	91	  40.6	 2
# Colorado     7.9	204	78	  38.7	 2

kmeans 算法的優(yōu)缺點(diǎn)

優(yōu)點(diǎn):

很快的算法能夠處理大數(shù)據(jù)集

缺點(diǎn):

在執(zhí)行算法之前需要指定聚類數(shù)量對(duì)異常值敏感 總結(jié)

本文我們討論了kmeans算法的概念,并在R中給詳細(xì)實(shí)現(xiàn)示例和步驟。

總結(jié)

到此這篇關(guān)于R語言實(shí)現(xiàn)KMeans聚類算法教程的文章就介紹到這了,更多相關(guān)R語言KMeans聚類算法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • R語言 UTF-8各種問題的解決方案

    R語言 UTF-8各種問題的解決方案

    這篇文章主要介紹了R語言 UTF-8各種問題的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • RStudio中如何更改R包安裝位置淺析

    RStudio中如何更改R包安裝位置淺析

    R語言提供了豐富的功能和擴(kuò)展包來支持各種任務(wù),默認(rèn)R語言會(huì)將安裝的擴(kuò)展包存儲(chǔ)在特定的目錄中,有時(shí)我們希望將這個(gè)默認(rèn)存儲(chǔ)路徑更改為其他位置,以便更好地組織和管理我們的包,這篇文章主要給大家介紹了關(guān)于RStudio中如何更改R包安裝位置的相關(guān)資料,需要的朋友可以參考下
    2023-09-09
  • R語言實(shí)現(xiàn)廣義線性回歸模型

    R語言實(shí)現(xiàn)廣義線性回歸模型

    本文主要介紹了R語言實(shí)現(xiàn)廣義線性回歸模型,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • R語言操作XML文件實(shí)例分析

    R語言操作XML文件實(shí)例分析

    在本篇文章里小編給大家整理的是一篇關(guān)于R語言操作XML文件實(shí)例分析,有興趣的朋友們可以跟著學(xué)習(xí)下。
    2021-05-05
  • R語言 install.packages 無法讀取索引的解決方案

    R語言 install.packages 無法讀取索引的解決方案

    這篇文章主要介紹了R語言 install.packages 無法讀取索引的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • R語言隨機(jī)抽樣詳解

    R語言隨機(jī)抽樣詳解

    這篇文章主要介紹了R語言隨機(jī)抽樣,從總體中抽取樣本的方法很多,最常用的方法是簡單隨機(jī)抽樣,本文給大家詳細(xì)講解結(jié)合示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-11-11
  • R語言實(shí)現(xiàn)線性回歸的示例

    R語言實(shí)現(xiàn)線性回歸的示例

    這篇文章主要介紹了R語言實(shí)現(xiàn)線性回歸的示例,幫助大家更好的理解和學(xué)習(xí)使用R語言,感興趣的朋友可以了解下
    2021-03-03
  • R語言實(shí)現(xiàn)漂亮的ROC圖效果

    R語言實(shí)現(xiàn)漂亮的ROC圖效果

    pROC是一個(gè)專門用來計(jì)算和繪制ROC曲線的R包,目前已被CRAN收錄,因此安裝也非常簡單,同時(shí)該包也兼容ggplot2函數(shù)繪圖,本次就教大家怎么用pROC來快速畫出ROC圖,感興趣的朋友一起看看吧
    2022-06-06
  • 如何使用R語言做邏輯回歸詳解

    如何使用R語言做邏輯回歸詳解

    邏輯回歸屬于概率統(tǒng)計(jì)的分類算法模型的算法,是根據(jù)一個(gè)或者多個(gè)特征進(jìn)行類別標(biāo)號(hào)預(yù)測,下面這篇文章主要給大家介紹了關(guān)于如何使用R語言做邏輯回歸的相關(guān)資料,需要的朋友可以參考下
    2022-07-07
  • R語言向量下標(biāo)和子集的使用

    R語言向量下標(biāo)和子集的使用

    本文主要介紹了R語言向量下標(biāo)和子集的使用,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03

最新評(píng)論