基于训练集对数据进行分类

时间:2013-07-31 13:47:18

标签: matlab classification

我有一些需要分类的数据。我尝试过使用分类功能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)

(注意 - 在此之上有一些处理,但它与问题无关)

1 个答案:

答案 0 :(得分:1)

来自文档:

  

class = classify(sample,training,group)对每一行进行分类   样本中的数据进入训练组中的一组。 (参见分组数据。)   样本和训练必须是具有相同列数的矩阵。   group是用于训练的分组变量。其独特的价值定义   组;每个元素定义相应行的组   培训属于。

也就是说,“group”必须与训练具有相同的行数。从帮助中的示例:

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

SL& SW是用于训练的100×1矩阵(对100个样本中的每一个进行两次不同的测量)。 group是一个100 x 1的字符串数组,表示每个测量属于哪些物种。它也可以是一个字符数组或只是一个数字列表(1,2,3),其中每个数字指的是一个不同的组,但它必须有100行。

e.g。如果您的训练矩阵是100 x 1的双精度矩阵,其中前50个是属于'a'的值,而后50个是属于'b'的值,则您的群矩阵可以是:

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

但是,如果所有“组”都只是评论中所述的非重叠范围:

  

我想要分类做的是弄清楚每个号码是否在   “样品”是A型,即在-0.04416 +/- 0.0163范围内,或B型,   范围-0.00914 +/- 0.00742

那么你真的不需要分类。要从样本中提取等于值加上或减去某个容差的值:

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

最新评论后的ETA:“group”可以是一个数字向量,所以如果你有一个你需要根据某个变量的范围进行分组的训练数据集,那么(这段代码是未经检查但是基本原理)应该是健全的):

%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);