R語言實現(xiàn)KMeans聚類算法實例教程_第1頁
R語言實現(xiàn)KMeans聚類算法實例教程_第2頁
R語言實現(xiàn)KMeans聚類算法實例教程_第3頁
R語言實現(xiàn)KMeans聚類算法實例教程_第4頁
R語言實現(xiàn)KMeans聚類算法實例教程_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

第R語言實現(xiàn)KMeans聚類算法實例教程目錄什么是k-means聚類算法R實現(xiàn)kmeans聚類算法加載包加載示例數(shù)據(jù)尋找最佳聚類數(shù)量使用最優(yōu)k執(zhí)行kmeans聚類kmeans算法的優(yōu)缺點總結(jié)本文和你一起學習無監(jiān)督機器學習算法kmeans算法,并在R中給詳細的實現(xiàn)示例和步驟。

什么是k-means聚類算法

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

下面是一個市場營銷中對客戶分類的場景,通過下面客戶信息:

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

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

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

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

1.確定K值

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

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

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

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

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

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

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

加載包

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

library(factoextra)

library(cluster)

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

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

#loaddata

df-USArrests

#removerowswithmissingvalues

df-na.omit(df)

#scaleeachvariabletohaveameanof0andsdof1

df-scale(df)

#viewfirstsixrowsofdataset

head(df)

#MurderAssaultUrbanPopRape

#Alabama1.242564080.7828393-0.5209066-0.003416473

#Alaska0.507862481.1068225-1.21176422.484202941

#Arizona0.071633411.47880320.99898011.042878388

#Arkansas0.232349380.2308680-1.0735927-0.184916602

#California0.278268231.26281441.75892342.067820292

#Colorado0.025714560.39885930.86080851.864967207

上面代碼首先加載USArrests數(shù)據(jù)集,刪除缺失值,對數(shù)據(jù)值進行標準化。

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

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

kmeans(data,centers,nstart)

data:數(shù)據(jù)集名稱centers:聚類數(shù)量,即選擇k的值nstart:初始配置個數(shù)。因為不同的初始啟動集合可能會導(dǎo)致不同的結(jié)果,所以建議使用幾種不同的初始配置。k-means算法將找到導(dǎo)致簇內(nèi)變異最小的初始配置。

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

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

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

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

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

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

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

#calculategapstatisticbasedonnumberofclusters

gap_stat-clusGap(df,

FUN=kmeans,

nstart=25,

K.max=10,

B=50)

#plotnumberofclustersvs.gapstatistic

fviz_gap_stat(gap_stat)

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

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

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

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

set.seed(1)

#調(diào)用kmeans聚類算法k=4

km-kmeans(df,centers=4,nstart=25)

#查看結(jié)果

#ShowinNewWindow

#Clusteringk=1,2,...,K.max(=10):..done

#Bootstrapping,b=1,2,...,B(=50)[one"."persample]:

#..................................................50

#RConsole

#ShowinNewWindow

#K-meansclusteringwith4clustersofsizes13,13,16,8

#Clustermeans:

#MurderAssaultUrbanPopRape

#1-0.9615407-1.1066010-0.9301069-0.96676331

#20.69507011.03944140.72263701.27693964

#3-0.4894375-0.38260010.5758298-0.26165379

#41.41188980.8743346-0.81452110.01927104

#Clusteringvector:

#AlabamaAlaskaArizonaArkansasCaliforniaColorado

#422422

#ConnecticutDelawareFloridaGeorgiaHawaiiIdaho

#332431

#IllinoisIndianaIowaKansasKentuckyLouisiana

#231314

#MaineMarylandMassachusettsMichiganMinnesotaMississippi

#123214

#MissouriMontanaNebraskaNevadaNewHampshireNewJersey

#211213

#NewMexicoNewYorkNorthCarolinaNorthDakotaOhioOklahoma

#224133

#OregonPennsylvaniaRhodeIslandSouthCarolinaSouthDakotaTennessee

#333414

#TexasUtahVermontVirginiaWashingtonWestVirginia

#231331

#WisconsinWyoming

#13

#Withinclustersumofsquaresbycluster:

#[1]11.95246319.92243716.2122138.316061

#(between_SS/total_SS=71.2%)

#Availablecomponents:

#[1]"cluster""centers""totss""withinss""tot.withinss"

#[6]"betweenss""size""iter""ifault"

從結(jié)果可見:

16州分在第一個類13州分在第二個類13州分在第三個類8州分在第四個類

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

#plotresultsoffinalk-meansmodel

fviz_cluster(km,data=df)

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

#findmeansofeachcluster

aggregate(USArrests,by=list(cluster=km$cluster),mean)

#clusterMurderAssaultUrbanPopRape

#13.6000078.5384652.0769212.17692

#210.81538257.3846276.0000033.19231

#35.65625138.8750073.8750018.78125

#413.93750243.6250053.7500021.41250

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

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

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

#addclusterassigmenttooriginaldata

final_data-cbind(USArrests,cluster=km$cluster)

#viewfinaldata

head(final_data)

#MurderAssaultUrbanPopRapecluster

#Alabama13.22365821.24

#Alaska10.02634844.

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論