k-means算法在上篇文章中已经推送,可以参考【数据挖掘笔记】K-均值算法及其拓展。一、k-means算法
二、k-means++算法
k-means++算法流程如下:
k-means++算法通俗地讲,流程如下:任意从n个数据对象中选取一个初始簇中心点c_1;
根据概率公式计算每一个数据对象离它最近的中心点之间的距离D(x)及其被选中为下一个中心点的概率:
选择发生概率最大的数据对象作为下一个中心点,重复上述操作,直到找到k个中心点为止。
调用标准的k-means算法进行重定位直到完成迭代。
直接调用MATLAB库函数kmeans,其调用格式如下:三、k-means++算法实现
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 内存的个人电脑上进行了本文的实验。
图1:k-means聚类结果
图2:k-means++聚类结果
分别重复10次实验,去迭代次数为30,迭代完成后误差(距离簇中心的均方差)如下:表1:误差表
Method |
k-means |
k-means++ |
Error |
2933.1733 |
2762.4863 |
参考文献
Arthur D., Vassilvitskii S. K-Means++: The Advantages of Careful Seeding [C], Eighteenth Acm-siam Symposium on Discrete Algorithms. ACM, 2007. 【点击查看论文资源】
大家都在看
☞【数据挖掘笔记】度量数据的相异性和相似性
☞【数据挖掘笔记】四大类聚类分析方法
☞【数据挖掘笔记】k-均值聚类算法及其拓展
☞PDF编辑器安装教程☞史诗级论文查重神器觉得好看,请点这里↓↓↓