如何将模型输入数据与机器学习预测结果连接

如今,使用像 scikit-learn 这样的库,将模型拟合到训练数据集变得非常容易。

只需几行代码,就可以在一个数据集上拟合和评估模型。这变得如此容易,以至于也带来了一些问题。

相同的几行代码被一遍又一遍地重复,可能不清楚如何实际使用模型进行预测。或者,如果进行了预测,如何将预测值与实际输入值关联起来。

我知道这是事实,因为我收到了许多带有以下问题的电子邮件:

我如何将预测值与输入数据连接起来?

这是一个常见的问题。

在本教程中,您将学习如何将预测值与机器学习模型的输入关联起来。

完成本教程后,您将了解:

  • 如何在一个训练数据集上拟合和评估模型。
  • 如何使用已拟合的模型一次一个地和批量进行预测。
  • 如何将预测值与模型的输入连接起来。

通过我的新书《使用 Python 进行机器学习精通》**启动您的项目**,其中包括**分步教程**和所有示例的 **Python 源代码**文件。

让我们开始吧。

  • **2020年1月更新**:已针对 scikit-learn v0.22 API 的变更进行更新。
How to Connect Model Input Data With Predictions for Machine Learning

如何将模型输入数据与机器学习预测结果连接
照片由Ian D. Keating 拍摄,保留部分权利。

教程概述

本教程分为三个部分;它们是:

  1. 准备训练数据集
  2. 如何在训练数据集上拟合模型
  3. 如何将预测结果与模型输入连接

准备训练数据集

让我们首先定义一个可以用于模型的数据集。

您可能在 CSV 文件或内存中的 NumPy 数组中拥有自己的数据集。

在这种情况下,我们将使用一个简单的两类或二元分类问题,其中包含两个数值输入变量。

  • 输入:两个数值输入变量
  • 输出:一个类别标签,为 0 或 1。

我们可以使用 make_blobs() scikit-learn 函数创建这个包含 1,000 个样本的数据集。

下面的示例创建了数据集,其中输入 (X) 和输出 (y) 分别存储在单独的数组中。

运行示例会创建数据集并打印每个数组的形状。

我们可以看到数据集中有 1,000 行用于 1,000 个样本。我们还可以看到输入数据有两列用于两个输入变量,并且输出数组是一个长数组,其中包含输入数据中每一行的类别标签。

接下来,我们将在这个训练数据集上拟合一个模型。

如何在训练数据集上拟合模型

现在我们有了一个训练数据集,我们可以用这些数据拟合一个模型。

这意味着我们将向学习算法提供所有的训练数据,让学习算法发现输入和输出类别标签之间的映射,从而最小化预测误差。

在这种情况下,因为这是一个两类问题,我们将尝试逻辑回归分类算法。

这可以通过 scikit-learn 的 LogisticRegression 类来实现。

首先,必须定义模型,并包含我们需要的任何特定配置。在这种情况下,我们将使用高效的“_lbfgs_”求解器。

接下来,通过调用 `fit()` 函数并传入训练数据集,将模型拟合到训练数据集上。

最后,我们可以通过以下方式评估模型:首先使用它对训练数据集进行预测(通过调用 `predict()`),然后将预测结果与预期类别标签进行比较并计算准确率。

完整的示例如下所示。

运行此示例将模型拟合到训练数据集上,然后打印分类准确率。

在这种情况下,我们可以看到模型在训练数据集上具有 100% 的分类准确率。

现在我们知道如何拟合和评估训练数据集上的模型了,让我们来探究问题的根源。

如何将模型的输入与输出连接起来?

如何将预测结果与模型输入连接

一个训练好的机器学习模型接收输入并进行预测。

这可能是一次处理一行数据;例如

  • 输入: 2.12309797 -1.41131072
  • 输出: 1

用我们的模型这很简单。

例如,我们可以使用数组输入进行预测并得到一个输出,并且我们知道两者是直接连接的。

输入必须定义为数字数组,具体来说是 1 行 2 列。我们可以通过将示例定义为行列表(每行包含列列表)来实现,例如:

然后我们可以将其作为模型的输入进行预测。

结合上一节中拟合模型的部分,完整的示例如下所示。

运行该示例将定义新的输入并进行预测,然后打印输入和输出。

我们可以看到,在这种情况下,模型预测输入的类别标签为 1。

