【发布时间】:2012-05-27 06:44:54
【问题描述】:
我有这个数据集:
Instance num 0 : 300,24,'Social worker','Computer sciences',Music,10,5,5,1,5,''
Instance num 1 : 1000,20,Student,'Computer engineering',Education,10,5,5,5,5,Sony
Instance num 2 : 450,28,'Computer support specialist',Business,Programming,10,4,1,0,4,Lenovo
Instance num 3 : 1000,20,Student,'Computer engineering','3d Design',1,1,2,1,3,Toshiba
Instance num 4 : 1000,20,Student,'Computer engineering',Programming,2,5,1,5,4,Dell
Instance num 5 : 800,16,Student,'Computer sciences',Education,8,4,3,4,4,Toshiba
我想使用 SMO 和其他多类分类器进行分类,所以我使用以下代码将所有标称值转换为数字:
int [] indices={2,3,4,10}; // indices of nominal columns
for (int i = 0; i < indices.length; i++) {
int attInd = indices[i];
Attribute att = data.attribute(attInd);
for (int n = 0; n < att.numValues(); n++) {
data.renameAttributeValue(att, att.value(n), "" + n);
}
}
结果是:
Instance num 0 : 300,24,0,0,0,10,5,5,1,5,0
Instance num 1 : 1000,20,1,1,1,10,5,5,5,5,1
Instance num 2 : 450,28,2,2,2,10,4,1,0,4,2
Instance num 3 : 1000,20,1,1,3,1,1,2,1,3,3
Instance num 4 : 1000,20,1,1,2,2,5,1,5,4,4
Instance num 5 : 800,16,1,0,1,8,4,3,4,4,3
应用“标准化”过滤器后,结果将如下所示:
Instance num 0 : 0,0.666667,0,0,0,1,1,1,0.2,1,0
Instance num 1 : 1,0.333333,1,1,1,1,1,1,1,1,1
Instance num 2 : 0.214286,1,2,2,2,1,0.75,0,0,0.5,2
Instance num 3 : 1,0.333333,1,1,3,0,0,0.25,0.2,0,3
Instance num 4 : 1,0.333333,1,1,2,0.111111,1,0,1,0.5,4
Instance num 5 : 0.714286,0,1,0,1,0.777778,0.75,0.5,0.8,0.5,3
问题是仍在字符串“Normalize”过滤器中转换的列不会对其进行规范化...
有什么想法吗?
还有我的第二个问题:除了 SMO,我应该使用什么作为多类分类器?
【问题讨论】:
-
想要的结果是什么?你想对字符串发生什么?至于替代的多类分类器,knn 或 J48 决策树将是一个很好的基准。
-
期望的结果是笔记本电脑的品牌(数据集中的最后一列),但是 SMO 评估的结果有问题,正确分类的实例 30.6452 % ,我尝试了几个分类器和正确分类的比例仍然低于 35% 我该怎么办?
-
您有多少个实例?获取更多数据可以改善结果。你有多少类/品牌?如果你有 200 节课,35% 一点也不差。
-
我有 200 个实例和 12 个类我需要多少实例?
-
很难说,取决于数据集的“难度”。但是每个类大约有 16 个实例,每个实例有 10 个属性。这显然不足以覆盖整个实例空间。您还应该问自己目标是什么,什么是合理的结果。常识表明,职业、年龄和预算等因素不足以可靠地确定某人的品牌偏好,但如果您达到 40-50%,那将是一个非常有根据的猜测。可能比人类专家在这项任务上的成就要好。
标签: machine-learning normalization weka svm