聚类效果评价——Calinski-Harabasz(CH指标)——内部评估标准(2)

Caliński, Tadeusz, and Jerzy Harabasz. “A dendrite method for cluster analysis.” Communications in Statistics-theory and Methods 3.1 (1974): 1-27.

公式与简介

CH指标的计算公式是: s = t r ( B k ) t r ( W k ) × n E − k k − 1 s = \frac{\mathrm{tr}(B_k)}{\mathrm{tr}(W_k)} \times \frac{n_E - k}{k - 1} s=tr(Wk)tr(Bk)×k1nEk

其中 B k B_{k} Bk 为 between-clusters dispersion mean(类间距离), W k W_{k} Wk为 within-cluster dispersion(类内部的距离),详细公式如下:

W k = ∑ q = 1 k ∑ x ∈ C q ( x − c q ) ( x − c q ) T W_k = \sum_{q=1}^k \sum_{x \in C_q} (x - c_q) (x - c_q)^T Wk=q=1kxCq(xcq)(xcq)T

B k = ∑ q = 1 k n q ( c q − c E ) ( c q − c E ) T B_k = \sum_{q=1}^k n_q (c_q - c_E) (c_q - c_E)^T Bk=q=1knq(cqcE)(cqcE)T

W k W_{k} Wk 中: C q C_q Cq表示当前点所在的类 q q q c q c_q cq是当前类 q q q的聚类中心点

B k B_{k} Bk 中: C e C_e Ce表示类 e e e的中心; n q n_q nq表示类别 q q q包含的点数。

值越大表示聚类效果越好

代码实现

import pandas as pd
import numpy as np
from sklearn import metrics
from sklearn.cluster import KMeans

dataframe = pd.DataFrame(data=np.random.randint(0, 50, size=(200, 10)))
# 以kmeans聚类方法为例
kmeans_model = KMeans(n_clusters=3, random_state=1).fit(dataframe)
labels = kmeans_model.labels_
score = metrics.calinski_harabasz_score(dataframe, labels)
print(score)

参考文章

sklearn:https://scikit-learn.org/stable/modules/clustering.html#calinski-harabasz-index

  • 6
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
要使用R语言计算和绘制使用`hclust`分类下的Calinski-Harabasz指标,你可以使用`cluster.stats`函数从`fpc`包中进行计算,并使用绘图函数来可视化结果。 首先,确保已经安装了`fpc`包。如果没有安装,可以使用以下命令进行安装: ```R install.packages("fpc") ``` 然后,使用以下代码来计算和绘制使用`hclust`分类下的Calinski-Harabasz指标: ```R library(fpc) # 计算Calinski-Harabasz指标 calinski_scores <- numeric() for (k in 2:10) { # 使用hclust分类方法构建聚类树 sampleTree <- hclust(dist(datExpr0), method = "average") # 将聚类树切割为k个聚类 cut_tree <- cutree(sampleTree, k = k) # 计算Calinski-Harabasz指标 calinski_scores[k] <- cluster.stats(datExpr0, cut_tree)$ch } # 绘制Calinski-Harabasz指标曲线 plot(2:10, calinski_scores[2:10], type = "b", xlab = "分类个数", ylab = "Calinski-Harabasz指标", main = "Calinski-Harabasz指标随分类个数的变化") ``` 在上述代码中,我们首先加载了`fpc`包。然后,我们使用循环从2到10尝试不同的分类个数。对于每个分类个数,我们使用`hclust`函数根据`datExpr0`数据构建聚类树,并将其切割为k个聚类。然后,我们使用`cluster.stats`函数计算每个聚类结果的Calinski-Harabasz指标。最后,我们使用`plot`函数将分类个数与对应的Calinski-Harabasz指标绘制成曲线图。 请注意,这只是一个示例代码,你可以根据你的需求进行修改和调整,例如修改分类个数的范围、选择其他的`hclust`分类方法等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

呆萌的代Ma

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值