使用Python构建决策树并嵌入到Rapid Miner中

1038372110383721 成员职位:3.贡献我
2018年11月编辑 帮助

嗨,伙计们,

我正在做一个项目,我需要使用Python创建决策树,然后使用Execute Python操作符将其嵌入到快速矿工中。

以下是我的过程截图:屏幕截图2017-12-12,11.14.02.png

屏幕截图2017-12-12,11.14.16.png交叉验证中的子过程

这是我的决策树代码:

将numpy导入为np
进口熊猫作为pd
从sklearn。交叉验证导入train_test_split
从sklearn。树导入decision - treeclassifier
从sklearn。度量导入accuracy_score
从sklearn导入树

# rm_main是一个强制函数,
#参数的数量必须是输入端口的数量(可以为none)
def rm_main(数据):
#导入数据
file = ' 04_class_4 .1_german-credit- decoding .xlsx'
xl = pd.ExcelFile(文件)
打印(xl.sheet_names)

#加载一个表格到一个数据框架
Gr_raw = xl。解析(“RapidMiner数据”)

#为特性变量X和响应变量y创建数组
y = gr_raw['信用评级=良好'].values
X = gr_raw。drop('信用评级=良好',轴=1).values

#将数据分成训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=50)

#使用基尼指数构建决策树分类器
clf_gini = DecisionTreeClassifier(criterion='gini', random_state=50, max_depth=10, min_samples_leaf=5)
clf_gini。fit (X_train y_train)

返回clf_gini

当执行时,它给我一个错误,我不确定这段代码的哪一部分,我应该忽略成功的执行。

如果有任何建议或帮助,我将不胜感激!

谢谢你!

问候,

Azmir F

标记:

最佳答案

  • 1038372110383721 成员职位:3.贡献我
    解决方案接受

    感谢大家提供的解决方案。我已经想出了自己的解决办法。

    我不知道python需要数值数据来应用模型。所以我修改了我的流程,并使用了两次Execute Python操作符,一次在训练中,一次在测试中。我在第二个“执行Python”操作符之后使用了“数值到二项式”操作符。

    注意,我已将其重命名为Build Model和Apply Model。

    这是我更新的过程:屏幕截图2017-12-14,14.42.32.png

    屏幕截图2017-12-14,14.42.45.png交叉验证子过程

    我的构建模型的Python脚本如下:

    从sklearn。树导入decision - treeclassifier
    def rm_main(数据):

    #构建决策树
    X = data[['年龄','月存续期','分期付款率占可支配收入的百分比','积分金额','目前居住时间','现有积分数量','受抚养人数量']]]
    y = data[['信用评级']]]
    clf =决策treeclassifier (min_samples_split = 20, max_depth = 10, random_state = 99)
    clf。fit (X, y)

    返回clf

    我的应用模型的Python脚本如下:

    从sklearn。树导入decision - treeclassifier
    Def rm_main(模型,数据):
    X = data[['年龄','月存续期','分期付款率占可支配收入的百分比','积分金额','目前居住时间','现有积分数量','受抚养人数量']]]
    data['prediction'] = model.predict(X)

    #设置预测属性的角色为预测
    data.rm_metadata[‘预测’]=(没有,“预测”)
    返回数据

    让我知道,如果你有其他相关的解决方案或更好的脚本,以产生一个更稳定的模型。

    谢谢你!

    问候,

    Azmir F

    sgenzer azizadinugroho

