-
當前位置:首頁 > 創(chuàng)意學(xué)院 > 營銷推廣 > 專題列表 > 正文
gap statistic(gapstatistic k值)
大家好!今天讓創(chuàng)意嶺的小編來大家介紹下關(guān)于gap statistic的問題,以下是小編對此問題的歸納整理,讓我們一起來看看吧。
開始之前先推薦一個非常厲害的Ai人工智能工具,一鍵生成原創(chuàng)文章、方案、文案、工作計劃、工作報告、論文、代碼、作文、做題和對話答疑等等
只需要輸入關(guān)鍵詞,就能返回你想要的內(nèi)容,有小程序、在線網(wǎng)頁版、PC客戶端和批量生成器
官網(wǎng):https://ai.de1919.com。
本文目錄:
R語言學(xué)習(xí)筆記之聚類分析
R語言學(xué)習(xí)筆記之聚類分析
使用k-means聚類所需的包:
factoextra
cluster #加載包
library(factoextra)
library(cluster)l
#數(shù)據(jù)準備
使用內(nèi)置的R數(shù)據(jù)集USArrests
#load the dataset
data("USArrests")
#remove any missing value (i.e, NA values for not available)
#That might be present in the data
USArrests <- na.omit(USArrests)#view the first 6 rows of the data
head(USArrests, n=6)
在此數(shù)據(jù)集中,列是變量,行是觀測值
在聚類之前我們可以先進行一些必要的數(shù)據(jù)檢查即數(shù)據(jù)描述性統(tǒng)計,如平均值、標準差等
desc_stats <- data.frame( Min=apply(USArrests, 2, min),#minimum
Med=apply(USArrests, 2, median),#median
Mean=apply(USArrests, 2, mean),#mean
SD=apply(USArrests, 2, sd),#Standard deviation
Max=apply(USArrests, 2, max)#maximum
)
desc_stats <- round(desc_stats, 1)#保留小數(shù)點后一位head(desc_stats)
變量有很大的方差及均值時需進行標準化
df <- scale(USArrests)
#數(shù)據(jù)集群性評估
使用get_clust_tendency()計算Hopkins統(tǒng)計量
res <- get_clust_tendency(df, 40, graph = TRUE)
res$hopkins_stat
## [1] 0.3440875
#Visualize the dissimilarity matrix
res$plot
Hopkins統(tǒng)計量的值<0.5,表明數(shù)據(jù)是高度可聚合的。另外,從圖中也可以看出數(shù)據(jù)可聚合。
#估計聚合簇數(shù)
由于k均值聚類需要指定要生成的聚類數(shù)量,因此我們將使用函數(shù)clusGap()來計算用于估計最優(yōu)聚類數(shù)。函數(shù)fviz_gap_stat()用于可視化。
set.seed(123)
## Compute the gap statistic
gap_stat <- clusGap(df, FUN = kmeans, nstart = 25, K.max = 10, B = 500)
# Plot the result
fviz_gap_stat(gap_stat)
圖中顯示最佳為聚成四類(k=4)
#進行聚類
set.seed(123)
km.res <- kmeans(df, 4, nstart = 25)
head(km.res$cluster, 20)
# Visualize clusters using factoextra
fviz_cluster(km.res, USArrests)
#檢查cluster silhouette圖
Recall that the silhouette measures (SiSi) how similar an object ii is to the the other objects in its own cluster versus those in the neighbor cluster. SiSi values range from 1 to - 1:
A value of SiSi close to 1 indicates that the object is well clustered. In the other words, the object ii is similar to the other objects in its group.
A value of SiSi close to -1 indicates that the object is poorly clustered, and that assignment to some other cluster would probably improve the overall results.
sil <- silhouette(km.res$cluster, dist(df))
rownames(sil) <- rownames(USArrests)
head(sil[, 1:3])
#Visualize
fviz_silhouette(sil)
圖中可以看出有負值,可以通過函數(shù)silhouette()確定是哪個觀測值
neg_sil_index <- which(sil[, "sil_width"] < 0)
sil[neg_sil_index, , drop = FALSE]
## cluster neighbor sil_width
## Missouri 3 2 -0.07318144
#eclust():增強的聚類分析
與其他聚類分析包相比,eclust()有以下優(yōu)點:
簡化了聚類分析的工作流程
可以用于計算層次聚類和分區(qū)聚類
eclust()自動計算最佳聚類簇數(shù)。
自動提供Silhouette plot
可以結(jié)合ggplot2繪制優(yōu)美的圖形
#使用eclust()的K均值聚類
# Compute k-means
res.km <- eclust(df, "kmeans")
# Gap statistic plot
fviz_gap_stat(res.km$gap_stat)
# Silhouette plotfviz_silhouette(res.km)
## cluster size ave.sil.width
## 1 1 13 0.31
## 2 2 29 0.38
## 3 3 8 0.39
#使用eclust()的層次聚類
# Enhanced hierarchical clustering
res.hc <- eclust(df, "hclust") # compute hclust
fviz_dend(res.hc, rect = TRUE) # dendrogam
#下面的R代碼生成Silhouette plot和分層聚類散點圖。
fviz_silhouette(res.hc) # silhouette plot
## cluster size ave.sil.width
## 1 1 19 0.26
## 2 2 19 0.28
## 3 3 12 0.43
fviz_cluster(res.hc) # scatter plot
#Infos
This analysis has been performed using R software (R version 3.3.2)
K均值算法
代價函數(shù)可以定義為各個樣本距離所屬簇中心點的誤差平方和K均值算法有一些缺點,例如受初值和離群點的影響每次的結(jié)果不穩(wěn)定、結(jié)果 通常不是全局最優(yōu)而是局部最優(yōu)解、無法很好地解決數(shù)據(jù)簇分布差別比較大的情 況(比如一類是另一類樣本數(shù)量的100倍)、不太適用于離散分類等。但是瑕不掩 瑜,K均值聚類的優(yōu)點也是很明顯和突出的,主要體現(xiàn)在:對于大數(shù)據(jù)集,K均值 聚類算法相對是可伸縮和高效的,它的計算復(fù)雜度是O(NKt)接近于線性,其中N是 數(shù)據(jù)對象的數(shù)目,K是聚類的簇數(shù),t是迭代的輪數(shù)。盡管算法經(jīng)常以局部最優(yōu)結(jié) 束,但一般情況下達到的局部最優(yōu)已經(jīng)可以滿足聚類的需求。
其實書中也少講了缺點,那就是關(guān)于k的選擇,當維度很高的時候,你很難判斷選擇k多少比較合適。
不過書中在算法調(diào)優(yōu)中說了。所謂的調(diào)優(yōu)其是也是變相的說那些缺點。
K均值算法的調(diào)優(yōu)一般可以從以下幾個角度出發(fā)。
(1)數(shù)據(jù)歸一化和離群點處理。
K均值聚類本質(zhì)上是一種基于歐式距離度量的數(shù)據(jù)劃分方法,均值和方差大的 維度將對數(shù)據(jù)的聚類結(jié)果產(chǎn)生決定性的影響,所以未做歸一化處理和統(tǒng)一單位的 數(shù)據(jù)是無法直接參與運算和比較的。同時,離群點或者少量的噪聲數(shù)據(jù)就會對均 值產(chǎn)生較大的影響,導(dǎo)致中心偏移,因此使用K均值聚類算法之前通常需要對數(shù)據(jù) 做預(yù)處理。
(2)合理選擇K值。
K值的選擇是K均值聚類最大的問題之一,這也是K均值聚類算法的主要缺 點。實際上,我們希望能夠找到一些可行的辦法來彌補這一缺點,或者說找到K值 的合理估計方法。但是,K值的選擇一般基于經(jīng)驗和多次實驗結(jié)果。例如采用手肘 法,我們可以嘗試不同的K值,并將不同K值所對應(yīng)的損失函數(shù)畫成折線,橫軸 為K的取值,縱軸為誤差平方和所定義的損失函數(shù),如圖5.3所示
由圖可見,K值越大,距離和越小;并且,當K=3時,存在一個拐點,就像人 的肘部一樣;當K (1,3)時,曲線急速下降;當K>3時,曲線趨于平穩(wěn)。手肘法認 為拐點就是K的最佳值。
手肘法是一個經(jīng)驗方法,缺點就是不夠自動化,因此研究員們又提出了一些 更先進的方法,其中包括比較有名的Gap Statistic方法[5]。Gap Statistic方法的優(yōu)點 是,不再需要肉眼判斷,而只需要找到最大的Gap statistic所對應(yīng)的K即可,因此該 方法也適用于批量化作業(yè)。在這里我們繼續(xù)使用上面的損失函數(shù),當分為K簇時, 對應(yīng)的損失函數(shù)記為Dk。Gap Statistic定義為
Gap(K)=E(logDk)−logDk
內(nèi)按照均勻分布隨機地產(chǎn)生和原始樣本數(shù)一樣多的隨機樣本,并對這個隨機樣本
做K均值,得到一個Dk;重復(fù)多次就可以計算出E(logDk)的近似值。那么Gap(K)有
什么物理含義呢?它可以視為隨機樣本的損失與實際樣本的損失之差。試想實際 樣本對應(yīng)的最佳簇數(shù)為K,那么實際樣本的損失應(yīng)該相對較小,隨機樣本損失與實 際樣本損失之差也相應(yīng)地達到最小值,從而Gap(K)取得最大值所對應(yīng)的K值就是最 佳的簇數(shù)。根據(jù)式(5.4)計算K =1,2,...,9所對應(yīng)的Gap Statistic
(3)采用核函數(shù)。
采用核函數(shù)是另一種可以嘗試的改進方向。傳統(tǒng)的歐式距離度量方式,使得K 均值算法本質(zhì)上假設(shè)了各個數(shù)據(jù)簇的數(shù)據(jù)具有一樣的先驗概率,并呈現(xiàn)球形或者 高維球形分布,這種分布在實際生活中并不常見。面對非凸的數(shù)據(jù)分布形狀時, 可能需要引入核函數(shù)來優(yōu)化,這時算法又稱為核K均值算法,是核聚類方法的一種 [6]。核聚類方法的主要思想是通過一個非線性映射,將輸入空間中的數(shù)據(jù)點映射到 高位的特征空間中,并在新的特征空間中進行聚類。非線性映射增加了數(shù)據(jù)點線 性可分的概率,從而在經(jīng)典的聚類算法失效的情況下,通過引入核函數(shù)可以達到 更為準確的聚類結(jié)果。
K均值算法的主要缺點如下。
(1)需要人工預(yù)先確定初始K值,且該值和真實的數(shù)據(jù)分布未必吻合。
(2)K均值只能收斂到局部最優(yōu),效果受到初始值很大。
(3)易受到噪點的影響。
(4)樣本點只能被劃分到單一的類中。
■ K-means++算法
K均值的改進算法中,對初始值選擇的改進是很重要的一部分。而這類算法 中,最具影響力的當屬K-means++算法。原始K均值算法最開始隨機選取數(shù)據(jù)集中 K個點作為聚類中心,而K-means++按照如下的思想選取K個聚類中心。假設(shè)已經(jīng) 選取了n個初始聚類中心(0<n<K),則在選取第n+1個聚類中心時,距離當前n個 聚類中心越遠的點會有更高的概率被選為第n+1個聚類中心。在選取第一個聚類中 心(n=1)時同樣通過隨機的方法??梢哉f這也符合我們的直覺,聚類中心當然是 互相離得越遠越好。當選擇完初始點后,K-means++后續(xù)的執(zhí)行和經(jīng)典K均值算法 相同,這也是對初始值選擇進行改進的方法等共同點。
■ ISODATA算法
當K值的大小不確定時,可以使用ISODATA算法。ISODATA的全稱是迭代自 組織數(shù)據(jù)分析法。在K均值算法中,聚類個數(shù)K的值需要預(yù)先人為地確定,并且在 整個算法過程中無法更改。而當遇到高維度、海量的數(shù)據(jù)集時,人們往往很難準 確地估計出K的大小。ISODATA算法就是針對這個問題進行了改進,它的思想也 很直觀。當屬于某個類別的樣本數(shù)過少時,把該類別去除;當屬于某個類別的樣 本數(shù)過多、分散程度較大時,把該類別分為兩個子類別。ISODATA算法在K均值 算法的基礎(chǔ)之上增加了兩個操作,一是分裂操作,對應(yīng)著增加聚類中心數(shù);二是 合并操作,對應(yīng)著減少聚類中心數(shù)。ISODATA算法是一個比較常見的算法,其缺 點是需要指定的參數(shù)比較多,不僅僅需要一個參考的聚類數(shù)量Ko,還需要制定3個
閾值。下面介紹ISODATA算法的各個輸入?yún)?shù)。
(1)預(yù)期的聚類中心數(shù)目Ko。在ISODATA運行過程中聚類中心數(shù)可以變 化,Ko是一個用戶指定的參考值,該算法的聚類中心數(shù)目變動范圍也由其決定。 具體地,最終輸出的聚類中心數(shù)目常見范圍是從Ko的一半,到兩倍Ko。
(2)每個類所要求的最少樣本數(shù)目Nmin。如果分裂后會導(dǎo)致某個子類別所包 含樣本數(shù)目小于該閾值,就不會對該類別進行分裂操作。
(3)最大方差Sigma。用于控制某個類別中樣本的分散程度。當樣本的分散 程度超過這個閾值時,且分裂后滿足(1),進行分裂操作。
(4)兩個聚類中心之間所允許最小距離Dmin。如果兩個類靠得非常近(即這 兩個類別對應(yīng)聚類中心之間的距離非常小),小于該閾值時,則對這兩個類進行
合并操作。
如果希望樣本不劃分到單一的類中,可以使用模糊C均值或者高斯混合模型, 高斯混合模型會在下一節(jié)中詳細講述。
K均值聚類的迭代算法實際上是一種最大期望算法 (Expectation-Maximization algorithm),簡稱EM算法。EM算法解決的是在概率模 型中含有無法觀測的隱含變量情況下的參數(shù)估計問題。
EM算法只保證收斂到局部最優(yōu)解
以上就是關(guān)于gap statistic相關(guān)問題的回答。希望能幫到你,如有更多相關(guān)問題,您也可以聯(lián)系我們的客服進行咨詢,客服也會為您講解更多精彩的知識和內(nèi)容。
推薦閱讀:
openai國內(nèi)版(opengapps各版本詳細)