肘方法 Elbow of SSE vs 轮廓系数 Silhouette Coefficient

68 篇文章 246 订阅 ¥99.90 ¥299.90
本文介绍了在K均值聚类中确定最优K值的两种方法——肘部法则(Elbow Method)和轮廓系数(Silhouette Coefficient)。肘部法则通过观察SSE(误差平方和)随K值变化的图表,寻找SSE下降速率减缓的“肘点”。轮廓系数结合了聚类密集度和分离度,通过计算样本的轮廓系数来评估聚类效果,选择平均轮廓系数最高的K值。在具体案例中,两者都指向K=4作为最优聚类数量。
摘要由CSDN通过智能技术生成

肘方法:Elbow of SSE

也被称为 Knee of SEE,膝盖方法。

在聚类算法中,特别是K均值聚类,使用SSE(Sum of Squared Errors)来寻找最优的K值是一种常见的方法。这种方法通常被称为“肘部法则”(Elbow Method)。SSE是指每个点到其最近的聚类中心的距离的平方和。当选择不同数量的聚类时,SSE通常会随着聚类数量的增加而减少,因为更多的聚类意味着每个聚类中的点更接近其中心。

以下是如何使用肘部法则来确定最优K值的步骤:

  1. 计算不同K值的SSE:首先,对于一系列的K值(比如从1到10),对数据集应用K均值聚类,并计算每个K值的SSE。
  2. 绘制SSE图:然后,将每个K值的SSE绘制成一张图表。横轴是K值,纵轴是对应的SSE。
  3. 寻找“肘点”:在这张图表上,肘部法则的目标是找到SSE开始下降速率减缓的点。换句话说,就是找到一个点,在这一点之前,增加聚类数目会显著减少SSE;但在这点之后,增加聚类数目对于减少SSE的贡献就变得不那么明显。这个点就像人的肘部一样,即SSE曲线的“弯曲”部分。
法则和轮廓系数法是常用的聚类模型选择(确定最佳K值)方法。在MATLAB中,我们可以使用`kmeans`函数结合一些自定义计算来实现。 首先,我们来看一下如何使用手法则: ```matlab % 生成示例数据集 data = randn(1000, 2); % 生成1000个二维随机点 % 计算不同K值下的误差平方和 sse = zeros(1, 10); % 初始化 SSE 向量 for k = 1:10 [ centroids, ~ ] = kmeans(data, k); sse(k) = sum(pdist2(data, centroids)); % pdist2计算距离并求和 end % 手点的选择 elbow_index = find(sse(2:end) - sse(1:end-1) < threshold, 1) + 1; % 可调整threshold值 best_k = elbow_index; % 显示手图 plot(1:10, sse, 'bx-o') xlabel('Number of Clusters (k)') ylabel('SSE (Sum of Squared Distances)') title(['Elbow Method: Best K = ', num2str(best_k)]); ``` 接下来,我们看下轮廓系数法: ```matlab % 计算轮廓系数 function score = silhouette_score(data, labels) [~, inertia] = kmeans(data, labels); n_clusters = length(unique(labels)); within_sum_of_squares = inertia; % 计算轮廓系数数组 pairwise_differences = pdist2(data); silhouette_values = zeros(size(labels)); for i = 1:length(labels) a = pdist2(data(i,:), centroids(labels == labels(i))); b = mean(pairwise_differences(labels == labels(i)), 2); silhouette_values(i) = (b - a) / max(a, b); end % 计算平均轮廓系数 score = mean(silhouette_values); end best_k = find(silhouette_score(data, (1:10)*ones(size(data, 1), 1)) > threshold2, 1) + 1; % 可调整threshold2值 % 输出最佳K值 disp(['Silhouette Coefficient Method: Best K = ', num2str(best_k)]); ``` 这里的`threshold`和`threshold2`需要根据实际数据和应用调整,它们分别用于识别部形状和找到高轮廓系数对应的K值。记得先安装了`pdist2`函数的依赖包,如如果是处理数值型数据,一般不需要特别安装。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

AI算法攻城狮

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

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

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

打赏作者

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

抵扣说明:

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

余额充值