答案

  • lionelderkrikorlionelderkrikor 主持人,RapidMiner认证分析师,会员职位:1195年独角兽

    嗨Azmir

    1.我认为在“交叉验证”操作符中只在Python中做模型是不可能的,因为“应用模型”操作符(在测试部分)期望“RM模型输入”并接收“Python对象”,然后流程失败。

    也许有人能解决这个问题。(如果不是RDV ^ 2。)然而,我在这个过程中更正了一些点(几周前我使用了相同的数据集....):

    增加一个“标称到数值”的运算符(python需要数值来执行模型)

    -用整个数据集构建模型(你在交叉验证中执行了分割验证,对我来说这无关紧要)

    -禁止在“Execute python”中导入数据。(python函数的参数“data”实际上是python操作符中输入的数据集)。

    这里是这个过程:

    <?xml version="1.0" encoding="UTF-8"?> <过程version = " 8.0.001”>
    > <上下文
    <输入/ >
    <输出/ >
    <宏/ >
    > < /上下文

    <过程扩展= " true " >


    .

    <列出关键= "注释" >

    < / >列表
    <列出关键= " data_set_meta_data_information " >
    /> . .
    . parameter key="3

    .



    . parameter key="9" value="Other债务人。true.多项式.attribute






    /> .



    < / >列表
    < /操作符>


    .

    <列出关键= "注释" >

    < / >列表

    <列出关键= " data_set_meta_data_information " >
    /> .

    .




    < /操作符>


    .

    <列出关键= "注释" >

    < / >列表

    <列出关键= " data_set_meta_data_information " >
    /> .

    .



    < /操作符>


    .
    <列出关键= " set_additional_roles " / >
    < /操作符>






    < /操作符>





    <列出关键= " comparison_groups " / >
    < /操作符>

    <过程扩展= " true " >


    < /操作符>



    .
    .
    > < /过程
    <过程扩展= " true " >

    <列出关键= " application_parameters " / >
    < /操作符>



    .



    .
    .
    .
    > < /过程
    < /操作符>
    /> .
    /> .
    /> . .
    /> . . .



    .
    .

    .
    > < /过程
    < /操作符>
    > < /过程

    2.我认为解决方案是使用“Execute Python”操作符执行所有子流程(构建/应用/交叉验证/性能)

    (仅使用RM算子进行数据预处理)。

    在下面的过程中,除了在1。,我已经创建了一个应用/交叉验证/性能“Execute Python”操作符,在exit中:

    - y_prediction(在训练数据集中应用决策树模型)被添加到数据集中(最后一列)

    -相关精度(~70%)

    -特征重要性

    这里是这个过程:

    <?xml version="1.0" encoding="UTF-8"?> <过程version = " 8.0.001”>
    > <上下文
    <输入/ >
    <输出/ >
    <宏/ >
    > < /上下文

    <过程扩展= " true " >


    .

    <列出关键= "注释" >

    < / >列表
    <列出关键= " data_set_meta_data_information " >
    /> . .
    . parameter key="3

    .



    . parameter key="9" value="Other债务人。true.多项式.attribute






    /> .



    < / >列表
    < /操作符>


    .

    <列出关键= "注释" >

    < / >列表

    <列出关键= " data_set_meta_data_information " >
    /> .

    .




    < /操作符>


    .

    <列出关键= "注释" >

    < / >列表

    <列出关键= " data_set_meta_data_information " >
    /> .

    .



    < /操作符>


    .
    <列出关键= " set_additional_roles " / >
    < /操作符>






    < /操作符>





    .
    <列出关键= " comparison_groups " / >
    < /操作符>



    < /操作符>


    < /操作符>
    /> .
    /> .
    /> . .
    /> . .







    .
    .

    .

    > < /过程
    < /操作符>
    > < /过程

    我希望这对你们有帮助,

    问候,

    莱昂内尔

    sgenzer Pavithra_Rao 10383721
  • JEdwardJEdward RapidMiner认证分析师,RapidMiner认证专家,会员职位:578独角兽

    下面是我使用Python进行XValidation的构建块。我有一个也与Compare Models操作符一起工作的程序,但这非常复杂。

    <?xml version="1.0" encoding="UTF-8"?> <过程version = " 7.6.001”>
    > <上下文
    <输入/ >
    <输出/ >
    <宏/ >
    > < /上下文

    <过程扩展= " true " >

    <过程扩展= " true " >


    < /操作符>



    .
    .
    > < /过程
    <过程扩展= " true " >


    < /操作符>

    <列出关键= " class_weights " / >
    < /操作符>







    .
    .
    > < /过程
    < /操作符>
    .
    > < /过程
    < /操作符>
    > < /过程
    sgenzer MartinLiebig 10383721
  • SGolbertSGolbert RapidMiner认证分析师,会员职位:344独角兽

    我觉得流程是正确的,论坛里也有类似的R流程。

    顺便说一句,我能问一下为什么需要使用Python决策树吗?通过多次使用Execute Python操作符(每CV折叠2次),你会产生巨大的开销,也会破坏RapidMiner的并行化特性。我会说,更聪明的做法是使用决策树操作符或在Execute Python操作符中执行CV。

    sgenzer
  • 1038372110383721 成员职位:3.贡献我

    我们的作业是介绍在Rapid Miner中执行Python的功能。

    谢谢你的信息!

    sgenzer
  • Thomas_OttThomas_Ott RapidMiner认证分析师,RapidMiner认证专家,会员职位:1761年独角兽

    @JEdward谢谢分享,你的示例代码将是我的救生员!!

    sgenzer
登录注册置评。