【问题标题】:Classification with Matlab. Recognize classes in the test set用 Matlab 进行分类。识别测试集中的类
【发布时间】:2012-01-25 01:19:35
【问题描述】:

我有一个看似微不足道的情况,但我想不通。我在 Matlab 中有一个具有分类值的数据集。例如:

Outlook,Temperature,Humidity,Windy,Play
sunny,hot,high,false,no
sunny,hot,high,true,no
overcast,hot,high,false,yes
rainy,mild,high,false,yes
rainy,cool,normal,false,yes
rainy,cool,normal,true,no
overcast,cool,normal,true,yes

为了使用分类树(或机器学习中的其他算法),我需要将数据集转换为矩阵。我使用(假设 data 包含数据集):

double(data)

将数字分配给值。假设下雨=1,阴天=2,晴天=3,依此类推。我训练了分类树,它工作正常。但这是我的问题。如果我想预测测试数据:

overcast,cool,normal,false,yes

我需要知道 double() 分配给每个类别的数字。即阴= 2。在测试集上使用 double() 不起作用,因为不能保证 double() 分配的数字与分配给 training 数据集的数字相同。

我发现了一种非常扭曲的方法。例如,对于 Outlook:

d = zeros(size(test));
ls = getlevels(training.Outlook);
n = size(ls,2);
for i = 1:n
    d(test.Outlook == ls(i),1) = i;
end

正确分配数字是因为我检查了在 training 数据集中找到的每个 Outlook 值。这远非优雅,必须有更好的东西。

感谢任何帮助。

【问题讨论】:

  • “您通常不会将 1/2/3 用于晴天/雨天/阴天,但是 ...” classregtree() 期望分类预测变量是每个类别具有不同数值的单列。请参阅“帮助类注册表”。
  • 预测器是对的。我确信在训练集上做正确的事情。测试集就是问题所在。我想我会按照自己的方式去做。

标签: matlab dataset machine-learning


【解决方案1】:

通过“帮助数据集”等进行快速搜索并没有为我找到明确的答案。我的猜测是它们是按照 unique() 或类似的东西排序的。您可能需要联系 Mathworks 的技术支持来确定。

【讨论】:

    猜你喜欢
    • 2017-12-25
    • 2020-05-20
    • 2013-03-08
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多