决策树:使用/不使用“标称到数值”运算符会产生不同的结果
lionelderkrikor
主持人,RapidMiner认证分析师,会员职位:1195年独角兽
你好,
我用Rapidminer做了一些关于决策树的实验,我发现了奇怪的结果:
当在训练数据集和测试数据集之后插入或不插入算子“标称到数字”(例如使用“虚拟编码”)时,所得到的决策树不一样,然后在某些示例中对测试数据集的预测置信度不同。(这些差别非常小:两种情况下的最终预测是相同的)。
但我们如何解释这种行为呢?
其他分类算法呢?
应该选择哪种方法?
下面是使用“标称到数字”运算符的过程:
<?xml version="1.0" encoding="UTF-8"?> <过程version = " 7.6.001”>
> <上下文
<输入/ >
<输出/ >
<宏/ >
> < /上下文
<过程扩展= " true " >
< /操作符>
< /操作符>
< /操作符>
<列出关键= " comparison_groups " / >
< /操作符>
< /操作符>
< /操作符>
<列出关键= " application_parameters " / >
< /操作符>
<列出关键= " application_parameters " / >
< /操作符>将标称值转换为唯一的整数(在Python操作符中需要这样做) 使用Python中的sklearn模块构建模型并将模型应用于测试数据
> < /过程
< /操作符>
> < /过程
谢谢你的回复。
问候,
莱昂内尔
0
最佳答案
-
Telcontar120 主持人,RapidMiner认证分析师,RapidMiner认证专家,会员职位:1635年独角兽
这确实是很多问题!我可能不会完全详细地回答他们,但这里有一些想法。
- 我想说的是,在处理树中的标称预测器时,“标准做法”不是使用“标称到数字”,因为这种转换对于算法的正常工作来说是不必要的,而且它可以通过修改原始形式的属性的信息增益来扭曲结果(正如您所看到的)。不管你对预测器的方法是什么,我强烈推荐交叉验证作为模型构建和决策树关键参数优化的最佳实践。我看到您下面的初始流程没有利用交叉验证或优化。
- 当然,如果您出于其他原因决定更喜欢基于虚拟变量构建的树的版本,这取决于您,但根据我的经验,大多数分析师会将名义变量单独留给树。如果你确实创建了它们,我会说在RapidMiner中使用你所展示的方法是最简单的。充分说明——我没有花时间尝试检查下面提供的两个方法之间的具体区别,也没有深入研究python代码。理论上它们应该是一样的。
- 在可信关系的情况下,RapidMiner将把预测分配给第一个标签(因此在标称的情况下,它将取决于类值的字母顺序)。
1
答案
树不同的一个原因是,在将单个名义变量转换为一系列虚拟变量之后,与任何单个属性相关的信息增益(或树性能的相关度量)在两种情况下都是不相同的,因此树生长算法不一定会以相同的顺序选择相同的属性。正如您所注意到的,由于所使用的基础数据没有差异,因此结果的实际差异不应该有很大的不同,但这足以导致树的差异,特别是当它与所设置的任何修剪和预修剪选项交互时。您可以使用Golf数据集轻松地测试这一点。
Lindon合资企业
乐鱼平台进入来自认证RapidMiner专家的数据科学咨询
嗨@Telcontar120
谢谢你的回复。
根据您的回复和建议,我遵循了我的实验和.........我有几个(新)问题.....
1.决策树:是否为虚拟变量,这是个问题......
事实上,在“高尔夫数据集”中,创建的模型之间存在显著差异(使用或不使用假人变量),然后是置信度,然后是预测,最后是创建模型的准确性。
那么在实践中,什么是最好的方法呢?
-用两种方法创建两个模型,对创建的模型进行x验证并选择最佳模型?另一个?
-更一般地说,这种方法是否适用于其他分类算法?
2.决策树:如何生成虚拟变量.......?
这是一个奇怪的问题....但正如之前所说,我遵循我的实验:
我决定用2种方法创建虚拟变量:
-一个与“数字到数字”操作符(如何以前)。过程如下:
-使用Python语言的pd.get_dummies()函数(带有"Execute Python"操作符)。过程如下:
运行之后,2个创建的过程不会产生相同的决策3,然后是相同的置信度,然后是相同的预测最后两个模型的精度不一样。
如何解释这种行为?
3.附属问题:RM的分类预测
对于两个类的问题(高尔夫为YES/NO), RM显示的置信度为:
-置信度(no) = 0.500
—置信度(yes) = 0.500
RM使用什么规则来生成“预测”?
有很多问题。
再次感谢您的回复。
问候,
莱昂内尔
你好,
请记住,到虚拟变量的转换需要在x-val内部完成才能正确完成。
最好的
马丁
德国多特蒙德
嗨@Telcontar120
谢谢你给我一些时间,谢谢你的建议。
在我的过程中没有交叉验证/优化参数,因为我是一个好奇的人,我决定执行“简单实验”来研究创建的模型(及其性能)中虚拟变量(或名义变量)的影响。
我正在探索数据科学和Rapidm乐鱼平台进入iner,我是一个试图理解什么时候出现了奇怪的事情的人
或者不合逻辑,这就是为什么..........我问了很多问题。
再次谢谢你。
最好的问候,
莱昂内尔
Lindon合资企业
乐鱼平台进入来自认证RapidMiner专家的数据科学咨询
嗨@mschmitz
我没有忘记您在之前的主题中建议在过程中执行x验证,但在这种情况下,我只是想研究虚拟变量/名义变量对决策树的影响。
但是你提醒我这个实践是对的:我必须从一开始就采用“最佳实践”……
在运行了一个包括参数优化操作符内部交叉验证的过程之后,假变量/名义变量的影响是微不足道的:两个模型具有相同的精度。
我已经明白,在处理树中的标称预测器时,“标准做法”是不使用“标称到数字”。
然而,我在RM的社区统计中看到,对于使用“标称到数字”操作符的用户
~80%的人选择“虚拟编码”。那么在哪种情况下,这个运算符是适用的呢?有一般规则吗?取决于研究案例?取决于算法?
感谢您的回复。
问候,
莱昂内尔
嗨,莱昂内尔,
非常好的问题。让我详细讲一下。
标称到数字虚拟编码
大多数学习算法(支持向量机,神经网络,glm)需要你添加数值输入。数据科学家的一项艰巨任务是将数据转换成数字格式。两种快速的方法是唯一整数或虚拟编码(也称为热编码)。两者都有缺点。
唯一的整数1意味着一个度规。假设你有类{绿色,黄色,红色}并将它们映射到1,2,3。红绿之间的距离是红黄距离的2x吗?这不是给定的。它可能是(在交通灯的情况下),但这取决于您的用例。如果你能按照“自然”的顺序排列,那就太好了。这比什么都好。
另一方面,虚拟编码的方法并不意味着这样的事情。它的缺点是它会生成许多属性。这增加了算法的共线性和运行时间。如果你有很多课程,这一点尤其正确。一个反策略是将提名者分成更大的组。一般来说,使用虚拟编码优于其他方法——因此是80%。
在您的特殊情况下,您不需要这样做,因为基于树的模型(决策树、RF、gbt)可以很好地处理标称值。这就是它们非常受欢迎和强大的原因之一。
X-Val和虚拟编码
这是个棘手的问题。我经常这样解释:
当你的算法做一些基于数据的事情时,你可以称之为模型的一部分。一个很好的问题是,为什么k-NN或k-Means不能自己归一化?规范化操作符是从数据中提取min/max或std_dev/mean来执行此操作,因此是它的一部分。
从标称到数字也从数据中提取了一些东西——类的存在。如果类不存在于数据中,则它的属性不存在。在极少数情况下,您可能会创建一个“class= a”,其中只有0用于测试。这可能会产生有偏差的结果。
我希望这能被理解。
欢呼,
马丁
德国多特蒙德
嗨,马丁,
谢谢你花时间回答我的问题,你的解释很有启发意义。
我更好地理解了这些基本概念,即将数据转换为数字格式和虚拟编码的过程。
最好的问候,
莱昂内尔