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仿真代码

  • 2017-05-31 17:05
  • 105KB
  • 下载

K-means matlab代码实现

  • 2012-12-27 15:11
  • 31KB
  • 下载

[algorithm,c++] 基于c++的二维k-means代码实现

利用上课期间打的草稿,这里仅仅实现的是数据输入, 后续的 k-means #include #include #include #include using namespace std ...

K-Means代码

K-means matlab代码

[python] 基于k-means和tfidf的文本聚类代码简单实现

基本步骤包括: 1.使用python+selenium分析dom结构爬取百度|互动百科文本摘要信息; 2.使用jieba结巴分词对文本进行中文分词,同时插入字典关于关键...

K-means代码

  • 2015-12-26 16:29
  • 90KB
  • 下载

matlab k-means 实现代码

K-means 聚类算法及其代码实现

序言K-means算法是非监督学习(unsupervised learning)中最简单也是最常用的一种聚类算法,具有的特点是: 对初始化敏感。初始点选择的不同,可能会产生不同的聚类结果 最终会收敛。...

基于python3的k-means代码实现

k-means算法是非监督学习的一种,其中k值是随机选取的,在本代码中是人为指定为2,准备聚两个类。 算法描述:1. 加载数据2. 聚类2.1、 初始化聚类中心,随机选取两个点作为聚类中心点。2.2...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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