2013-07-31 3 views
0

У меня есть некоторые данные, которые необходимо классифицировать. Я попытался использовать функцию классификации described here.Классификация данных на основе обучающего набора

Мой образец - это матрица, которая имеет 1 столбец и 382 строки.

Мое обучение - это матрица с 1 колонкой и 2 рядами.

Группировка вызывает у меня проблемы. Я написал: grouping = [a,b]; где a - одна категория, а b - другая.

Это дает мне ошибку:

Undefined function or variable 'a'. 
Error in discrimtrialab (line 89) 
grouping = [a,b]; 

В дополнении к этому, как я классифицирую группу, то есть. не только точное значение в обучении?

Вот мой код:

a = -0.09306:0.0001:0.00476; 
b = -0.02968:0.0001:0.01484; 

%training = groups (odour index) 

training = [-0.09306:0.00476; -0.02968:0.01484;]; 

%grouping variable 

group = [a,b] 

%classify 

[class, err] = classify(sample, training, group, 'linear'); 

class(a) 

(обратите внимание - есть некоторая обработка выше, но это не имеет никакого отношения к вопросу)

+0

Что вы получите за 'класса (а) и' класса (б) '? – Schorsch

+0

Такая же ошибка. Ошибка вызвана, прежде чем функция классификации сделает это. – user2587726

+0

Вы хотите, чтобы 'a' был строкой? Как в '' a''? Или '' 'переменная, которая содержит категории? – Schorsch

ответ

1

Из документации:

class = classify(sample,training,group) classifies each row of the data in sample into one of the groups in training. (See Grouped Data.) sample and training must be matrices with the same number of columns. group is a grouping variable for training. Its unique values define groups; each element defines the group to which the corresponding row of training belongs.

Это «группа» должна иметь такое же количество строк, что и обучение. Из примера в помощи:

load fisheriris 
SL = meas(51:end,1); 
SW = meas(51:end,2); 
group = species(51:end); 

SL & SW является 100 × 1 матрица, которые будут использоваться для обучения (два различных измерений, выполненных на каждом из 100 образцов). группа представляет собой массив из 100 × 1 ячеек строк, указывающих, к каким видам относится каждый из этих измерений. Он также может быть массивом символов или просто списком чисел (1,2,3), где каждое число относится к другой группе, но оно должно содержать 100 строк.

например. если ваша матрица обучения была 100 х 1 матрица двойников, где первые 50 были ценности, которые принадлежали «а», а второй 50 были ценности, которые принадлежали к «Ъ» вашей группы матрицы могут быть:

group = [repmat('a',50,1);repmat('b',50,1)]; 

Однако, если все «группы» просто не перекрывающихся диапазонов, как указано здесь в комментариях:

What I want classify to do is work out whether or not each number in "sample" is type A, ie, in the range -0.04416 +/- 0.0163, or type B, with the range -0.00914 +/- 0.00742

, то вам не нужно классифицировать. Для того, чтобы извлечь значения из образца, которые равны значению плюс или минус какой-то толерантности:

sample1 = sample(abs(sample-value)<tol); 

ETA после последнего комментария: «группа» может быть числовой вектор, так что если у вас есть набор данных для обучения которые вам необходимо сгруппировать на основе диапазонов некоторой переменной, то что-то подобное (этот код не установлен, но основной принцип должен быть звук):

%presume "data" is our training data (381 x 3) and "sample" (n x 2) is the data we want to classify 
group = zeros(length(data),1); %empty matrix 

% first column is variable for grouping, second + third are data equivalent to the entries in "sample". 
training = data(:,2:3); 

% find where data(:,1) meets whatever our requirements are and label groups with numbers 
group(data(:,1)<3)=1; % group "1" is wherever first column is below 3 
group(data(:,1)>7)=2; % group "2" is wherever first column is above 7 
group(group==0)=NaN; % set any remaining data to NaN 

%now we classify "sample" based on "data" which has been split into "training" and "group" variables 
class = classify(sample, training, group); 
+0

Итак, должен ли я предопределить, к какой категории должно относиться каждая ценность? Какой смысл в этой функции? – user2587726

+0

Вы должны предопределить, в каких категориях входят значения «обучения». Затем он сообщает вам, в каких категориях попадают «образцы». (Дискриминантный анализ). например если бы это было из набора данных рыболовства, образцом были бы измерения с неизвестного вида, обучение было бы измерением от известных видов, а группами были бы данные, в которых говорится, из каких видов являются значения обучения. – nkjt

+0

Можете ли вы опубликовать, какой код мне нужно использовать, чтобы определить, в каких категориях входят значения обучения? – user2587726