K-Means++的代码

原创 2015年11月21日 16:01:04

function [L,C] = kmeanspp(X,k)
%KMEANS Cluster multivariate data using the k-means++ algorithm.
% [L,C] = kmeans_pp(X,k) produces a 1-by-size(X,2) vector L with one class
% label per column in X and a size(X,1)-by-k matrix C containing the
% centers corresponding to each class.
% Version: 2013-02-08
% Authors: Laurent Sorber (Laurent.Sorber@cs.kuleuven.be)
L = [];
L1 = 0;
while length(unique(L)) ~= k
% The k-means++ initialization.
% C就是从X中随机挑一个随机点
C = X(:,1+round(rand*(size(X,2)-1))); %size(X,2)是数据集合X的数据点的数目,C是中心点的集合
L = ones(1,size(X,2));
for i = 2:k
D = X-C(:,L); %-1,此时的C扩大了,D相当于每个X-C的集合
D = cumsum(sqrt(dot(D,D,1))); %将每个数据点与中心点的距离,依次累加,欧氏距离
if D(end) == 0, C(:,i:k) = X(:,ones(1,k-i+1)); return; end 
C(:,i) = X(:,find(rand < D/D(end),1)); %find的第二个参数表示返回的索引的数目,D/D(end)距离越远概率越大
[~,L] = max(bsxfun(@minus,2*real(C'*X),dot(C,C,1).')); %碉堡了,这句,将每个数据点进行分类。
end
% The k-means algorithm.
% any函数:检测矩阵中是否有非零元素,如果有,则返回1,否则,返回0。
while any(L ~= L1)
L1 = L;
for i = 1:k, l = L==i; C(:,i) = sum(X(:,l),2)/sum(l); end %l是各族索引
[~,L] = max(bsxfun(@minus,2*real(C'*X),dot(C,C,1).'),[],1);
end
end

 

 

clear all; close all; clc
x=[randn(3,2)*.4;randn(4,2)*.5+ones(4,1)*[4 4]];
[L, C] = kmeanspp(x',2);
L
C


《机器学习实战》(十)——k-means、k-means++、二分K-means

原理 创建K个点作为起始质点。每次迭代如下: 将各个数据点分配到离它距离最近的质点的簇。 全部分配后,用各个簇中的数据点的位置均值来更新质点的位置。 直到达到迭代次数,或者所有的数据点所在的簇不再改...
  • u011239443
  • u011239443
  • 2017年03月30日 18:45
  • 976

k-means++算法的c++实现

k-means++是机器学习领域一种基本的聚类算法
  • zhouliyang1990
  • zhouliyang1990
  • 2014年05月07日 11:20
  • 1964

简单易学的机器学习算法——K-Means++算法

K-Means++
  • google19890102
  • google19890102
  • 2016年12月06日 13:39
  • 4585

K-Means++算法 及应用

k-means算法是一种基本的聚类算法,这个算法的先决条件是   1)必须选择最终结果需要聚为几类,就是k的大小。   2)初始化聚类中心点,也就是seeds。   当然,我们可以在输入的数据集...
  • ouyangying123
  • ouyangying123
  • 2016年12月28日 19:41
  • 1298

K-means和K-means++算法代码实现(Python)

K-means和K-means++主要区别在于,K-means++算法选择初始类中心时,尽可能选择相距较远的类中心,而K-means仅仅是随机初始化类中心。 #K-means算法 from py...
  • lanse_zhicheng
  • lanse_zhicheng
  • 2018年01月11日 10:16
  • 19

K-Means算法Java实现

K-Means算法作为很简单的聚类算法,但是应用很广泛。关于K-Means算法理论讲解请参照  算法杂货铺——k均值聚类(K-means)  这篇文章,该文章讲解的非常到位。下面仅给出算法的Java实...
  • xtsylc
  • xtsylc
  • 2015年07月05日 14:55
  • 647

K-Means++算法之NBA后卫分类

coolshell有一篇讲K-Mean算法的博文,讲的非常好,研究生阶段学过这个算法。记得研究生阶段学过ISODATA算法,当时的家庭作业是这个算法的实现。K-Means比较简单,简单的讲,就是距离比...
  • qizheguang
  • qizheguang
  • 2016年01月21日 09:32
  • 102

k-means/k-means++算法的笔记及scala实现

写在前面 一小谈聚类与分类 二基本k-means算法1 概述 2 代价函数 3 算法主要步骤 4 选择初始簇心 5 聚类数的选择   6 代码实现 三k-means算法1 概述    2 算法主要步...
  • u012369535
  • u012369535
  • 2017年11月15日 16:45
  • 129

K-Means++ 聚类之数据可视化:使用gnuplot

http://blog.chinaunix.net/uid-24774106-id-3415470.html    周末做了K-Means++聚类分析之NBA后卫分类,但是我不爽的一点是最后的结果不直...
  • ztguang
  • ztguang
  • 2016年02月01日 00:00
  • 622

机器学习实战ByMatlab(三)K-means算法

K-means算法属于无监督学习聚类算法,其计算步骤还是挺简单的,思想也挺容易理解,而且还可以在思想中体会到EM算法的思想。K-means 算法的优缺点: 1.优点:容易实现 2.缺点:可能...
  • llp1992
  • llp1992
  • 2015年04月17日 13:31
  • 5754
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:K-Means++的代码
举报原因:
原因补充:

(最多只允许输入30个字)