根据我的经验,R 决策树返回的结果比 python 决策树更准确。可以再确认这个假设并且可能知道原因吗?
R 与 Python 决策树
数据挖掘
机器学习
Python
r
决策树
2021-10-11 17:08:48
3个回答
决策树涉及很多超参数——
最小/最大休假
尺寸
- 树的深度
- 分裂标准(基尼/熵)等
现在不同的包可能有不同的默认设置。即使在内部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
更适合您正在处理的数据集,因此“更好”的结果。但请放心,鉴于参数是明确且相等的,它们是相似的。
希望这可以帮助!
主要区别在于 R/rpart 实现有后修剪,而 scikit learn 没有。在 scikit learn 的情况下,我可能会导致很多过度拟合。
它看起来也像 rpart 直接处理分类变量,但scikit-learn没有。
与其他工具相比,为什么分类变量需要在 scikit-learn 中进行预处理? 大多数 scikit-learn 假设数据位于 NumPy 数组或单个数字 dtype 的 SciPy 稀疏矩阵中。这些目前没有明确表示分类变量。因此,与 R 的 data.frames 或 pandas.DataFrame 不同,我们需要将分类特征显式转换为数值,如编码分类特征中所述。有关使用异构(例如分类和数字)数据的示例,另请参阅具有混合类型的列转换器。
其它你可能感兴趣的问题