2014-10-30 58 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