首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R与Python决策树

R与Python决策树
EN

Data Science用户
提问于 2018-05-09 08:44:30
回答 3查看 4.6K关注 0票数 8

根据我的经验,R决策树返回比python决策树更精确的结果。能不能再证实这个假设,也许知道原因?

EN

回答 3

Data Science用户

回答已采纳

发布于 2018-05-09 08:51:10

决策树涉及很多超参数-

  • 每片叶/叶中的最小/最大样本
  • 大小
  • 树深
  • 分裂准则(吉尼/熵)等

现在,不同的包可能具有不同的默认设置。即使在Rpython中,如果您使用多个包并比较结果,它们很可能是不同的。

没有任何迹象表明R“更好”

如果希望获得相同的结果,则需要确保隐式默认值类似。例如,尝试运行以下代码:

代码语言:javascript
复制
fit <- rpart(y_train ~ ., data = x_train,method="class",
             parms = list(split = "gini"), 
             control = rpart.control(minsplit = 2, minbucket = 1, xval=0, maxdepth = 30))

(predicted5= predict(fit,x_test))
    setosa versicolor virginica
149      0  0.3333333 0.6666667

这里,选择参数minsplit = 2, minbucket = 1, xval=0maxdepth = 30,以便与sklearn-options相同,参见这里maxdepth = 30rpart给你的最大价值;

另一方面,sklearn在这里没有束缚。如果您希望probabilities是相同的,那么您可能也想使用cp参数。

类似地,与

代码语言:javascript
复制
model = tree.DecisionTreeClassifier(criterion='gini', 
                                    min_samples_split=20, 
                                    min_samples_leaf=round(20.0/3.0), max_depth=30)
model.fit(iris.data, iris.target)

我得到了

代码语言:javascript
复制
print model.predict([iris.data[49]])
print model.predict([iris.data[99]])
print model.predict([iris.data[100]])
print model.predict([iris.data[149]])
print model.predict([[6.3,2.8,6,1.3]])

[0]
[1]
[2]
[2]
[1]

这与您最初的R输出类似。

总之,我相信R中的缺省值更适合您正在处理的数据集,从而获得“更好”的结果。但请放心,它们是相似的,因为参数是明确和平等的。

希望这能有所帮助!

票数 7
EN

Data Science用户

发布于 2018-10-02 07:13:50

主要的区别是R/rpart的实现有后期剪枝,而scikit学习没有。我可能会导致许多过分适合的情况下,科学知识学习。

票数 5
EN

Data Science用户

发布于 2020-02-27 11:21:00

它看起来也像rpart直接处理分类变量,但是科学知识-学习没有。

为什么分类变量与其他工具相比,需要在科学工具中进行预处理?大多数scikit-learn假设数据位于单个数字dtype的NumPy数组或SciPy稀疏矩阵中。目前,这些都没有明确地表示绝对变量。因此,与R的data.frames或pandas.DataFrame不同,我们需要显式地将分类特征转换为数字值,正如编码分类特性中所讨论的那样。还请参阅具有混合类型的列转换器,以获得处理异构(例如分类和数值)数据的示例。

票数 5
EN
页面原文内容由Data Science提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://datascience.stackexchange.com/questions/31424

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档