如果我们在自己的应用程序中使用该模型,这种模型用法将允许我们直接关联每次预测的输入和输出。

如果我们需要用“_垃圾邮件_”和“_非垃圾邮件_”等有意义的词替换标签 0 和 1,我们可以用一个简单的 if 语句来做到这一点。

到目前为止进展顺利。

当模型被用于一次性进行多次预测时会发生什么?

也就是说,当一次向模型提供多行或多个样本时,我们如何将预测结果与输入关联起来?

例如,我们可以像上一节评估模型时那样,对训练数据集中的 1,000 个示例中的每一个进行预测。在这种情况下,模型将进行 1,000 个不同的预测,并返回一个包含 1,000 个整数值的数组。每个预测对应 1,000 个输入数据行中的一行。

重要的是,输出数组中预测的顺序与进行预测时提供给模型的输入行的顺序匹配。这意味着索引 0 处的输入行与索引 0 处的预测匹配;索引 1、索引 2,一直到索引 999 也是如此。

因此,我们可以根据它们的索引直接关联输入和输出,因为我们知道在对多行输入进行预测时,顺序是保留的。

让我们用一个例子来具体说明。

首先,我们可以对训练数据集中每一行的输入进行预测

然后我们可以遍历索引并访问每个索引的输入和预测输出。

这准确地展示了如何将预测结果与输入行连接起来。例如,第 0 行的输入和索引 0 的预测结果:

在这种情况下,我们只看前 10 行及其预测。

综上所述,下面列出了对训练数据中的每一行进行预测并将预测结果与输入连接起来的完整示例。

运行该示例,模型对训练数据集中的 1,000 行进行 1,000 次预测,然后将前 10 个示例的输入与预测值连接起来。

这提供了一个模板,您可以根据自己的预测建模项目进行使用和调整,通过行索引将预测结果与输入行连接起来。

进一步阅读

如果您想深入了解,本节提供了更多关于该主题的资源。

文章

API

总结

在本教程中,您学习了如何将预测值与机器学习模型的输入关联起来。

具体来说,你学到了:

  • 如何在一个训练数据集上拟合和评估模型。
  • 如何使用已拟合的模型一次一个地和批量进行预测。
  • 如何将预测值与模型的输入连接起来。

你有什么问题吗?
在下面的评论中提出你的问题,我会尽力回答。

发现 Python 中的快速机器学习!

Master Machine Learning With Python

在几分钟内开发您自己的模型

...只需几行 scikit-learn 代码

在我的新电子书中学习如何操作
精通 Python 机器学习

涵盖自学教程端到端项目,例如
加载数据可视化建模调优等等...

最终将机器学习带入
您自己的项目

跳过学术理论。只看结果。

查看内容

