从文档中:
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);