0

我有一些需要分类的数据。我尝试使用此处描述的分类功能。

我的示例是一个具有 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)

(注意 - 上面有一些处理,但这与问题无关)

4

1 回答 1

1

从文档中:

class =classify(sample,training,group) 将 sample 中的每一行数据分类到训练中的组之一。(请参阅分组数据。)样本和训练必须是具有相同列数的矩阵。group 是用于训练的分组变量。其独特的价值观定义了群体;每个元素定义对应的训练行所属的组。

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

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

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

例如,如果您的训练矩阵是 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:“组”可以是一个数字向量,所以如果你有一个训练数据集,你需要根据某个变量的范围进行分组,那么类似(此代码未选中,但基本原则应该是合理的):

%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);
于 2013-08-02T10:37:17.023 回答