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

Matlab 基于训练集对数据进行分类,matlab,classification,Matlab,Classification,我有一些数据需要分类。我尝试过使用分类功能 我的示例是一个有1列和382行的矩阵 我的培训是一个1列2行的矩阵 分组给我带来了问题。我写过:grouping=[a,b]其中a是一个类别,b是另一个类别 这给了我一个错误: Undefined function or variable 'a'. Error in discrimtrialab (line 89) grouping = [a,b]; 除此之外,我如何对一个群体进行分类,即不仅仅是训练中的确切价值 这是我的密码: a = -0.09

我有一些数据需要分类。我尝试过使用分类功能

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

(注意:以上有一些处理,但与问题无关)

来自文档:

class=分类(样本、培训、组)对数据的每一行进行分类 将样本中的数据分为训练中的一组。(请参见分组数据。) 样本和训练必须是列数相同的矩阵。 group是用于培训的分组变量。其独特的价值定义 组;每个元素定义对应行所属的组 当然,训练是必要的

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

load fisheriris
SL = meas(51:end,1);
SW = meas(51:end,2);
group = species(51:end);
SL和SW是用于培训的100 x 1矩阵(在100个样本中的每个样本上进行两次不同的测量)。组是一个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);

sample1=sample(abs(样本值)
class(a)
class(b)你得到了什么
?相同的错误。该错误是在分类函数执行它的功能之前产生的。是否希望
a
成为字符串?如
'a'
?或者
a
是包含类别的变量?如果发布更多的代码,可能会有所帮助…a和B是字符串,特别是名称。我想让分类做的是确定它们是否都是字符串“样本”中的数字是类型A,即范围-0.04416+/-0.0163,或范围-0.00914+/-0.00742的类型B。那么,我是否必须预先确定每个值应该属于哪一类?此函数的意义是什么?您必须预先确定“训练”值属于哪一类。然后它会告诉您“样本”属于哪一类值分为(判别分析)例如,如果是来自Fisherris数据集,则样本将是来自未知物种的测量值,训练将是来自已知物种的测量值,组将是表示训练值来自哪些物种的数据。您能否发布我需要使用哪些代码来预定训练值属于哪些类别?我不在哪些类别下stand是这样的:表示“分组变量必须具有与正在分组的数据集数组或数字数组相同的观察数(行)”,这当然意味着我必须遍历数据集,并确定它属于哪个组。在这种情况下,数据集有381行,因此这将花费很长时间。
%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);