根据我的经验,R决策树返回比python决策树更精确的结果。能不能再证实这个假设,也许知道原因?
发布于 2018-05-09 08:51:10
决策树涉及很多超参数-
现在,不同的包可能具有不同的默认设置。即使在R或python中,如果您使用多个包并比较结果,它们很可能是不同的。
没有任何迹象表明R“更好”
如果希望获得相同的结果,则需要确保隐式默认值类似。例如,尝试运行以下代码:
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=0和maxdepth = 30,以便与sklearn-options相同,参见这里。maxdepth = 30是rpart给你的最大价值;
另一方面,sklearn在这里没有束缚。如果您希望probabilities是相同的,那么您可能也想使用cp参数。
类似地,与
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)我得到了
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中的缺省值更适合您正在处理的数据集,从而获得“更好”的结果。但请放心,它们是相似的,因为参数是明确和平等的。
希望这能有所帮助!
发布于 2018-10-02 07:13:50
主要的区别是R/rpart的实现有后期剪枝,而scikit学习没有。我可能会导致许多过分适合的情况下,科学知识学习。
发布于 2020-02-27 11:21:00
它看起来也像rpart直接处理分类变量,但是科学知识-学习没有。
为什么分类变量与其他工具相比,需要在科学工具中进行预处理?大多数scikit-learn假设数据位于单个数字dtype的NumPy数组或SciPy稀疏矩阵中。目前,这些都没有明确地表示绝对变量。因此,与R的data.frames或pandas.DataFrame不同,我们需要显式地将分类特征转换为数字值,正如编码分类特性中所讨论的那样。还请参阅具有混合类型的列转换器,以获得处理异构(例如分类和数值)数据的示例。
https://datascience.stackexchange.com/questions/31424
复制相似问题