88 条评论: _如何将模型输入数据与机器学习预测结果连接_

  1. kp836453 2019年11月22日 下午6:13 #

    一篇关于机器学习的优秀文章

  2. Tal 2019年12月5日 上午5:05 #

    好文章,继续写

    • Jason Brownlee 2019年12月5日 上午6:43 #

      谢谢!

      • Kareem 2021年3月20日 下午4:53 #

        如果数据集包含字符串列,如何拟合?

        • Jason Brownlee 2021年3月21日 上午6:07 #

          您可以将字符串转换为数字。例如,分类变量使用独热编码,自由文本使用词袋模型。

  3. Gabriel 2020年2月6日 上午9:01 #

    你好 Jason!我有个问题

    我正在进行逻辑回归以预测客户流失。我使用所有客户的样本,目标变量“1”表示流失,“0”表示留存。我的问题是:

    ——我正在用所有这些客户训练模型,并得到流失概率作为输出,我只能将这个模型应用于新记录,对吗?
    ——我对训练数据进行了大量的预处理和缩放方法,我需要将所有这些步骤也应用到我的新输入中,然后进行预测,对吗?

    谢谢!

    • Jason Brownlee 2020年2月6日 下午1:45 #

      您可以随意使用该模型进行预测。只有在新示例(测试集)上评估模型,并使用最终模型进行您不知道答案的预测,才有意义。

      是的,在训练数据集上执行的所有操作都必须在新数据上执行。

    • Tumi Sebela 2021年3月20日 下午5:01 #

      为了简化事情,可以使用 scikit 管道将所有预处理步骤链接起来。

  4. Mikkel Andreas Kvande 2020年4月24日 下午10:14 #

    你好 Jason!我有一个关于连接输入和输出的不同问题。

    我有一个神经网络,输出层有 5 个节点。该模型应该预测一个数字,可以是 (-2, -1, 0, 1, 2)。

    所以对于每个预测,我都会得到一个像这样的数组
    [0.20181388, 0.19936344, 0.19890821, 0.19744289, 0.20247154]

    现在我怎么知道每个框代表什么数字?因为看起来在一个构建、训练和预测之后,框 0 代表数字 1,而在另一个完整的构建、训练和预测之后,框 0 现在代表数字 -2。这里有什么联系?

    谢谢!

    • Jason Brownlee 2020年4月25日 上午6:49 #

      如果你的模型对每个样本预测一个数字,那么你就有 5 个样本的预测结果。

      如果你的模型对每个样本预测 5 个数字,那么你就有 1 个样本的预测结果。

      • Mikkel Andreas Kvande 2020年4月28日 下午5:30 #

        谢谢您的回复!

        是的,我的模型对每个样本预测一个数字,但上面显示的数组仅针对一个样本。

        我应该更具体一点,但我的模型在训练后输出了大约 100 个测试样本。所以我会得到一个列表,其中包含 100 个子列表,每个子列表又包含 5 个浮点数。

        所以我的问题是,对于每个样本,我不知道这 5 个预测数字代表什么。

        • Jason Brownlee 2020年4月29日 上午6:22 #

          它们代表您训练模型所要预测的任何内容。

  5. Pooja 2020年5月7日 下午9:32 #

    你好,

    我用 X=(x1,x2,x3) 和 Y=y1 准备了一个线性回归模型,现在我想预测 x1。我该怎么做?

    • Jason Brownlee 2020年5月8日 上午6:31 #

      调用 model.predict()。

      • Aditya Bothra 2020年8月19日 上午1:03 #

        我准备了一个线性回归模型,输入特征是 (x1)。x1 包含 300 个时间函数数据值,例如 2000 年 1 月 1 日是 250,2000 年 1 月 2 日是 247,2000 年 1 月 3 日是 263,依此类推。我想预测未来 x1 作为时间的函数。我该怎么做?

  6. vanitha 2020年8月17日 下午5:59 #

    谢谢。对一个重要问题的出色解释。

  7. Aditya Bothra 2020年8月19日 上午12:58 #

    你好,我想让一个回归模型只预测一列数据。只有一个特征,即时间序列值,我想预测它,如何在神经网络中使用它?

  8. Haroon khan 2020年8月19日 下午7:36 #

    我用随机森林分类器建立了一个模型,使用训练集中的 3 个特征预测了我的测试集,现在我想通过为这些特征提供 3 个新/不同的值来预测新数据,但是遇到了错误
    pandas/_libs/index.pyx 在 pandas._libs.index.IndexEngine.get_loc() 中

    pandas/_libs/index.pyx 在 pandas._libs.index.IndexEngine.get_loc() 中

    pandas/_libs/index_class_helper.pxi 在 pandas._libs.index.Int64Engine._check_type() 中

    KeyError: ‘habitat’

    我做错了什么?

  9. Christos Karapapas 2020年9月23日 上午4:53 #

    又一篇很棒的文章!我有一个问题,针对以下场景。

    假设我们有包含 20 个特征的数据,并且我们已经完成了以下步骤:
    1) 我们研究了数据,2) 进行了所有必要的转换 3) 缩放 4) 额外的特征工程 5) 特征重要性检查 6) 手动和/或自动特征选择。

    我们最终得到了 5 个特征,所以在训练之前我们使用 PCA 进一步将维度降低到比如说两个分量。最后我们训练了一些模型,评估它们,然后选择一个用于“生产”。

    那么,现在客户向我们发送一个新样本来预测其类别。客户根据初始模式获取信息,对于每个样本,他可以给我们这 20 个特征的值。所以我们总是可以得到我们用于 PCA 的 (5) 个特征的列表,但我猜我们训练好的模型会期望两个值。

    所以,问题是,对于我们想要预测其目标类别的新样本,我们如何重新创建 PCA 的效果?

  10. Shivam Kumar 2020年9月25日 上午5:02 #

    如果我有 3 个颜色信号(蓝色、红色、绿色)一个接一个地显示,我们如何通过机器学习预测下一个结果颜色?以及我们需要哪种算法?
    请回答……………………..

  11. Sriram 2020年9月26日 上午1:25 #

    你好 Jason,我开发了一个分类模型,其中目标变量是多类别,带有一组组名。我使用 pd.get_dummies 对目标变量进行了编码。现在当我针对新的文本描述测试模型时,我得到了一个数值向量作为输出。我如何将此向量转换回组名?你能帮帮我吗?

  12. Thomas 2020年10月1日 上午5:30 #

    嘿伙计,很棒的文章。
    我只是不太确定预测后如何使用这些数据。

    因为我没有在我的模型中使用 customer_id 列,因为它是一个会降低模型准确性的特征。
    所以当我将我的“new_input”数据作为参数传递给模型时,它也没有 customer_id。
    那么如何知道我的哪些客户与某个预测相关联呢?

    • Jason Brownlee 2020年10月1日 上午6:35 #

      谢谢!

      移除客户 ID,但保留数组。ID 的索引(行号)将与模型输入的索引和模型预测的索引匹配。此索引将连接所有这三部分信息。

      例如,第 0 行的客户 ID、第 0 行的模型输入、第 0 行的预测结果都相互关联。

      • Sam 2020年12月16日 上午8:54 #

        你好 Jason,很棒的网站,谢谢你!

        如果由于数据不平衡而需要在使用管道进行拟合重采样之前删除客户 ID,您如何匹配客户 ID?过采样/欠采样是否意味着索引将不匹配?

  13. Aanchal Saraswat 2020年10月1日 下午4:14 #

    嘿,好文章,但我如何从我自己的数据集进行预测?比如说我有一个 Excel 文件中的数据集,在对数据集应用逻辑回归后,我得到了 80% 的准确率。现在我想提供一些输入并预测输出,我应该如何编写代码?

  14. Sravan 2020年11月3日 下午5:24 #

    是否有可能为所有类型的数据集编写单个代码?我的意思是,无论数据如何(分类、回归、分类、缺失、归一化……等等),代码都独立于数据集,适用于任何给定的数据,可以吗?

  15. Israel 2021年3月11日上午8:45 #

    亲爱的,您好!
    我正在研究一种传感器设备,它从样本物质中获取数据集,并通过机器学习算法预测物质。我使用的是Scikit Learn的决策树。但我注意到,如果我获取的值非常接近的数据集,传感器就很难准确地区分这些数据集,从而开始做出错误的预测。例如,如果我获取以下数据集:

    v1,v2,v3,v4,v5,目标
    12,17,2,20,105,纸
    11,16,2,21,103,纸巾
    13,18,3,21,102,纸板

    当我用一个数据集测试传感器时,比如

    13,19,3,21,102

    它可能会预测纸巾或纸张,而不是预测纸板。

    在这种情况下,我应该怎么做才能提高它区分这些值的能力?我需要采用什么算法吗?
    谢谢你。

  16. akurt 2021年3月17日上午1:19 #

    感谢您的这篇好文章。
    如果我缩放了我的数据集怎么办?我应该以原始数据格式提供输入还是应该先缩放它?在我的例子中,当我以原始数据格式提供输入时,我的模型会失败,但当我提供缩放形式时,它能够成功预测。

    • Jason Brownlee 2021年3月17日上午6:09 #

      评估您的模型在缩放和不缩放情况下的性能,并使用效果最好的方法。

  17. Priyanka 2021年3月20日上午12:53 #

    嗨,Jason,

    感谢您的帖子,读得很好
    有什么想法可以将模型与在Tkinter中创建的GUI连接起来,以预测通过GUI共享的输入输出吗?

    • Jason Brownlee 2021年3月20日上午5:24 #

      这听起来像是一个软件工程问题,也许你可以将你的代码和问题发布到stackoverflow。

  18. Ganpat Patel 2021年3月24日下午8:34 #

    嗨 Jason
    好文!
    我有一个疑问,如果您能帮助我,那就太好了。

    我正在预测书籍的“用户评分”。在这个模型中,关键特征可以是“作者”姓名。现在作者姓名是字符串。所以,我首先使用了Label Encoder,它为每个作者姓名分配了一个唯一的数字。但是现在,当我获取我想要预测值的新输入时,问题是作者姓名在输入中将是一个“字符串”。那么现在我怎么知道在拟合模型时哪个数字被分配给了那个特定的作者呢?
    为了摆脱这个问题,我首先将我的新输入特征添加到我现有的数据框中,然后再次使用Label Encoder。但是,在这种方法中,如果作者是没有任何历史数据的新作者,我的预测就会出错。当我们第二次添加输入后使用Label Encoder时,它会改变分配给不同名称的数字。

    解决此类问题的方法是什么?
    请帮助…

    • Jason Brownlee 2021年3月25日上午4:43 #

      一些可以探索的想法

      也许你可以准备好你领域中所有已知的作者?
      也许你可以使用词袋编码?
      也许你可以为作者使用词嵌入?
      也许你可以随着新作者的出现而添加到你的编码中?
      也许你可以从你的模型中删除作者,或者确认它具有预测性?
      也许你可以查阅文献寻找常见解决方案?

  19. Anass 2021年3月26日上午11:22 #

    嗨 Jason

    非常感谢您的精彩课程。

    我请求一些帮助。

    我一次性在多个嵌入上训练了一个机器学习模型,现在我想只在一个嵌入上进行测试。我的模型的输入形状是 (?, 10, 300),即10个维度为300的嵌入。我想在 (?, 1, 300) 上进行测试。

    解决此类问题的方法是什么?
    请帮帮我。

    • Jason Brownlee 2021年3月29日上午5:49 #

      不客气。

      抱歉,我不明白你为什么要为训练和测试使用单独的嵌入?

  20. Sara 2021年5月28日上午4:28 #

    嗨,Jason,
    我在拟合一个机器学习模型(BoostedTreesRegressor)到输入特征时遇到了问题,其中输入特征包含在训练期间必须训练(优化)的变量。我指的不是超参数,而是指像神经网络中的权重/偏差那样逐渐变化的变量。
    我认为 sklearn 库就像一个黑盒子,只训练模型参数,无法训练额外的变量或参数。而在 TensorFlow 1 中,通过使用 tf.Variable 和 sess.run,我们可以训练除常规模型变量之外的变量。
    但是,我找不到任何在 TensorFlow 中将 tf.Variable 与 BoostedTreesRegressor 一起使用的方法。
    你认为在 Python 库中训练额外变量的可能性如何?任何帮助都将不胜感激。Sara

    • Jason Brownlee 2021年5月28日上午6:48 #

      也许每次数据发生变化时都重新拟合一个新模型,以克服概念漂移。

  21. Abdul Munem 2021年5月30日上午5:03 #

    你好,Jason,解释得很棒,但我有一个有点奇怪的问题。

    我正在使用Kaggle上一个非常流行的信用卡欺诈检测数据集来训练一个模型,它有31个特征,其中只有3个是已知的:自数据集中第一笔交易以来的时间、金额和交易类别(是否欺诈或合法)。还有28个其他特征,数据集作者说这些特征已使用PCA进行降维以保护用户隐私。问题是,我打算将此模型连接到的程序具有较少的输入特征,我不知道如何使用我的模型进行预测。

    这是一个大学项目,所以我们的应用程序数据集不像真实世界的交易那样完整,而且由于保密原因,前面提到的28个特征是未知的,这也没有帮助,有什么建议可以解决这个问题吗?

    • Jason Brownlee 2021年5月30日上午5:54 #

      谢谢!

      抱歉,我不太明白。

      通常,模型必须根据可用数据进行调整。如果它是用不同的数据(不同数量的特征)准备的,那可能就不合适了。

      如果模型和新数据相关,也许你可以使用迁移学习。
      也许你可以填补缺失值。

  22. Priyanshu 2021年7月15日下午5:11 #

    嗨 Jason,很棒的文章
    我有一个问题,我们如何分离出用于预测的值,例如 [ 0.23.77],我想将 [.23] 放在一个单独的列中,将 [.77] 放在另一个列中。原因是我想根据输出预测来训练一个新模型。

    • Jason Brownlee 2021年7月16日上午5:22 #

      也许你可以四舍五入你的值?
      也许你可以使用格式化来限制显示值时的精度?

  23. Timothy J Fisher 2021年7月22日上午9:10 #

    在R中,有没有办法将真阳性结果与原始数据集匹配,以便进一步检查该正确预测部分的属性?我正在使用H2O,H2O框架似乎会删除唯一标识符,这会阻碍与包含我希望进一步检查的属性的原始训练数据集进行连接。

    有什么建议吗?

    • Jason Brownlee 2021年7月23日上午5:42 #

      是的,你需要为此分析编写一些自定义代码。

  24. Anamika 2021年8月10日下午4:02 #

    你好,
    感谢分享以上信息,这真的很有帮助。您能告诉我有没有办法在将输入拟合到我们预测模型后,可以计算每个输入值的准确度以及输出?就像上面的例子一样
    [-1.31478732 -8.78528161] 0
    [ 1.57989896 -1.462412 ] 1
    [ 1.36989667 -1.3964704 ] 1

    我想预测每个输入数据的准确性?

  25. mimiya 2021年8月23日上午4:38 #

    完美的工作,谢谢你。

    我如何添加一个包含预测结果的“预测”列到测试集中。

    • Adrian Tam
      Adrian Tam 2021年8月23日上午5:20 #

      也许你可以先获取预测结果,然后使用numpy.hstack()函数来“添加”列。

  26. Ashok 2021年9月13日上午4:57 #

    你好,
    我分别使用Count CountVectorizer和LabelEncoder对特征和目标值进行了编码。在验证数据集预测之后。我如何将预测的目标列值转换回原始值并与特征列连接?
    请帮助。
    提前感谢。

    • Adrian Tam
      Adrian Tam 2021年9月14日下午1:41 #

      LabelEncoder有inverse_transform()函数可以帮助你。

  27. Ashok 2021年9月16日上午3:22 #

    谢谢你,Adrian。

  28. Ahmet 2021年11月24日上午9:19 #

    你好,

    我有一个大约40,000行的数据集,有3个属性和1个类属性,我对其进行预测,并且行按该类属性(0到20)排序。我可以逐行进行预测。我的问题是;

    我如何查看5行后进行预测?我不想对每行进行预测,我想在查看5批行后看到预测。这意味着40,000/5=8,000个预测,并根据这些预测计算准确性。

    请帮忙……

    • Adrian Tam
      Adrian Tam 2021年11月24日下午1:16 #

      不,你仍然需要逐行运行准确性。准确性就是这样计算的。不过,你可以按批次运行。每次运行“model.predict(X)”时,你都可以将一个批次作为数组X传递。

  29. keyvan 2021年12月3日上午10:04 #

    嗨,Adrian
    我有一个问题。我有一个数据集,其中任何一个样本的一个特征是字符串,其他特征是数值,目标也是数值。我使用OrdinalEncoder将字符串特征更改为数值并训练我的模型(随机森林回归)。但是现在我想预测一个新的输入,但是当我给模型新的输入(一个特征是字符串,另一个是数值)时,Python给了我一个错误:“无法将字符串转换为浮点数”
    你能帮帮我吗?
    谢谢

    • Adrian Tam
      Adrian Tam 2021年12月8日上午6:49 #

      哪个代码给你那个错误?

  30. Georgy 2022年6月27日上午4:11 #

    嗨 Adrian,

    我正在研究一个人体活动分类模型,该模型接收实时数据并预测和统计活动执行的次数。在训练和测试时,我们从 CSV 文件中获取数据。因此,由于它是一个时间序列模型,我计划使用滑动窗口进行分割。我卡在理解如何在数据从加速度计实时传入时实现这一点。我是否必须先将它们存储到类似的 CSV 文件中,然后再获取所需的样本,或者在 Python 中是否有其他方法可以做到这一点?

    另外,如果您能指导我找到任何实现类似功能的资源或材料,我将不胜感激。

  31. Tom Lu 2022年6月29日上午8:54 #

    你好Jason,很棒的文章。我真的很喜欢。

    一个快速问题:如果我有非常多的X[i]和yhat[i],比如i=20,000,并且我希望将结果导出到Excel文件而不是使用print(X[i], yhat[i])函数,我该如何编写代码?

    非常感谢您的帮助。

  32. zandel 2022年8月13日上午1:15 #

    非常感谢,花了一个晚上寻找这个答案。(就机器学习而言,我是一个初学者)。我还没有尝试你的代码,但它看起来不错,所以我不想等就说声谢谢。顺便说一句,有没有人觉得有点好笑,网上所有的教程几乎解释了predict()的所有内容,除了这个“小”东西,而这个东西在你想要使用预测时实际上是必不可少的。

    • James Carmichael 2022年8月13日上午6:02 #

      非常欢迎你,zandel!感谢你的支持和反馈!我们非常感谢。

  33. zandel 2022年8月14日下午2:09 #

    您能否帮助我解决以下问题,不一定要提供完整的解决方案,提供一篇好的文章即可。一旦我们有一个能产生良好预测的模型,我们可能希望忘记训练和测试数据,只关注我们想要预测的数据。我甚至不确定正确的术语是什么,我们姑且称之为“工作数据”。例如,明天将有周一的数据,我想要周一的预测;周二将有周二的数据,依此类推。当然,我知道如何每天读取新的csv文件,但在那一步之后,我找到的所有例子都谈到拆分为训练集和测试集,而我不想每次都这样做。

  34. Brian 2022年10月27日下午2:20 #

    感谢这篇精彩的文章。我用这个技术测试了我的一个机器学习模型。遗憾的是,当我按照您的方法提供新输入(与测试集的第一行相同)时,它预测不准确。我感到困惑。

  35. Brian 2022年10月28日下午5:20 #

    谢谢詹姆斯,我将更深入地研究它。我实际上认为我得到了准确的结果,但我的思绪一片混乱,我可能被搞糊涂了。非常感谢您的帮助。我想我会把它整理好的。谢谢!

  36. Tabitha 2022年11月14日下午8:16 #

    你好,
    很棒的文章。我正在尝试用Numpy数组来做这个。
    x = np.array([121.75784416, 124.20093101, 116.35841785, 108.6051847, 95.61268754,
    77.59019338 ,50.31384723, 23.38073107 , 1.46549092 , -8.56279478,
    -13.12810052 ,-14.60476827 ,-14.54182944, -12.89880915 ,-10.53529561,
    -6.77584712 , -4.21031351 , -1.80700285 , 0.5323695 , 2.84602143,
    5.14464137 , 5.2340063 , 5.67851523 , 5.75220116 , 6.42275109,
    7.13850903 , 7.78268196 , 8.22157889 , 8.40510482 , 7.69649975,
    7.95839569 , 7.23596462 , 7.71076855 , 6.82815448 , 7.11350441,
    6.96096235 , 6.35443428 , 6.16953221 , 4.97815714 , 5.26981308,
    4.57670701 , 5.54436694])
    我不太确定如何初始化输出y,我尝试将y保留为
    y = make_blobs(n_samples=1000, centers=2, n_features=2, random_state=2)
    但我得到了一个错误,即“tuple”对象没有“shape”属性
    请帮我解决这个问题。

    • James Carmichael 2022年11月15日上午7:51 #

      嗨 Tabitha…

      感谢您的询问。

      我很想帮忙,但我实在没有能力为您调试代码。

      我很乐意提出一些建议

      考虑将代码积极削减到最低要求。这将帮助您隔离问题并专注于它。
      考虑将问题简化为一个或几个简单的例子。
      考虑寻找其他可行的类似代码示例,并慢慢修改它们以满足您的需求。这可能会暴露您的失误。
      考虑在 StackOverflow 上发布您的问题和代码。

  37. Mohammad Aleem 2023年4月22日下午6:40 #

    你好 Jason B,

    我正在开发一个逻辑回归模型,其中输入数据包含许多分类变量作为预测因子。我使用独热编码(one-hot encoding)和get_dummies函数来获取这些列的数值。该模型在预测训练和测试数据的结果时运行良好,这些数据是使用sklearn库的train_test_split()函数从数据集中创建的。现在,我尝试使用单行/单行输入进行预测,并且无法运行我为训练数据集运行的所有步骤,因为get_dummies对于1行数据返回0行。我如何实现单行数据的分类到数值转换?请举例说明如何操作。感谢您精彩的文章。

  38. Imene 2023年8月8日上午4:12 #

    你好,

    非常感谢您提供这个有趣的话题。

    请问,在进行5折交叉验证后,我们如何将输入数据与其预测结果关联起来?例如,如果我们使用以下指令:

    predicted_labels = cross_val_predict(model, texts, labels, cv=5) # texts是我们的数据,因为它是使用BERT进行的文本分类。

    是否可以使用以下代码将texts、labels和predicted_label全部放在一起?

    predictions_data = {
    “文本”: texts,
    “黄金标签”: labels,
    “预测标签”: predicted_labels,
    }

    predictions_with_data_new_order = pd.DataFrame(predictions_data)

    我担心的是,texts 和 labels 保持其原始顺序,因此将它们与由于交叉验证中数据洗牌而可能具有不同顺序的 predicted_label 匹配是不正确的。

  39. Rohit 2023年9月19日下午11:19 #

    我正在处理功耗和生产数据集。

    我想预测系统中每个客户(例如10个)在下一个时间戳的功耗。

    我如何获得每个客户的预测?此外,如何将这些当前时间戳的预测值或实际值重新添加到基于输入数据集训练的模型中。

  40. Rohit 2023年9月19日下午11:21 #

    嗨,谢谢这篇文章。

    我正在处理功耗和生产数据集。

    我想预测系统中每个客户(例如10个)在下一个时间戳的功耗。

    我如何获得每个客户的预测?此外,如何将这些当前时间戳的预测值或实际值重新添加到基于输入数据集训练的模型中。

  41. Vincent 2024年3月22日下午9:46 #

    你好,我正在做一个预测水稻产量的项目。我的训练数据集有40个特征,测试数据集有39个特征。我训练了模型并得到了很好的准确率。问题在于部署时,我无法使用所有40个特征作为输入。所以我在如何指定我想要的输入特征方面遇到了挑战。我得到了这个错误:ValueError
    ValueError: X有4个特征,但RandomForestRegressor期望40个特征作为输入。
    请帮助我,谢谢

    • James Carmichael 2024年3月23日上午8:25 #

      嗨 Vincent…你遇到的错误表明你的模型,一个RandomForestRegressor,是用具有40个特征的数据训练的,但是当你尝试进行预测或应用模型时,你提供的输入只有4个特征。这种差异导致了错误。

      要解决这个问题,你需要确保用于预测的输入数据与你用于训练的数据具有相同的结构(即,相同的特征数量)。以下是解决问题分步方法:

      1. 识别缺失特征
      首先,你需要识别部署数据集中缺少哪些特征。比较训练数据集中的列和部署数据集中的列,找出哪些列缺失。

      2. 部署的特征工程
      如果有些特征你无法在部署时直接使用或计算,你需要修改你的模型或数据收集方式。选项包括:

      移除特征:如果缺失的特征对预测不关键,你可以考虑在没有这些特征的情况下重新训练你的模型。这意味着你将从训练数据集中删除相同的特征并重新训练。

      默认值或插补:对于某些特征,用默认值填充缺失值或使用某种形式的插补(均值、中位数、众数,甚至是基于模型的插补)可能是有意义的。这应谨慎进行并结合领域知识,因为它可能会影响模型的准确性。

      特征工程:有时,你可以从部署时已有的特征中派生出缺失的特征。这需要理解领域以及特征之间的关系。

      3. 一致的数据转换
      确保应用于训练数据的任何数据预处理或转换(缩放、分类变量编码等)也一致地应用于用于预测的数据。

      4. 更新你的部署脚本
      一旦你解决了缺失特征的问题,更新你的部署脚本以确保它:

      正确包含所有必要的特征。
      应用与你的训练管道相同的预处理步骤。
      如果适用,可以处理某些数据可能缺失或不可用的情况。
      示例修复
      如果错误是因为您只提供了4个特征中的40个,您需要确保所有40个特征都包含在用于预测的输入数据框中。例如,如果您使用pandas:

      python
      复制代码
      import pandas as pd

      # 创建具有正确特征数量的数据框示例
      # 假设`feature_names`是您40个特征名称的列表

      # 创建一个具有正确结构的空数据框
      input_df = pd.DataFrame(columns=feature_names)

      # 使用您的输入数据填充数据框
      # 在这里,您将使用您想要预测的数据填充`input_df`的行

      # 确保数据框的结构与训练数据相匹配
      # 这可能包括为缺失的列设置默认值

      # 现在您可以使用`input_df`进行预测
      predictions = trained_model.predict(input_df)
      如果特定特征在部署时不可用或不适用,请考虑前面提到的处理它们的策略。

发表评论

Machine Learning Mastery 是 Guiding Tech Media 的一部分,Guiding Tech Media 是一家领先的数字媒体出版商,专注于帮助人们了解技术。访问我们的公司网站以了解更多关于我们的使命和团队的信息。