如果我们在管道中包含转换器,scikit-learn 的“cross_val_score”和“GridsearchCV”的 k 倍交叉验证分数是否有偏差?

2024-01-19

数据预处理器(例如 StandardScaler)应用于 fit_transform 训练集,并且仅变换(不拟合)测试集。我希望相同的拟合/转换过程适用于用于调整模型的交叉验证。然而,我发现cross_val_score and GridSearchCV使用预处理器fit_transform整个训练集(而不是fit_transforminner_train集,并变换inner_validation集)。我相信这人为地消除了 inner_validation 集中的方差,这使得 cv 分数(用于通过 GridSearch 选择最佳模型的指标)产生偏差。这是一个问题还是我实际上错过了什么?

为了演示上述问题,我使用 Kaggle 的威斯康星州乳腺癌(诊断)数据集尝试了以下三个简单的测试用例。

  1. 我故意将整个 X 拟合并变换为StandardScaler()
X_sc = StandardScaler().fit_transform(X)
lr = LogisticRegression(penalty='l2', random_state=42)
cross_val_score(lr, X_sc, y, cv=5)
  1. 我将 SC 和 LR 包含在Pipeline并运行cross_val_score
pipe = Pipeline([
    ('sc', StandardScaler()),
    ('lr', LogisticRegression(penalty='l2', random_state=42))
])
cross_val_score(pipe, X, y, cv=5)
  1. 与 2 相同,但具有GridSearchCV
pipe = Pipeline([
    ('sc', StandardScaler()),
    ('lr', LogisticRegression(random_state=42))
])
params = {
    'lr__penalty': ['l2']
}
gs=GridSearchCV(pipe,
param_grid=params, cv=5).fit(X, y)
gs.cv_results_

它们都产生相同的验证分数。 [0.9826087、0.97391304、0.97345133、0.97345133、0.99115044]


No, sklearn不做fit_transform与整个数据集。

为了检查这一点,我将其子类化StandardScaler打印发送给它的数据集的大小。

class StScaler(StandardScaler):
    def fit_transform(self,X,y=None):
        print(len(X))
        return super().fit_transform(X,y)

如果您现在更换StandardScaler在您的代码中,您会看到第一种情况下传递的数据集大小实际上更大。

但为什么准确率保持完全相同呢?我认为这是因为LogisticRegression对特征尺度不是很敏感。如果我们使用对规模非常敏感的分类器,例如KNeighborsClassifier例如,您会发现两种情况之间的准确性开始有所不同。

X,y = load_breast_cancer(return_X_y=True)
X_sc = StScaler().fit_transform(X)
lr = KNeighborsClassifier(n_neighbors=1)
cross_val_score(lr, X_sc,y, cv=5)

输出:

569
[0.94782609 0.96521739 0.97345133 0.92920354 0.9380531 ]

而第2个案例,

pipe = Pipeline([
    ('sc', StScaler()),
    ('lr', KNeighborsClassifier(n_neighbors=1))
])
print(cross_val_score(pipe, X, y, cv=5))

Outputs:

454
454
456
456
456
[0.95652174 0.97391304 0.97345133 0.92920354 0.9380531 ]

准确性方面变化不大,但仍然发生了变化。

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

