2014-10-30 4 views
0

Фактически я делаю то, что я хочу написать свою собственную функцию кластеризации k-средних. Но, чтобы дать исходные данные, я не знаю, как это сделать в Matlab. Я имею в виду, что один вход функции - это количество центров кластера, k, а затем нам нужно ввести k начальных значений, которые функция будет использовать на первой итерации. Но k может измениться, и количество начальных значений изменится. Итак, как я могу это сделать, используя Matlab. Я хочу, чтобы ввод был целым числом k и k начальными значениями. С разным k меняется разное количество исходных входов, так что я могу сделать?число входных значений меняется

Спасибо заранее!

+0

используйте команду 'input', чтобы пользователь вводил значение' k', а начальные значения 'k' можно выбрать случайным образом. Таким образом, вы можете просто выбрать «k» случайные точки данных как: 'yourData (randi (размер (данные, 1), [k 1]), :)'. Это предполагает, что вы храните 1 образец данных в строке, а ваши функции идут через столбцы. –

+0

@ ParagS.Chandakkar, я не хочу использовать случайные начальные значения, но я хочу определить некоторые начальные значения. Что мне делать? –

+0

Затем заставьте пользователя вводить эти значения, используя 'input' в цикле for. Вы уверены, что хотите это сделать, даже если данные являются 10 образцами, 10 функциями и 3 кластерами, пользователь должен ввести 3 вектора, каждая из которых равна 10, что слишком много. –

ответ

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

с переменным Колличесто входов:

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