在优化/交叉验证操作符中执行Python失败
lionelderkrikor
主持人,RapidMiner认证分析师,会员职位:1195年独角兽
你好,
我使用“Execute Python”操作符在数据集上执行虚拟变量的生成。
我知道这个函数可以用“标称到数值”操作符执行,也可以根本不执行.......
但我发现,没有x验证/优化,创建的决策树是不一样的(及其相关的预测/准确性),当虚拟变量由“名义到数值”或由“执行Python”生成,这似乎是奇怪的.....
在我的例子中,2个“执行Python”,分别在训练和测试部分的一个“交叉验证”操作符,本身在
一个“优化”操作符,似乎没有执行,然后过程失败。
下面是我的过程:
< ?xml version="1.0" encoding="UTF-8"?> <过程version = " 7.6.001”>
> <上下文
<输入/ >
<输出/ >
<宏/ >
> < /上下文
<过程扩展= " true " >
< /操作符>
< /操作符>
<列出关键= " comparison_groups " / >
< /操作符>
< /操作符>
“参数”<列表键= >
< / >列表
<过程扩展= " true " >
<过程扩展= " true " >
<列出关键= " comparison_groups " / >
< /操作符>
< /操作符>
<列出关键= " set_additional_roles " / >
< /操作符>
< /操作符>
> < /过程
<过程扩展= " true " >
<列出关键= " comparison_groups " / >
< /操作符>
< /操作符>
<列出关键= " set_additional_roles " / >
< /操作符>
<列出关键= " application_parameters " / >
< /操作符>
<列出关键= " class_weights " / >
< /操作符>
> < /过程
< /操作符>
> < /过程
< /操作符>
<列出关键= " set_additional_roles " / >
< /操作符>
<列出关键= " application_parameters " / >
< /操作符>
<列出关键= " class_weights " / >
< /操作符>
> < /过程
< /操作符>
> < /过程
我的方法似乎是徒劳的,但也许有一个错误的“执行python”操作符,它将帮助那些谁使用
此操作符用于更有用的任务。
谢谢你的帮助。
问候,
莱昂内尔
0
最佳答案
-
JEdward RapidMiner认证分析师,RapidMiner认证专家,成员职位:578独角兽
使用Golf数据集显示的问题是属性不匹配。使用断点,我可以看到您的测试数据折叠只包含一条记录(您的训练也在一个小数字上)。
因为你在训练和测试的每一边都转换为虚拟变量,所以很可能有些属性与你的模型不匹配,因为你的测试数据可能会丢失重要的细节。
这是一种不好的做法,我建议您通过RapidMiner进程提供预处理模型来处理它。
但是,正如您所声明的那样,您需要做的是确保数据集的属性与输出匹配。你可以用像Superset这样的操作符来做到这一点。参见下面的XML。
也许你也可以张贴一个例子,你得到的不正确的结果与Nom到Num操作符?
< ?xml version="1.0" encoding="UTF-8"?> <过程version = " 7.6.001”>
> <上下文
<输入/ >
<输出/ >
<宏/ >
> < /上下文
<过程扩展= " true " >
< /操作符>
< /操作符>
<列出关键= " comparison_groups " / >
< /操作符>
< /操作符>
“参数”<列表键= >
< / >列表
<过程扩展= " true " >
<过程扩展= " true " >
<列出关键= " comparison_groups " / >
< /操作符>
< /操作符>
<列出关键= " set_additional_roles " / >
< /操作符>
< /操作符>
< /操作符>
> < /过程
<过程扩展= " true " >
< /操作符>
<列出关键= " set_additional_roles " / >
< /操作符>
<列出关键= " application_parameters " / >
< /操作符>
<列出关键= " class_weights " / >
< /操作符>这里也应该有一个替换缺失值,但我不想添加它。描述:P < / >
> < /过程
< /操作符>
> < /过程
< /操作符>
<列出关键= " set_additional_roles " / >
< /操作符>这需要在优化运行后发生。
< /操作符>
<列出关键= " application_parameters " / >
< /操作符>
<列出关键= " class_weights " / >
< /操作符>
> < /过程
< /操作符>
> < /过程2
答案
嗨@JEdward
谢谢你的回复和建议。
1.事实上,通过在“优化”操作符或过程的主窗口(在训练数据集之后)中执行虚拟变量的生成,过程运行良好。所以“Execute Pyton”运算符不是问题。
我这样做是因为在之前的主题中,我们告诉我“转换到虚拟变量需要在x-val内部完成才能正确完成”。
2.关于两种生成假人变量的方法的区别:
2.下面是使用“Execute Python”的过程:
2.b相关结果(python)
2.c这里是(相同的)使用“数字到数字”的过程:
3.d相关结果(标称到数值)
我们如何解释这种行为呢?
谢谢你!
问候,
莱昂内尔
TLDR:将温度和湿度的数据类型从整数更改为实数。
这很有趣!
这是因为你的Execute Python进程正在解析数字并将温度和湿度从整数更改为Real数据类型。由于某些原因,对于这个数据集,Real数据类型的性能明显好于Integer数据类型,我完全不知道为什么。生成的两个模型的不同之处在于,真实决策树使用温度71进行最终分割,而整数决策树使用Outlook = Rain作为最终分割。这可能与分割的计算方式有关。有人想看看DT代码,看看他们是否能发现为什么它是这样的行为吗?
最后这里是你原来的过程改变了,所以它使用Real转换,也在RapidMiner方式中使用Nom到Numeric。(因此,在训练中创建的预处理模型被传递到子过程的Test部分)。
然而,我建议在使用准确性作为性能衡量标准时要小心,因为决策树产生的结果并不能很好地对项目进行分类,尽管它的准确率很高,但它实际上只是将每天分类为高尔夫日。(虽然这在美国政治中可能是正确的,但在我们的数据集中不一定是正确的)。
嗨@JEdward
首先,感谢您花时间进行分析并更新我的流程。
我很清楚,在这种特殊情况下,准确性不是一个相关的绩效衡量标准。(我选择“默认”发布性能窗口,以“说明”两种方法的结果之间的差异)。
在这个神秘的行为被澄清之前,在实践中,当使用决策树(可能还有其他算法)时,你会推荐什么:
-系统地,在数据集上使用“数到实”运算符来处理实值?
—系统地执行一个流程两次(一次整数值/一次实数)以选择最佳模型(因为在特定的Golf情况下为真,在其他情况下可能为假)?
-什么都不做,因为在实际的案例研究中,执行了参数优化,“实际结果”和“整数结果”之间的差异将被优化过程“掩盖”(几乎完全)?
-也许有其他方法?
总结:“每天都是高尔夫日”:也许这种户外运动对身心都有好处,可以做出最好的决定...........(medidate)。
谢谢你的回复。
最好的问候,
莱昂内尔
你好,
决策树不关心实数或整数值,它都是树的双精度数组。影响它的是属性的顺序,原因很简单:当它搜索最佳分割时,如果有两个属性具有相同的好处,那么它会选择具有这种好处的第一个属性。
当你观察JEdward过程中的“整数决策树”和“真实决策树”结果时,你会发现最低节点的差异导致了相同的“纯度”分裂(3个纯是,2个否,1个错误)。当您在流程中的“Real Decision Tree”和“Integer Decision Tree”操作符之前放置一个断点时,您会看到,对于“Real Decision Tree”,属性“Temperature”是第一个,而对于“Integer Decision Tree”,属性“Outlook_rain”是第一个。
当您应用“Type1 To Type2”操作符时,属性的顺序可能会改变,特别是如果您只更改某些属性类型。
嗨@gmeier,
感谢您在这个案例中对DT行为的解释。
现在这些神秘结果的原因对我来说很清楚了。
问候,
莱昂内尔
谢谢!这就清楚了。@gmeier
这也意味着我将通过抛出带有Reorder属性的循环,将它们按随机顺序、优化或(更有可能)按重要性排序来处理自己的未来树。