R でデータをクラスター化するために k-means を使用してきましたが、ベイジアン情報量基準 (BIC) と AIC を使用して、クラスター化の適合性とモデルの複雑さを評価できるようにしたいと考えています。現在、Rで使用しているコードは次のとおりです。
KClData <- kmeans(Data, centers=2, nstart= 100)
しかし、BIC と対数尤度を抽出できるようにしたいと考えています。どんな助けでも大歓迎です!
R でデータをクラスター化するために k-means を使用してきましたが、ベイジアン情報量基準 (BIC) と AIC を使用して、クラスター化の適合性とモデルの複雑さを評価できるようにしたいと考えています。現在、Rで使用しているコードは次のとおりです。
KClData <- kmeans(Data, centers=2, nstart= 100)
しかし、BIC と対数尤度を抽出できるようにしたいと考えています。どんな助けでも大歓迎です!
ここに着陸する他の人のために、http://sherrytowers.com/2013/10/24/k-means-clustering/で Sherry Towers によって提案された方法があります。これは からの出力を使用しますstats::kmeans
。私は引用します:
AIC は次の関数で計算できます。
kmeansAIC = function(fit){ m = ncol(fit$centers) n = length(fit$cluster) k = nrow(fit$centers) D = fit$tot.withinss return(D + 2*m*k) }
のヘルプからstats::AIC
、BIC が AIC と同様の方法で計算できることもわかります。BIC を取得する簡単な方法はreturn()
、上記の関数の を次のように置き換えることです。
return(data.frame(AIC = D + 2*m*k,
BIC = D + log(n)*m*k))
したがって、これを次のように使用します。
fit <- kmeans(x = data,centers = 6)
kmeansAIC(fit)
BIC を計算する.5*k*d*log(n)
には、(k
は平均数、d
はデータセット内のベクトルの長さ、n
はデータ ポイントの数) を標準の k 平均誤差関数に追加するだけです。
標準の k-means ペナルティは です\sum_n (m_k(n)-x_n)^2
。ここm_k(n)
で、 は n 番目のデータ ポイントに関連付けられた平均です。このペナルティは対数確率として解釈できるため、BIC は完全に有効です。
BIC は、 に比例する k-means エラーに追加のペナルティ項を追加するだけk
です。
user1149913 が言ったことに追加するだけです (コメントするのに十分な評判がありません)。R で kmeans 関数を使用している\sum_n (m_k(n)-x_n)^2
ため、 として既に計算されていますKClData$tot.withinss
。