我正在使用RapidMiner 5.3.013中一个相当简单的进程,它读取CSV文件并将其用作训练集来训练决策树分类器。该过程的结果是模型。读取第二个CSV并用作未标记的集合。模型(先前计算)应用到未标记的测试集,以便正确标记它。
CSV的每一行都包含一些属性,例如:
15,0,1555,abc * 15,label1
但是训练集的某些行可能是这样的:
15,0, * ,abc * 15,label2
这样做是因为第三个值可能采用不同的值,因此训练集的创建者在值的位置使用星形作为通配符。
我想做的是让决策树知道那里的星星意味着“匹配任何东西”,这样它就不会只匹配一颗星。
注意:
那么,有没有办法在训练分类器或使用模型时使用正则表达式,或者至少使用简单的通配符?
另一种说法是:我可以指示分类器不使用某些条目中的某些属性(CSV中的行)吗?
谢谢!
答案 0 :(得分:1)
我会处理数据,因此缺失值本身就是有效的,我会将有效数字离散化为范围。
更详细地说,我所缺少的意思是属性的值类似于*
的情况。我只是允许这是属性所采用的一个有效值。对于此属性的所有其他值,这些值都是数字,因此需要将它们转换为标称值以与现在有效的*
兼容。
执行此操作非常繁琐但我还没有尝试过,但我会从操作员Declare Missing Value
开始检测*
并让它们丢失。从那里,我将使用运算符Discretize by Binning
将数字转换为名义值。最后,我会使用Replace Missing Values
将缺失值更改为名义值Missing
。您可能会问为什么还要为上面的第一个Declare Missing步骤而烦恼?原因是它允许离散操作起作用,因为它会单独处理数字,因为非数字被标记为缺失。
然后,以正常方式将结果示例集传递给模型。显然,模型必须能够处理名义属性(决策树确实如此)。
在我看来,一些建模操作员更容忍丢失数据。我认为k-最近邻居可能是一个。在这种情况下,您可以简单地将缺失的标记标记为上述内容,而不必为离散步骤而烦恼。
缺失数据的整个区域确实需要小心,因为了解缺失的来源非常重要。如果缺失的数据与其他属性或标签本身相关,则不恰当地处理它可能会导致结果偏差。