R小鹽準(zhǔn)備介紹R語言機(jī)器學(xué)習(xí)與預(yù)測模型的學(xué)習(xí)筆記
你想要的R語言學(xué)習(xí)資料都在這里计雌, 快來收藏關(guān)注【科研私家菜】
01 KMeans聚類算法
聚類是從數(shù)據(jù)集中對觀測值進(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)變量的值溪椎。
最常用的聚類算法就是k-means聚類算法。k-means聚類算法把數(shù)據(jù)集中每個觀測值分為K個類別。每個分類中的觀測值相當(dāng)類似沼侣,K類之間彼此差異較大。實(shí)際應(yīng)用中執(zhí)行下列幾步實(shí)現(xiàn)k-means聚類算法:
1.確定K值
2.將每個觀察結(jié)果隨機(jī)分配到一個初始簇中蛾洛,從1到K。
3.執(zhí)行以下步驟轧膘,直到集群分配停止變化。
02 R 實(shí)現(xiàn)kmeans聚類算法
library(factoextra)
library(cluster)
#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)
02 尋找最佳聚類數(shù)量
① 總體平方和
執(zhí)行kmeans聚類算法谎碍,我們可以使用內(nèi)置包stat中的kmeans()函數(shù),語法如下:
kmeans(data, centers, nstart)
data : 數(shù)據(jù)集名稱
centers: 聚類數(shù)量,即選擇k的值
nstart: 初始配置個數(shù)蟆淀。因?yàn)椴煌某跏紗蛹峡赡軙?dǎo)致不同的結(jié)果,所以建議使用幾種不同的初始配置褒链。k-means算法將找到導(dǎo)致簇內(nèi)變異最小的初始配置。
首先使用 fviz_nbclust 函數(shù)創(chuàng)建一個圖甫匹,展示聚類數(shù)量及總體平方和之間的關(guān)系:
fviz_nbclust(df, kmeans, method = "wss")
通常我們創(chuàng)建這類圖形尋找某個K類對應(yīng)的平方和值開始彎曲或趨于平緩的肘形。
② 差距統(tǒng)計
另一個決定最佳聚類數(shù)量的是使用指標(biāo):差距統(tǒng)計兵迅。它用于比較不同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)
3 使用最優(yōu)k執(zhí)行kmeans聚類
# 設(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
可以通過fviz_cluster()函數(shù)在二維空間中以散點(diǎn)圖方式展示結(jié)果:
#plot results of final k-means model
fviz_cluster(km, data = df)
# 使用aggregate()函數(shù)查看每個類中變量的均值:
#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
#add cluster assigment to original data
final_data <- cbind(USArrests, cluster = km$cluster)
#view final data
head(final_data)
4 kmeans 算法的優(yōu)缺點(diǎn)
優(yōu)點(diǎn):
算法計算速度快
能夠處理大數(shù)據(jù)集
缺點(diǎn):
在執(zhí)行算法之前需要指定聚類數(shù)量
對異常值敏感
關(guān)注R小鹽季惯,關(guān)注科研私家菜(VX_GZH: SciPrivate)吠各,有問題請聯(lián)系R小鹽勉抓。讓我們一起來學(xué)習(xí) R語言機(jī)器學(xué)習(xí)與臨床預(yù)測模型