为什么用 python 编写的决策树代码的预测结果与用 R 编写的代码不同?

2024-02-23

我正在 python 和 R 中使用 sklearn 的 load_iris 数据集(在 R 中称为 iris)。

我使用“基尼”索引以两种语言构建了模型,并且当直接从虹膜数据集中获取测试数据时,我能够在两种语言中正确测试模型。

但是,如果我给出一个新的数据集作为测试输入,对于相同的 python 和 R 会将其放入不同的类别。

我不确定我在这里错过了什么或做错了什么,因此非常感谢任何指导。

下面提到的代码: Python 2.7:

from sklearn.datasets import load_iris
from sklearn import tree
iris = load_iris()
model = tree.DecisionTreeClassifier(criterion='gini')
model.fit(iris.data, iris.target)
model.score(iris.data, iris.target)
print iris.data[49],model.predict([iris.data[49]])
print iris.data[99],model.predict([iris.data[99]])
print iris.data[100],model.predict([iris.data[100]])
print iris.data[149],model.predict([iris.data[149]])
print [6.3,2.8,6,1.3],model.predict([[6.3,2.8,6,1.3]])

R-Rstudio 运行 3.3.2 32 位:

library(rpart)
iris<- iris
x_train = iris[c('Sepal.Length','Sepal.Width','Petal.Length','Petal.Width')]
y_train = as.matrix(cbind(iris['Species']))
x <- cbind(x_train,y_train)
fit <- rpart(y_train ~ ., data = x_train,method="class",parms = list(split = "gini"))
summary(fit)
x_test = x[149,]
x_test[,1]=6.3
x_test[,2]=2.8
x_test[,3]=6
x_test[,4]=1.3
predicted1= predict(fit,x[49,]) # same as python result
predicted2= predict(fit,x[100,]) # same as python result 
predicted3= predict(fit,x[101,]) # same as python result
predicted4= predict(fit,x[149,]) # same as python result
predicted5= predict(fit,x_test) ## this value does not match with pythons result

我的Python输出是:

[ 5.   3.3  1.4  0.2] [0]
[ 5.7  2.8  4.1  1.3] [1]
[ 6.3  3.3  6.   2.5] [2]
[ 5.9  3.   5.1  1.8] [2]
[6.3, 2.8, 6, 1.3] [2] -----> this means it's putting the test data into virginica bucket

R 输出为:

> predicted1
   setosa versicolor virginica
49      1          0         0
> predicted2
    setosa versicolor  virginica
100      0  0.9074074 0.09259259
> predicted3
    setosa versicolor virginica
101      0 0.02173913 0.9782609
> predicted4
    setosa versicolor virginica
149      0 0.02173913 0.9782609
> predicted5
    setosa versicolor  virginica
149      0  0.9074074 0.09259259 --> this means it's putting the test data into versicolor bucket

请帮忙。谢谢。


决策树涉及相当多的参数(最小/最大叶子大小、树的深度、何时分割等),并且不同的包可能有不同的默认设置。如果您想获得相同的结果,则需要确保隐式默认值相似。例如,尝试运行以下命令:

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 and maxdepth = 30被选择以便与sklearn- 选项,请参阅here http://scikit-learn.org/stable/modules/generated/sklearn.tree.DecisionTreeClassifier.html. maxdepth = 30是最大值rpart会让你拥有;sklearn这里没有界限)。如果您希望概率等相同,您可能想尝试一下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)

I get

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 output.

