gpt4 book ai didi

scikit-learn - 具有 NaN 值的 sklearn 管道

转载 作者:行者123 更新时间:2023-12-04 04:40:29 24 4
gpt4 key购买 nike

出于充分的理由,大多数(全部?)实现了 fit 的 sklearn 方法和 transform (转换器或估计器)不适用于包含 NaN 值的数据。因为大多数机器学习算法无法立即处理这些,并且各种变换对 NaN 不明确(带有 6 的特征和带有 NaN 的特征之间的交互是什么?),所以当您尝试传递时会引发错误一个包含空值的数据集,比如 StandardScaler , PCA , 和 RandomForestClassifier .

但是,我目前正在使用能够处理缺失值的估算器。这对我的数据集来说相当重要,因为大多数数据至少会缺少一个特征(因此删除 NA 是不可能的),并且或多或少是不可能的(原始数据中的许多列都是字符串,如地址或姓名)。我的特征是数字特征,但没有好的方法可以在字符串之间的模糊距离特征中对缺失值进行编码。

在我的数据集中,当我比较两个字符串但缺少一个或两个字符串时,就会出现 NA。将这些 NA 编码为零是告诉模型字符串非常不同,这与说“我们不知道”不同,并且可能导致错误的分类。

就上下文而言,我的分类器目前是一个 XGBoost 增强森林分类器,这些分类器可以毫无问题地获取丢失的数据。该分类器通过学习正确的方向来“学习”最佳插补值,以在数据丢失的情况下进行任何拆分。

TL;博士 :有没有一种好方法可以在保留丢失数据的同时使用 sklearn 的各种转换器对象?对我来说合理行为的例子是:

  • StandardScaler用途 np.nanmean以及在缩放数据时忽略 NaN 的类似方法
  • PolynomialFeatures执行标准特征生成,但任何有 NaN 的地方,结果都是 NaN。也就是说,特征“A”和“B”之间的交互,当“A”是 6 并且“B”是 NaN 时,就是简单的 NaN。 B^2 是 NaN。
  • PCA是一个更难的问题,我暂时不提了...

  • 我目前的想法是用正确的逻辑编写这些对象的我自己的版本,编写管道需要它们必须在管道对象中正确工作的任何属性。我找不到相关文档,所以我用 fit 写了一些东西。 , transform , fit_transform , 和 get_params ,但我收到了一些我还没有弄清楚的神秘错误。

    任何帮助表示赞赏。对不起,文字墙。

    最佳答案

    您可以创建一个管道步骤类,该类采用一个数组并将其 nan 转换为使用您提到的技术之一的值。

    关于scikit-learn - 具有 NaN 值的 sklearn 管道,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40475548/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com