2014-10-30 69 views
0

其实我正在做的是我想写我自己的k-均值聚类函数。但是,为了给出最初的输入,我不知道如何在Matlab中做到这一点。我的意思是,函数的一个输入是聚类中心的数量k,然后我们需要输入函数在第一次迭代中使用的k个初始值。但是k可能会改变,并且初始值的数量也会改变。那么我怎么用Matlab来做到这一点。我希望输入是一个整数k和k个初始值。随着不同的k,不同的初始输入数量发生变化,所以我能做些什么?输入值的数量变化

在此先感谢!

+0

使用'input'命令让用户输入'k'的值,'k'初始值可以随机选择。所以你可以选择'k'个随机数据点:'yourData(randi(size(data,1),[k 1]),:)'。假设您每行存储1个数据样本,并且您的功能会跨越列。 – 2014-10-30 01:18:42

+0

@ ParagS.Chandakkar,我不想使用随机初始值,但我想定义某些初始值。我该怎么办? – 2014-10-30 01:48:40

+0

然后让用户在for循环中使用'input'输入这些。即使数据是10个样本,10个特征和3个群集,用户必须输入3个矢量,每个矢量的长度都是10,那么您确定要这么做吗? – 2014-10-30 02:17:31

回答

1

为什么你需要k + 1个输入?你不能只使用一个输入? 例如聚类2维:

function [ returnValues] = kMeans(centers) 
% get number of cluster centers 
k = size(centers,1); 
for i = 1:k 
    % select each center individually: 
    center = centers(i,:); 
    % process 
end 

具有三个聚类中心[1,2],[3,4]和[5,6]的示例性呼叫将被:

values = kMeans([1,2;3,4;5,6]); 
0

随着输入变量nuber:

function retVal = kMeans(varargin) 
% at least k has to be given 
if length(varargin) < 1 
    error('Wrong number of arguments given'); 
end 
k = varargin{1}; 
disp(['K: ',num2str(k)]); 
%check if k+1 inputs are given 
if length(varargin) ~= k+1 
    error('Wrong number of arguments given'); 
end 
% process inputs 
for i = 1+(1:k) 
    center = varargin{i}; 
    disp(['Input Center ',num2str(i-1),' : ', num2str(center)]); 
end 
end 

当与kMeans(2,[1,2],[3,4])称为它输出:

K: 2 
Input Center 1 : 1 2 
Input Center 2 : 3 4