k-means聚类(matlab)_【算法推荐】kmeans++

自Lloyd提出k-means算法以来, 虽然它没有提供准确性保证,但它的简单性和速度在实践中很有吸引力。因此, k-means算法得到了广泛的应用。本文介绍了k-means++算法,k-means++算法由Arthur 和 Vassilvitskii提出,对标准的k-means算法的初始过程进行改进,尽管简单,但却很有效。

一、k-means算法

k-means算法在上篇文章中已经推送,可以参考【数据挖掘笔记】K-均值算法及其拓展。

k-means聚类(matlab)_【算法推荐】kmeans++_第1张图片

二、k-means++算法

k-means++算法流程如下:

k-means聚类(matlab)_【算法推荐】kmeans++_第2张图片

k-means聚类(matlab)_【算法推荐】kmeans++_第3张图片

k-means++算法通俗地讲,流程如下:
  • 任意从n个数据对象中选取一个初始簇中心点c_1;

  • 根据概率公式计算每一个数据对象离它最近的中心点之间的距离D(x)及其被选中为下一个中心点的概率:

336a23ad4603a09f306ae0732e602588.png

  • 选择发生概率最大的数据对象作为下一个中心点,重复上述操作,直到找到k个中心点为止。

  • 调用标准的k-means算法进行重定位直到完成迭代。

三、k-means++算法实现

直接调用MATLAB库函数kmeans,其调用格式如下:
idx = kmeans(X,k)idx = kmeans(X,k,Name,Value)[idx,C] = kmeans(___)[idx,C,sumd] = kmeans(___)[idx,C,sumd,D] = kmeans(___)

参数解释请直接调用帮助文档进行查看。默认情况下,kmeans 使用欧几里德距离平方度量,并用 k-means++算法进行簇中心初始化。

本文实验源码参考:
clear all;close all;%=======================================%           Initialising Data%=======================================file = '../Data/Aggregation.mat';k = 7;iterations = 30;%=======================================%           Clustering%=======================================load(file);rng(1);[clusters, mean_matrix]  = kmeans(data(:, 1 : end - 1), k,...    'distance', 'sqeuclidean', 'maxIter', iterations);clustered_data= [data(:, 1 : end - 1) clusters];error = get_error(clustered_data, mean_matrix);fprintf('After iteration: error = %.4f \n', error(end));%=======================================%           Plot%=======================================plot_data(k, clustered_data);function [error] = get_error(data, mean_matrix)    %=======================================    %           Computing Error    %=======================================    error = 0;    for j = 1: size(data, 1)       c = data(j, end);       dist = get_euclidean(data(j, 1:end-1), mean_matrix(c, 1:end));       error = error + dist;    endendfunction [distance_matrix] = get_euclidean(data, mean_matrix)    %=======================================    %           Calculating Euclidean    %=======================================    dist = data - mean_matrix;    dist = dist .^ 2;    dist = sum(dist, 2);    distance_matrix = sqrt(dist);end

四、对比实验

本殿下仍然以UCI数据集Aggregation作为实验数据,使用MATLAB R2016b 软件在配备为 Intel (R) Core (TM) i7-7500U 2.90 GHz CPU 和 8GB 内存的个人电脑上进行了本文的实验。

k-means聚类(matlab)_【算法推荐】kmeans++_第4张图片

图1:k-means聚类结果

k-means聚类(matlab)_【算法推荐】kmeans++_第5张图片

图2:k-means++聚类结果

分别重复10次实验,去迭代次数为30,迭代完成后误差(距离簇中心的均方差)如下:

表1:误差表

Method

k-means

k-means++

Error

2933.1733

2762.4863

从图1可知,由于k个初始中心点选择不当,导致在聚类过程中有些簇消失。而由图2可知,k-means++的聚类效果尽管不是很好,但由于k-means算法。聚类反映了数据集的内部结构,不同的数据集需要不断调整参数以期达到更好的聚类效果。关于k-means算法的改进版还有很多,有兴趣的同学可以搜索一下。

参考文献

  1. Arthur D., Vassilvitskii S. K-Means++: The Advantages of Careful Seeding [C], Eighteenth Acm-siam Symposium on Discrete Algorithms. ACM, 2007. 【点击查看论文资源】

大家都在看

☞【数据挖掘笔记】度量数据的相异性和相似性

☞【数据挖掘笔记】四大类聚类分析方法

☞【数据挖掘笔记】k-均值聚类算法及其拓展

☞PDF编辑器安装教程☞史诗级论文查重神器

k-means聚类(matlab)_【算法推荐】kmeans++_第6张图片

觉得好看,请点这里

你可能感兴趣的:(kmeans算法,matlab,kmeans函数)