如果我们在管道中包含转换器,scikit-learn 的“cross_val_score”和“GridsearchCV”的 k 倍交叉验证分数是否有偏差? 的相关文章

  • 如何在谷歌colab中安装pyearth?

    这曾经对我有用 但两天后我遇到了这个问题 pip install sklearn contrib py earth Collecting sklearn contrib py earth Using cached https files p
  • 如何为DNA序列生成一种热编码?

    我想为一组 DNA 序列生成一个热编码 例如 序列ACGTCCA可以以转置方式表示如下 但下面的代码将以水平方式生成一种热门编码 我更喜欢以垂直方式生成 谁能帮我 ACGTCCA 1000001 A 0100110 C 0010000 G
  • 为什么我的精确率-召回率和 ROC 曲线不平滑?

    我有一些标记为 0 或 1 的数据 我正在尝试使用随机森林来预测这些类别 每个实例都标有 20 个用于训练随机森林的特征 约 30 000 个训练实例和约 6000 个测试实例 我使用以下代码绘制精确召回率和 ROC 曲线 precisio
  • 如何使用 lstm 执行多类多输出分类

    I have multiclass multioutput classification see https scikit learn org stable modules multiclass html https scikit lear
  • scikit-learn LinearRegression 的意外交叉验证分数

    我正在尝试学习使用 scikit learn 来完成一些基本的统计学习任务 我认为我已经成功创建了适合我的数据的线性回归模型 X train X test y train y test cross validation train test
  • 尝试校准keras模型

    我正在尝试通过 Sklearn 实现来校准我的 CNN 模型CalibratedClassifierCV 尝试将其包装为KerasClassifier并覆盖预测功能但没有成功 有人可以说我做错了什么吗 这是模型代码 def create m
  • “KMeans”对象没有属性“k”

    我使用 Yellowbrick 包绘制数据集的肘部曲线 以使用 KMeans 作为模型找到数据集的最佳簇数 我正在使用 Scikit learn KMeans 和 Yellowbrick kelbowvisualizer 函数 生成了肘部曲
  • 如何创建简单的梯度下降算法

    我正在研究简单的机器学习算法 从简单的梯度下降开始 但在尝试用 python 实现它时遇到了一些麻烦 这是我试图重现的示例 我获得了有关房屋的数据 居住面积 以英尺为单位 和卧室数量 以及最终的价格 居住面积 英尺2 2104 卧室 3 价
  • 深度学习和传统的人工神经网络机器学习有什么区别? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 您能否简要解释一下两者之间的差异深度学习 https developer nvidia com deep learning和利用神经网
  • 为什么对数损失为负?

    我刚刚将 sklearn 中的对数损失应用于逻辑回归 http scikit learn org stable modules generated sklearn metrics log loss html http scikit lear
  • 在逻辑回归中使用排名数据

    当我努力学习这些概念时 我将对此给予最大赏金 我正在尝试在逻辑回归中使用一些排名数据 我想使用机器学习来制作一个简单的分类器来判断网页是否 好 这只是一个学习练习 所以我不期望有很好的结果 只是希望学习 过程 和编码技术 我已将数据放入 c
  • 如何将 sklearn.naive_bayes 与(多个)分类特征一起使用? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我想学习朴素贝叶斯模型来解决类为布尔值的问题 有些特征是布尔型的 但其他特征是分类型的 并且可以采用少量值 5 如果我所有的功能都是布尔值
  • Tensorflow推荐的系统规格?

    我开始在我的 RHEL 6 5 机器上安装 Tensorflow 但事实证明 Tensorflow 需要 glibc gt 2 17 而 rhel 6 5 上默认的 glibc 是 2 12 我想知道是否有人可以帮助我了解张量流的最低 推荐
  • 在Python中表示语料库句子的一种热门编码

    我是 Python 和 Scikit learn 库的初学者 我目前需要从事一个 NLP 项目 该项目首先需要通过 One Hot Encoding 来表示一个大型语料库 我已经阅读了 Scikit learn 关于 preprocessi
  • Spark 和 Ipython 中将非数字特征编码为数字的问题

    我正在做一些我必须做出预测的事情numeric数据 每月员工支出 使用non numeric特征 我在用Spark MLlibs Random Forests algorthim 我有我的features数据在一个dataframe看起来像
  • 如何在sklearn决策树中显示特征名称?

    我目前有一个决策树 将功能名称显示为X index i e X 0 X 1 X 2 etc from sklearn import tree from sklearn tree import DecisionTreeClassifier d
  • 使用 to_categorical 转换 np.array 时出现内存问题

    我有一个像这样的 numpy 数组 0 1 1 0 0 1 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 1 0 1 我这样改造它以减少内存需求 x val x val asty
  • 理解高斯混合模型的概念

    我试图通过阅读在线资源来理解 GMM 我已经使用 K 均值实现了聚类 并且正在了解 GMM 与 K 均值的比较 以下是我的理解 如有错误请指出 GMM 类似于 KNN 在这两种情况下都实现了聚类 但在 GMM 中 每个簇都有自己独立的均值和
  • batch_size = x.shape[0] AttributeError: 'tuple' 对象没有属性 'shape'

    该代码结合图像和掩模进行图像检测 我怎样才能纠正这个错误 batch size x shape 0 AttributeError tuple 对象没有属性 shape 这是用于训练的代码 train datagen ImageDataGen
  • 朴素贝叶斯分类器仅基于先验概率做出决策

    我试图根据推文的情绪将推文分为三类 买入 持有 卖出 我正在使用 R 和包 e1071 我有两个数据框 一个训练集和一组需要预测情绪的新推文 训练集数据框 text sentiment this stock is a good buy Bu