不用说,当您的预测(在训练集上)看起来“不合理地好”时要小心,因为您可能会过度拟合数据。例如,看看model.predict_proba(...),这给你的概率sklearn(而不是预测的类别)。您应该看到,使用当前的 Python 代码/设置,您几乎肯定会过度拟合。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么用 python 编写的决策树代码的预测结果与用 R 编写的代码不同? 的相关文章

  • 蟒蛇 |如何将元素随机添加到列表中

    有没有一种方法可以将元素随机添加到列表中 内置函数 ex def random append lst a lst append b lst append c lst append d lst append e return print ls
  • 如何在“python setup.py test”中运行 py.test 和 linter

    我有一个项目setup py文件 我用pytest作为测试框架 我还在我的代码上运行各种 linter pep8 pylint pydocstyle pyflakes ETC 我用tox在多个 Python 版本中运行它们 并使用以下命令构
  • 当我用一个观察值运行回归时,为什么“fastLm()”会返回结果?

    为什么fastLm 当我用一项观察进行回归时返回结果吗 下面为什么不lm and fastLm 结果相等吗 library Rcpp library RcppArmadillo library data table set seed 1 D
  • 使用 Python 抓取维基百科数据

    我正在尝试从以下内容中检索 3 列 NFL 球队 球员姓名 大学球队 维基百科页面 http en wikipedia org wiki 2008 NFL draft 我是 python 新手 一直在尝试使用 beautifulsoup 来
  • pandas 两个数据框交叉连接[重复]

    这个问题在这里已经有答案了 我找不到有关交叉联接的任何内容 包括合并 联接或其他一些内容 我需要使用 my function 作为 myfunc 处理两个数据帧 相当于 for itemA in df1 iterrows for itemB
  • 如何将同步函数包装在异步协程中?

    我在用着aiohttp https github com aio libs aiohttp构建一个 API 服务器 将 TCP 请求发送到单独的服务器 发送 TCP 请求的模块是同步的 对于我来说是一个黑匣子 所以我的问题是这些请求阻塞了整
  • 在 GAE/Python 中放置一次性代码和每次代码的最佳位置在哪里?

    我是 Google App Engine 和 Python 的新手 我无法理解有关在 Google App Engine 上运行的 Python 应用程序的一些基本问题 如果我想要执行代码 对于每个传入的请求 我应该将其放在哪里 我们正在捕
  • 如何在python中递归复制目录并覆盖全部?

    我正在尝试复制 home myUser dir1 及其所有内容 及其内容等 home myuser dir2 在Python中 此外 我希望副本覆盖中的所有内容dir2 It looks like distutils dir util co
  • 计算数据帧 R 中字符串的频率

    我想计算数据框中某些字符串的频率 strings lt c pi pie piece pin pinned post df lt as data frame strings 然后我想计算字符串的频率 counts lt c pi in pi
  • Matplotlib 将颜色图 tab20 更改为三种颜色

    Matplotlib 有一些新的且非常方便的颜色图 选项卡颜色图 https matplotlib org examples color colormaps reference html 我错过的是生成像 tab20b 或 tab20c 这
  • Python time.sleep - 永不醒来

    我认为这将是那些简单的问题之一 但它让我感到困惑 停止媒体 我是对的 找到了解决方案 查看答案 我正在使用 Python 的单元测试框架来测试多线程应用程序 很好而且很直接 我有 5 个左右的工作线程监视一个公共队列 以及一个为它们制作工作
  • 在 Python 中,如何获取特定文件中定义的类列表?

    如果一个文件myfile py包含 class A object Some implementation class B object Some implementation 我如何定义一个方法 以便在给定的情况下myfile py 它返回
  • 与函数复合 UniqueConstraint

    一个快速的 SQLAlchemy 问题 我有一个 文档 类 其属性为 数字 和 日期 我需要确保没有重复的号码同年 是 有没有办法对 数字 年份 日期 进行UniqueConstraint 我应该使用唯一索引吗 我如何声明功能部分 SQLA
  • DRF:以编程方式从 TextChoices 字段获取默认选择

    我们的网站是 Vue 前端 DRF 后端 在一个serializer validate 方法 我需要以编程方式确定哪个选项TextChoices类已被指定为模型字段的默认值 TextChoices 类 缩写示例 class PaymentM
  • 在 python 查询参数中使用 %20 而不是 + 作为空格

    我使用 python requests 编写了以下 python 脚本 http requests readthedocs org en latest http requests readthedocs org en latest impo
  • SpaCy 中的自定义句子边界检测

    我正在尝试在 spaCy 中编写一个自定义句子分段器 它将整个文档作为单个句子返回 我编写了一个自定义管道组件 它使用以下代码来执行此操作here https github com explosion spaCy issues 1850 但
  • Python“self”关键字[重复]

    这个问题在这里已经有答案了 我是 Python 新手 通常使用 C 最近几天开始使用它 在类中 是否需要在对该类的数据成员和方法的任何调用前添加前缀 因此 如果我在该类中调用方法或从该类获取值 我需要使用self method or sel
  • Melt() 函数复制数据集

    我有一个这样的表 id name doggo floofer puppo pupper 1 rowa NaN NaN NaN NaN 2 ray NaN NaN NaN NaN 3 emma NaN NaN NaN pupper 4 sop
  • Python 中的迭代器 (iter()) 函数。 [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 对于字典 我可以使用iter 用于迭代字典的键 y x 10 y 20 for val in iter y print val 当
  • linux下无法安装Cairo包

    我在本地下载该软件包并尝试安装它 但出现此错误 R CMD INSTALL l usr local lib64 R library Cairo 1 5 1 tar gz 我得到他的错误 checking for PNG support in

随机推荐

  • 有没有办法向 ADO.NET 实体框架中的关联添加额外的字段?

    我希望能够对多对多关系进行建模 其中包含有关该关系的额外详细信息 例如 Person int id String name Project int id String name ProjectPerson Person id Project
  • 使用 .NET 的稳定 RSS 阅读器

    我一直在寻找一个稳定的 NET RSS Atom 库 最好是开源的 比如 Adob e 创建的 AS3 Syndicate Library 我想在我的基于 NET 的网站中集成 RSS 源 另外 是否有适用于同一个 RSS 提要阅读器的 J
  • 如何在 Gradle 中查找/删除未使用的依赖项

    我想在我的项目中找到未使用的依赖项 Gradle 中有类似 Maven 的功能吗 Kotlin 用户更新 2021 年 12 月 17 日 检测 Kotlin 项目中缺失或多余的构建依赖项 版本 1 0 9 最新 我为 Kotlin 用户添
  • .NET WinForms 中与 Qt 的表单布局最接近的等效项是什么?

    与 Qt 最接近的等效项是什么QFormLayout在 NET WinForms 中 TableLayoutPanel 将由我决定
  • WooCommerce:删除产品写入面板选项卡

    我正在使用 WooCommerce 我想隐藏后端的 链接产品 选项卡 我找到了一个添加选项卡的钩子 woocommerce product write panel tabs 但我不确定是否也可以用这个钩子隐藏某些选项卡 谢谢你的帮助 所以我
  • RestSharp.NetCore 中的 ExecuteAsyncPost 示例

    我正在使用 RestSharp NetCore 包 并且需要调用 ExecuteAsyncPost 方法 我正在努力理解回调参数 var client new RestClient url request AddParameter appl
  • 代表们——他们到底是什么?

    有人能用一些现实生活流程的类比来解释它们吗 比如经营一支棒球队 一家咖啡店或一家汽车修理店 任何有意义的事情 就像我们甚至不要谈论代码 语法或编程 我看过很多这样的帖子 但没有一个真正适合我 我们可以先谈谈概念吗 就像我什至不明白为什么我们
  • Java do-while 循环不起作用

    我希望我的程序不断询问问题 直到它得到可以使用的响应 特别是从 0 到 20 的数字 我在这个类上还有很多其他内容 所以这里有一个小摘录 其中 do while 是 我已经为所有变量命名了 public static void main S
  • 如何在 iPhone 中检测来自麦克风而不是语音的打击?

    我正在使用此代码来检测打击 但我受不了打击 我有声音 NSURL url NSURL fileURLWithPath dev null NSDictionary settings NSDictionary dictionaryWithObj
  • *&++i 是否会导致 C++03 中的未定义行为?

    In 另一个答案 https stackoverflow com a 17400329 1505939据说在 C 11 之前 其中i is an int 然后使用表达式 i 导致未定义的行为 这是真的 关于另一个答案 评论中有一些讨论 但似
  • 为什么4.2.0版本没有maven Resteasy-jaxrs包?

    我在 Maven 中看到的最后一个版本resteasy jaxrs是 3 8 1 当尝试升级时resteasy client到 4 2 0 存在依赖关系resteasy jaxrs 4 2 0 org jboss resteasy plug
  • 防止片段着色器中的循环展开

    我正在使用最新版本的 Chrome 和 Firefox 为 WebGL GLSL ES 1 0 编写一个片段着色器 并且编写了一个迭代算法 首先 我发现循环的长度是非常有限的 文档说它必须在编译时是可猜测的 这意味着它必须是一个常量或非常接
  • Zend Framework 2 - 自定义表单验证

    我需要自定义表单验证 所以我写了一个类似的函数this http framework zend com manual 2 0 en modules zend validator writing validators html one 到目前
  • 如何在 Java Swing 应用程序中播放 MP4 视频

    有谁知道我可以在 JPanel 中播放 mp4 视频文件的方法吗 我尝试过使用 avi 文件使用 JMF 但没有成功 现在我对播放视频文件这样一个简单的任务变得如此乏味感到困惑和沮丧 请任何人告诉我我可以走什么路 我将不胜感激 我听说过 V
  • android recyclerview 不显示项目

    我想在我的回收视图中显示这些项目 但它根本不显示 而且我看不到错误 也许你们可以帮助我 MainActivity java RecyclerView recyclerView RecyclerView findViewById R id r
  • pandas 数据帧索引:to_list() 与 tolist()

    我最近为某人编写了一个 python 脚本 其中我使用以下命令将 pandas 数据帧的索引转换为列表to list 然而 这对他们不起作用 因为他们得到 AttributeError Index object has no attribu
  • 如何将 django 中的 InMemoryUploadedFile 转换为 flickr API 的格式?

    我有一个类将文件上传到 Flickr 该文件的类型为 内存中上传文件 我想知道如何将 InMemoryUploadedFile 文件中的数据转换或传递为 flickr API 的格式 Eg photo image jpg
  • Django 管理员:一对一关系作为内联?

    我正在为 satchmo 应用程序整理管理员 Satchmo 使用 OneToOne 关系来扩展基础Product模型 我想在一页上全部编辑 是否可以将 OneToOne 关系作为内联关系 如果没有 将一些字段添加到我的管理的给定页面 最终
  • Python - 快速修复:尝试登录时 getHeader() 属性错误

    我正在使用 Quickfix 并修改了 toAdmin 函数以将用户名和密码插入登录消息中 我根据 C 指令改编了代码 但遇到了奇怪的 getHeader 属性错误 回溯如下 lt 20151223 10 48 31 142 FIX 4 2
  • 为什么用 python 编写的决策树代码的预测结果与用 R 编写的代码不同?

    我正在 python 和 R 中使用 sklearn 的 load iris 数据集 在 R 中称为 iris 我使用 基尼 索引以两种语言构建了模型 并且当直接从虹膜数据集中获取测试数据时 我能够在两种语言中正确测试模型 但是 如果我给出