RapidMiner:我可以使用通配符作为属性值来训练决策树模型吗?

Posted

技术标签:

【中文标题】RapidMiner:我可以使用通配符作为属性值来训练决策树模型吗?【英文标题】:RapidMiner: Can I use a wildcard as an attribute value for training a decision tree model? 【发布时间】:2015-06-20 03:05:33 【问题描述】:

我正在 RapidMiner 5.3.013 中开发一个相当简单的过程,它读取一个 CSV 文件并将其用作训练集来训练决策树分类器。该过程的结果就是模型。读取第二个 CSV 并将其用作未标记集。模型(之前计算的)应用到未标记的测试集,以努力正确地标记它。

CSV 的每一行都包含一些属性,例如: 15, 0, 1555, abc*15, label1

但训练集的某些行可能是这样的: 15, 0, *, abc*15, label2 这样做是因为第三个值可能取不同的值,因此训练集的创建者使用星号作为通配符来代替值。

我想做的是让决策树知道那里的星意味着“匹配任何东西”,这样它就不会只匹配一个星。

注意事项:

    第 4 个字段 (abc*15) 中的星号应按字面意思匹配,而不是通配符。 如果第三个字段总是包含星号,我不能将它包含在属性中,但事实并非如此。有时第三个字段包含整数值,应按字面意思匹配。 我尝试将该字段留空,但它不起作用

那么,有没有办法在训练分类器或使用模型时使用正则表达式,或者至少是一个简单的通配符?

另一种说法是:我可以指示分类器不使用某些条目(CSV 中的行)中的某些属性吗?

谢谢!

【问题讨论】:

我最终做的是修改决策树模型创建者的 Java 代码。它奏效了!我在我的论文中使用了它:)。我一直在等我有空闲时间来正确地写一个答案,但这不会很快发生,因此我现在要做的就是这个评论。如果有人需要更多详细信息,请询问,我会在附近。 【参考方案1】:

我会处理数据,以便缺失值本身是有效的,并且我会将有效数字离散化为范围内。

更详细地说,我的意思是缺少属性的值类似于* 的情况。我只是允许这是该属性采用的一个有效值。对于此属性的所有其他值,它们都是数字,因此需要将它们转换为标称值以与现在有效的* 兼容。

这样做相当繁琐,我还没有尝试过,但我会从运算符Declare Missing Value 开始检测* 并使它们丢失。从那里,我将使用运算符Discretize by Binning 将数字转换为标称值。最后,我将使用Replace Missing Values 将缺失值更改为标称值,例如Missing。你可能会问,为什么要麻烦上面的第一个 Declare Missing 步骤?原因是它允许离散化操作工作,因为它只处理数字,因为非数字被标记为缺失。

然后以正常方式将生成的示例集传递给模型。显然,模型必须能够处理名义属性(决策树可以)。

我突然想到,一些建模运算符对缺失数据的容忍度更高。我认为k最近邻可能是其中之一。在这种情况下,您可以像上面一样简单地标记缺失的部分,而不必费心离散化步骤。

确实需要注意缺失数据的整个区域,因为了解缺失的来源很重要。如果缺失数据与其他属性或标签本身相关,则处理不当可能会导致结果出现偏差。

【讨论】:

感谢您的回复。您能否添加一个示例或更多解释以帮助我更好地理解解决方案? >>> 第 1 部分:我可以对数据(训练集和测试集)进行预处理,但是“缺失值”是什么意思?也许是训练集中的通配符? >>> 第2部分:因此,我可以将它们声明为数字并让树生成范围,而不是将单个值视为名义值,对吗?但这并没有真正解决问题,因为通配符应该匹配任何值,所以范围是 0 到最大值。 我之前的回复有点简短 - 我将直接对其进行编辑,使其更加独立。

以上是关于RapidMiner:我可以使用通配符作为属性值来训练决策树模型吗?的主要内容,如果未能解决你的问题,请参考以下文章

RapidMiner - 将多项式属性更改为数字/整数

将RapidMiner ExampleSet属性转换为FileObject

向 Rapidminer 中的数字属性添加常量值

内存缓存和通配符

使用 RapidMiner 设计聚类过程

rapidminer 如何把数据导出吗