随机推荐

  • 调试使用 ES6 模块的 JavaScript 代码

    TL DR 如何从调试器访问 ES 模块中定义的变量 函数 名称 更多背景信息 我是一位经验相对丰富的 JavaScript 程序员 但对模块还是个新手 我已经按照 MDN 上的教程进行操作 https developer mozilla
  • CUDA 就地转置错误

    我正在实现一个 CUDA 程序来转置图像 我创建了 2 个内核 第一个内核进行了异位转置 并且适用于任何图像尺寸 然后我创建了一个用于方形图像就地转置的内核 但是 输出不正确 图像的下三角形被转置 但上三角形保持不变 生成的图像在对角线上有
  • 如何在 android room 和 rxjava 2 中插入数据并获取 id 作为输出参数?

    插入查询 Insert onConflict OnConflictStrategy REPLACE long insertProduct Product product product id is auto generated 查看模型 p
  • tvos UISegmentedControl 焦点样式不改变

    我想在 tvOS 中突出显示 UISegmentedControl 时更改其背景颜色 Normally Segment display like following When change focus for change selected
  • 训练神经网络时出现极小或 NaN 值

    我正在尝试在 Haskell 中实现神经网络架构 并在 MNIST 上使用它 我正在使用hmatrix线性代数包 我的训练框架是使用pipes包裹 我的代码可以编译并且不会崩溃 但问题是 层大小 例如 1000 小批量大小和学习率的某些组合
  • 如何将 DATETIME 转换为 mysql 中的 DATE?

    我的查询是这样的 我有一堆条目 我想按日期对它们进行分组 但我的数据库中没有日期 而是有一个日期时间字段 我该怎么办 select from follow queue group by follow date cast follow dat
  • 反序列化 JSON 对象的一部分并将其序列化回来,其余属性保持不变

    我有一些 JSON 想要将其反序列化为 C 类的实例 但是 该类并不具有与原始 JSON 匹配的所有字段 属性 我希望能够修改类中的属性值 然后将其序列化回 JSON 并且原始 JSON 中的剩余字段和属性仍然完好无损 例如 假设我有以下
  • 强制 TkInter Scale 滑块捕捉到鼠标

    当 GUI 有 TkInter 时Scale当他们单击刻度上的某个位置时 默认行为似乎是沿着刻度向鼠标方向滑动滑块 然后意外地经过鼠标 我想要的是让滑块在用户单击滑块上的任意位置时始终跳转到并保持连接到用户的鼠标点 如果他们单击刻度上的特定
  • Int 和 Integer 有什么区别?

    在 Haskell 中 a 和 a 有什么区别Int and an Integer 答案记录在哪里 Integer 是任意精度 类型 它将保存任何数字 no 无论多大 直到极限 你机器的内存 这意味着你从来没有 算术溢出 在另一 手也意味着
  • 重写 Wildfly 引擎

    我想知道是否可以在没有任何第三方库的情况下使用 Wildfly 应用程序服务器的重写引擎 我尝试过使用重写阀 https help openshift com hc en us articles 202398810 How to redir
  • Rails 控制器中的实例和类变量

    我是 Rails 和 ruby 的新手 我正在研究类和实例变量的概念 我理解其中的区别 但是当我在 Rails 中使用控制器进行尝试时 它让我感到困惑 我所做的是在类方法之外声明一个类和实例变量 class BooksController
  • 有没有办法强制使用 Zend_Auth 进行身份验证?

    我正在使用 Zend Auth 和 cookie 会话持久性 我似乎无法弄清楚如何强制使用此类进行身份验证 有没有办法强制 Zend Auth 相信它已经作为用户进行身份验证 Zend Auth getInstance gt getStor
  • 直接自引用导致循环超类问题 JSON

    我尝试了在搜索时发现的几件事 但没有任何帮助 或者我没有正确实现它 我收到错误 Direct self reference leading to cycle through reference chain io test entity bo
  • 创建覆盖 ImageView 动画 Google 地图

    我正在尝试使我的叠加图像执行以下操作 地图的 onClick onDrag 在地图中间显示恒定图像 这是一个引脚 onTouchUp 将标记图像更改为加载标记和一次数据 加载完整更改将图像加载到带有文本的新图像 这是与我的问题非常相似的解决
  • 如何让我的自定义帐户类型显示在 Android 联系人应用程序中?

    我已经创建了一个自定义帐户类型 并且可以在 android ContactsContract ContentProvider 中成功创建该类型的联系人 但我在弄清楚如何在默认联系人应用程序中编辑联系人时显示我的自定义帐户标签和图标时遇到了很
  • 为什么 git 将我的分支名称前缀大写?

    我有一组非常简单的 git 命令 这会导致一些奇怪的行为 显示我当前的本地分支机构 并查看我在release beta1 git branch develop master release beta1 创建一个bugfix somefeat
  • System.Net.WebRequest 不尊重主机文件

    有没有办法获得System Net WebRequest or System Net WebClient尊重hosts or lmhosts file 例如 在我的主机文件中 我有 10 0 0 1 www bing com 当我尝试在浏览
  • 使用 async/await 有什么优点?

    我正在阅读几篇文章并观看一些有关如何在 JavaScript 中使用 async await 的视频 似乎唯一的原因是将异步代码转换为同步代码 并使代码更具可读性 但这并不打算在这个问题中讨论 因此 我想了解使用这些语句是否有更多原因 因为
  • 如何使用 CKFinder Javascript API?

    有趣的问题 但老实说我无法访问 例如 CKFinder dataTypes Folder http docs cksource com ckfinder 2 x api symbols CKFinder dataTypes Folder h
  • 如果我们在管道中包含转换器,scikit-learn 的“cross_val_score”和“GridsearchCV”的 k 倍交叉验证分数是否有偏差?

    数据预处理器 例如 StandardScaler 应用于 fit transform 训练集 并且仅变换 不拟合 测试集 我希望相同的拟合 转换过程适用于用于调整模型的交叉验证 然而 我发现cross val score and GridS