【问题标题】:Python Scikit Learn, LinearRegression, Dummy Variable lead to different in shapePython Scikit Learn、LinearRegression、Dummy Variable导致形状不同
【发布时间】:2018-04-28 07:52:56
【问题描述】:

我曾使用 Scikit Learn Library 进行机器学习。 我在使用回归时遇到了一些与虚拟变量相关的问题。我有 2 组样本用于训练集和测试集。实际上,程序使用训练集创建“预测模型”,然后使用“测试”来检查分数。在运行程序时,如果形状相等,就可以了。但是虚拟变量,会改变形状,导致不同 形状。

例子

  • 训练集:130行*3列

  • 训练集:60行*3列

将第 1 列和第 2 列设为虚拟后,现在形状正在发生变化

  • 训练集:130行*15列

  • 训练集:60行*12列

有什么办法可以解决这个问题吗? 如果可能与否,即使数据形状不同,也要取得成功

示例程序:https://www.dropbox.com/s/tcc1ianmljf5i8c/Dummy_Error.py?dl=0

【问题讨论】:

  • 能否在问题中包含相关代码和示例数据?
  • 我已经包含在上面的链接中
  • 您应该提供一个重现您的问题的小示例。请查看如何创建minimal reproducible example

标签: python machine-learning scikit-learn linear-regression dummy-variable


【解决方案1】:

如果我正确理解您的代码,则您正在使用 pd.get_dummies 创建虚拟变量并将整个数据框传递给函数。

在这种情况下,pandas 将为它找到的每个类别中的每个值创建一个虚拟变量。在这种情况下,看起来训练中存在的类别值比测试中更多。这就是为什么在训练中得到的列比在测试中更多的原因。

更好的方法是将所有内容组合在一个数据框中,在组合数据集中创建分类变量,然后将数据拆分为训练和测试。

【讨论】:

  • 我曾经考虑过这是一个很好的方法,但让我们想象一下,在我创建了预测模型之后。我得到了更多的记录,不幸的是,训练样本中不再存在一些记录。我需要一次又一次地组合和预测吗?
  • @StevJane 这是一个您需要考虑的问题,并且在现实世界的场景中非常明显。不要将其视为列中的新类别。只需将新记录视为新数据。您可以丢弃与训练数据不匹配的内容,或者在组合数据上再次训练。
  • @VivekKumar 是绝对正确的。此外,如果您的新数据始终具有训练数据中不可用的类别,则您的训练数据不能代表真实世界的数据。无论如何,这是一个更大的问题
猜你喜欢
  • 2021-12-29
  • 2016-12-14
  • 1970-01-01
  • 1970-01-01
  • 2018-02-22
  • 2018-08-10
  • 2020-05-09
  • 2018-08-26
  • 2017-04-17
相关资源
最近更新 更多