在 SciKit 线性回归上出现“ValueError:形状未对齐”

2024-02-27

一般来说,SciKit 和 Python 的线性代数/机器学习相当新,所以我似乎无法解决以下问题:

我有一个训练集和一个测试数据集,其中包含连续值和离散/分类值。 CSV 文件被加载到 Pandas DataFrame 中并匹配形状,分别为 (1460,81) 和 (1459,81)。 然而,使用后熊猫的 get_dummies http://pandas.pydata.org/pandas-docs/stable/generated/pandas.get_dummies.html,DataFrame 的形状变为 (1460, 306) 和 (1459, 294)。所以,当我用SciKit 线性回归 http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LinearRegression.html模块中,它为 306 个变量构建了一个模型,并尝试用它来预测仅包含 294 个变量的模型。那么,这自然会导致以下错误:

ValueError: shapes (1459,294) and (306,1) not aligned: 294 (dim 1) != 306 (dim 0)

我该如何解决这样的问题?我可以以某种方式重塑 (1459, 294) 以匹配另一个吗?

谢谢,我希望我已经说清楚了:)


在处理分类数据时,这是一个极其常见的问题。对于如何最好地处理这个问题存在不同的意见。

一种可能的方法是将函数应用于限制可能选项集的分类特征。例如,如果您的特征包含字母表中的字母,您可以对 A、B、C、D 和“其他/未知”的特征进行编码。通过这种方式,您可以在测试时应用相同的函数并从问题中抽象出来。当然,一个明显的缺点是,通过减少特征空间,您可能会丢失有意义的信息。

另一种方法是根据训练数据构建模型,使用自然创建的虚拟对象,并将其视为模型的基线。当您在测试时使用模型进行预测时,您可以像转换训练数据一样转换测试数据。例如,如果您的训练集的某个特征中包含字母表中的字母,而测试集中的同一特征包含值“AA”,那么您在进行预测时将忽略它。这与你现在的情况相反,但前提是一样的。您需要即时创建缺失的功能。当然,这种方法也有缺点。

第二种方法是你在问题中提到的,所以我将通过pandas.

通过使用get_dummies您正在将分类特征编码为多个 one-hot 编码特征。您可以做的是通过使用强制您的测试数据与您的训练数据相匹配reindex, 像这样:

test_encoded = pd.get_dummies(test_data, columns=['your columns'])
test_encoded_for_model = test_encoded.reindex(columns = training_encoded.columns, 
    fill_value=0)

这将以与训练数据相同的方式对测试数据进行编码,为不是通过编码测试数据创建但在训练过程中创建的虚拟特征填充 0。

您可以将其包装到一个函数中,然后将其即时应用到您的测试数据。您不需要内存中的编码训练数据(我可以使用training_encoded.columns) 如果您创建列名称的数组或列表。

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

