【问题标题】:Classifying data based on a training set基于训练集对数据进行分类
【发布时间】:2015-03-08 07:42:37
【问题描述】:

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

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

【问题讨论】:

  • class(a)class(b) 得到什么?
  • 同样的错误。该错误是在分类函数执行此操作之前引起的。
  • 您希望a 成为字符串吗?如'a'?还是a 是一个包含类别的变量?
  • 如果您发布更多代码可能会有所帮助...
  • A 和 B 是字符串,特别是名称。我想要分类做的是确定“样本”中的每个数字是否为 A 型,即在 -0.04416 +/- 0.0163 范围内,或 B 型,范围为 -0.00914 +/- 0.00742。跨度>

标签: matlab classification


【解决方案1】:

来自文档:

class=classify(sample,training,group) 对每一行进行分类 样本中的数据到训练中的组之一。 (请参阅分组数据。) 样本和训练必须是具有相同列数的矩阵。 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)];

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

我想要分类做的是计算出每个数字是否 “样本”是 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);

【讨论】:

  • 那么,我是否必须预先确定每个值应属于哪个类别?这个函数有什么意义??
  • 您必须预先确定“训练”值属于哪些类别。然后它会告诉您“样本”值属于哪些类别。 (判别分析)。例如如果它来自 fisheriris 数据集,则样本将是来自未知物种的测量值,训练将是来自已知物种的测量值,而组将是说明训练值来自哪个物种的数据。
  • 你能发布我需要使用什么代码来预先确定训练值属于哪些类别吗?
  • 我不明白的是:mathworks.co.uk/help/stats/grouping-variables.html 表示“分组变量必须与您要分组的数据集数组或数值数组具有相同数量的观察值(行)。”这肯定意味着我必须浏览数据集,并确定它属于哪个组。在这种情况下,数据集有 381 行,所以这将需要很长时间。
猜你喜欢
  • 2015-03-13
  • 2018-12-20
  • 2021-12-07
  • 2016-06-19
  • 1970-01-01
  • 2013-03-27
  • 2021-01-25
  • 2016-02-27
  • 2016-07-12
相关资源
最近更新 更多