【发布时间】: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