在 SciKit 线性回归上出现“ValueError:形状未对齐” 的相关文章

  • pydev 调试器:严重警告:此版本的 python 似乎编译不正确(内部生成的文件名不是绝对的)[重复]

    这个问题在这里已经有答案了 通过运行 from sklearn datasets import fetch california housing import pandas as pd pd set option precision 4 m
  • Python逻辑运算符优先级[重复]

    这个问题在这里已经有答案了 哪个运算符优先4 gt 5 or 3 lt 4 and 9 gt 8 这会被评估为真还是假 我知道该声明3 gt 4 or 2 lt 3 and 9 gt 10 显然应该评估为 false 但我不太确定 pyth
  • 如何创建一个语句来打印以特定单词开头的单词? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 如何在 python 中打印从特定字母开始的单词 而不使用函数 而是使用方法或循环 1 我有一个字符串 想要打印以 m 开头的单词 S
  • 具有定制损失函数的随机森林

    我是机器学习领域的初学者 对于一个项目 我必须在随机森林分类中使用自定义损失函数 到目前为止我一直使用 scikit 通过 scikit 实现这一点的建议会更有帮助 损失函数 分类树中的基尼杂质和熵 在 scikit 的 tree pyx
  • Pandas 数据帧到 numpy 数组 [重复]

    这个问题在这里已经有答案了 我对 Python 很陌生 经验也很少 我已经设法通过复制 粘贴和替换我拥有的数据来使一些代码正常工作 但是我一直在寻找如何从数据框中选择数据 但无法理解这些示例并替换我自己的数据 总体目标 如果有人真的可以帮助
  • python suds SOAP 请求中的名称空间前缀错误

    我使用 python suds 来实现客户端 并且在发送的 SOAP 标头中得到了错误的命名空间前缀 用于定义由element ref 在 wsdl 中 wsdl 正在引用数据类型 xsd 文件 请参见下文 问题出在函数上GetRecord
  • 使用 OLS 回归预测未来值(Python、StatsModels、Pandas)

    我目前正在尝试在 Python 中实现 MLR 但不确定如何将我找到的系数应用于未来值 import pandas as pd import statsmodels formula api as sm import statsmodels
  • 如何通过在 Python 3.x 上按键来启动和中断循环

    我有这段代码 当按下 P 键时会中断循环 但除非我按下非 P 键 否则循环不会工作 def main openGame while True purchase imageGrab if a sum gt 1200 fleaButton ti
  • 对图像块进行多重处理

    我有一个函数必须循环遍历图像的各个像素并计算一些几何形状 此函数需要很长时间才能运行 在 24 兆像素图像上大约需要 5 小时 但似乎应该很容易在多个内核上并行运行 然而 我一生都找不到一个有据可查 解释充分的例子来使用 Multiproc
  • 从 python 发起 SSH 隧道时出现问题

    目标是在卫星服务器和集中式注册数据库之间建立 n 个 ssh 隧道 我已经在我的服务器之间设置了公钥身份验证 因此它们只需直接登录而无需密码提示 怎么办 我试过帕拉米科 它看起来不错 但仅仅建立一个基本的隧道就变得相当复杂 尽管代码示例将受
  • 如何设置 Celery 来调用自定义工作器初始化?

    我对 Celery 很陌生 我一直在尝试设置一个具有 2 个独立队列的项目 一个用于计算 另一个用于执行 到目前为止 一切都很好 我的问题是执行队列中的工作人员需要实例化一个具有唯一 object id 的类 每个工作人员一个 id 我想知
  • 首先对列表中最长的项目进行排序

    我正在使用 lambda 来修改排序的行为 sorted list key lambda item item lower len item 对包含元素的列表进行排序A1 A2 A3 A B1 B2 B3 B 结果是A A1 A2 A3 B
  • 使用yield 进行字典理解

    作为一个人为的例子 myset set a b c d mydict item yield join item s for item in myset and list mydict gives as cs bs ds a None b N
  • 默认情况下,Keras 自定义层参数是不可训练的吗?

    我在 Keras 中构建了一个简单的自定义层 并惊讶地发现参数默认情况下未设置为可训练 我可以通过显式设置可训练属性来使其工作 我无法通过查看文档或代码来解释为什么会这样 这是应该的样子还是我做错了什么导致默认情况下参数不可训练 代码 im
  • Ubuntu 上的 Python 2.7

    我是 Python 新手 正在 Linux 机器 Ubuntu 10 10 上工作 它正在运行 python 2 6 但我想运行 2 7 因为它有我想使用的功能 有人敦促我不要安装 2 7 并将其设置为我的默认 python 我的问题是 如
  • 无法在前端使用 JavaScript Fetch API 将文件上传到 FastAPI 后端

    我正在尝试弄清楚如何将图像发送到我的 API 并验证生成的token那是在header的请求 到目前为止 这就是我所处的位置 app post endreProfilbilde async def endreProfilbilde requ
  • 检查字典键是否有空值

    我有以下字典 dict1 city name yass region zipcode phone address tehsil planet mars 我正在尝试创建一个基于 dict1 的新字典 但是 它不会包含带有空字符串的键 它不会包
  • 从 Twitter API 2.0 获取 user.fields 时出现问题

    我想从 Twitter API 2 0 端点加载推文 并尝试获取标准字段 作者 文本 和一些扩展字段 尤其是 用户 字段 端点和参数的定义工作没有错误 在生成的 json 中 我只找到标准字段 但没有找到所需的 user fields 用户
  • 列表值的意外更改

    这是我的课 class variable object def init self name name alias parents values table name of the variable self name 这是有问题的函数 f
  • 迭代 pandas 数据框的最快方法?

    如何运行数据框并仅返回满足特定条件的行 必须在之前的行和列上测试此条件 例如 1 2 3 4 1 1 1999 4 2 4 5 1 2 1999 5 2 3 3 1 3 1999 5 2 3 8 1 4 1999 6 4 2 6 1 5 1

随机推荐