当前位置: 首页 > 知识库问答 >
问题:

在训练中使用一热编码后,用回归模型获得数据点预测的正确形状

吴建中
2023-03-14

我正在写一个使用线性回归的应用程序。就我而言,sklearn。线性模型。屋脊。我很难将我想要预测的数据点设置为Ridge的正确形状。我简要介绍了我的两个应用程序以及问题是如何出现的:

第一次申请:

我的数据点每个只有一个特性,都是字符串,因此我使用一个热编码,以便能够将它们与Ridge一起使用。之后,数据点(X_hotcoded)各有9个特征:

import pandas as pd
X_hotEncoded = pd.get_dummies(X)

在拟合RidgeX_hotEncoded和标签y后,我将训练好的模型保存为:

from sklearn.externals import joblib
joblib.dump(ridge, "ridge.pkl")

第二次申请:

现在我有一个训练好的模型保存在磁盘上,我喜欢在我的第二个应用程序中检索它,并预测一个数据点的y(标签)。这就是我遇到上述问题的地方:

# X = one datapoint I like to predict y for 
ridge= joblib.load("ridge.pkl")
X_hotEncoded = pd.get_dummies(X)
ridge.predict(X_hotEncoded) # this should give me the prediction

这在最后一行代码中给出了以下错误:

value错误:形状(1,1)和(9,)未对齐:1(尺寸1)!=9(尺寸0)

Ridge被训练了9个特性,因为我在所有数据点上使用了One-Hot编码。现在,当我喜欢预测一个数据点(只有一个功能)时,我很难将这个数据点设置成正确的形状,以便Ridge能够处理它。一个热编码对一个数据点没有影响,只有一个功能。

有人知道解决这个问题的好办法吗?

一个可能的解决方案可能是将列名写入第一个应用程序中的磁盘,并在第二个应用程序中检索它,然后在那里重建数据点。可以像这里所说的那样检索一个热编码数组的列名:在熊猫中逆转“一个热”编码

共有1个答案

瞿文柏
2023-03-14

这里发生的情况如下:

在培训阶段,您决定使用编码将单个分类特征转换为9个数字特征(一个热特征)。您在这个编码上训练了回归算法。因此,为了将其用于未知(测试)数据,您必须以与培训期间完全相同的方式转换这些数据。

不幸的是,我不认为你可以保存pd.get_dummies使用的编码并重用它。您应该使用sklearn.preprocessing.OneHotEncoder()代替。所以在训练期间:

from sklearn.preprocessing import OneHotEncoder

enc = OneHotEncoder()
X_hotEncoded = enc.fit_transform(X)

fit_transform()首先将编码器匹配到训练数据,然后使用它来转换数据。与pd.get_dummies()的区别在于,您现在有一个编码器对象,可以保存该对象并在以后重用:

joblib.dump(enc, "encoder.pkl")

在测试期间,您可以应用训练期间使用的相同编码,如下所示:

enc = joblib.load("encoder.pkl")
X_hotEncoded = enc.transform(X)

请注意,您不想再次安装编码器(这是pd.get_dummies()将要做的),因为对训练和测试数据使用相同的编码是至关重要的。

注意:

如果测试数据包含训练数据中不存在的值,您将遇到问题(因为编码器不知道如何对这些未知值进行编码)。要避免这种情况,您可以:

  • onehotcoder()提供categories参数,并向其传递所有类别的列表
 类似资料:
  • 我是CNN的新手,我正在尝试使用CIFAR-10数据集训练分类器。我遵循Pjreddie的教程来训练10类数据集的简单分类器。 我使用下面的代码训练模型,得到了cifar\U small。权重,我后来将其用于检测 在训练了简单的网络之后,我尝试使用cifar\U small进行检测。cfg和cifar\U小型。重量 层过滤器大小输入输出 0 conv 32 3 x 3/1 28 x 28 x 3-

  • 问题内容: 我像这样使用scikit-learn的SVM: 我的问题是,当我使用分类器预测训练集成员的班级时,即使在scikit- learns实现中,分类器也可能是错误的。(例如) 问题答案: 是的,可以运行以下代码,例如: 分数是0.61,因此将近40%的训练数据被错误分类。部分原因是,即使默认内核是(理论上也应该能够对任何训练数据集进行完美分类,只要您没有两个带有不同标签的相同训练点),也可

  • 文章信息 通过本教程,你可以掌握技能:使用预先训练的词向量和卷积神经网络解决一个文本分类问题 本文代码已上传到Github 本文地址:http://blog.keras.io/using-pre-trained-word-embeddings-in-a-keras-model.html 本文作者:Francois Chollet 什么是词向量? ”词向量”(词嵌入)是将一类将词的语义映射到向量空间

  • 我已经在AWS SageMaker上使用内置算法语义分割训练了一个模型。这个名为model.tar.gz的训练模型存储在S3上。所以我想从S3下载这个文件,然后使用它在我的本地电脑上进行推断,而不使用AWS SageMaker。 以下是三个文件: > :包括网络架构、数据输入和训练的参数。请参阅语义分割超参数。 我的代码: 错误:

  • 我希望使用AWS Sagemaker工作流部署一个预训练的模型,用于实时行人和/或车辆检测,我特别想使用Sagemaker Neo编译模型并将其部署在边缘。我想从他们的模型动物园中使用OpenVino的预构建模型之一,但是当我下载模型时,它已经是他们自己的优化器的中间表示(IR)格式。 > 如果没有,是否有任何免费的预训练模型(使用任何流行的框架,如pytorch,tenorflow,ONXX等)

  • 问题内容: 因此,我对此有疑问,一直在寻找答案。所以问题是我何时使用 这之后,我将训练和测试模型(,作为特征,如标签),并得到一些准确度得分。现在我的疑问是,当我必须预测新数据集的标签时会发生什么。说, 因为当我规范化列时,和的值将根据新数据而不是将在其上训练模型的数据来更改。因此,现在将是下面的数据准备步骤之后的数据。 的价值和将关于改变和价值。的数据准备是关于的。 有关不同数字的数据准备如何有