如今,使用像 scikit-learn 这样的库,将模型拟合到训练数据集变得非常容易。
只需几行代码,就可以在一个数据集上拟合和评估模型。这变得如此容易,以至于也带来了一些问题。
相同的几行代码被一遍又一遍地重复,可能不清楚如何实际使用模型进行预测。或者,如果进行了预测,如何将预测值与实际输入值关联起来。
我知道这是事实,因为我收到了许多带有以下问题的电子邮件:
我如何将预测值与输入数据连接起来?
这是一个常见的问题。
在本教程中,您将学习如何将预测值与机器学习模型的输入关联起来。
完成本教程后,您将了解:
- 如何在一个训练数据集上拟合和评估模型。
- 如何使用已拟合的模型一次一个地和批量进行预测。
- 如何将预测值与模型的输入连接起来。
通过我的新书《使用 Python 进行机器学习精通》**启动您的项目**,其中包括**分步教程**和所有示例的 **Python 源代码**文件。
让我们开始吧。
- **2020年1月更新**:已针对 scikit-learn v0.22 API 的变更进行更新。

如何将模型输入数据与机器学习预测结果连接
照片由Ian D. Keating 拍摄,保留部分权利。
教程概述
本教程分为三个部分;它们是:
- 准备训练数据集
- 如何在训练数据集上拟合模型
- 如何将预测结果与模型输入连接
准备训练数据集
让我们首先定义一个可以用于模型的数据集。
您可能在 CSV 文件或内存中的 NumPy 数组中拥有自己的数据集。
在这种情况下,我们将使用一个简单的两类或二元分类问题,其中包含两个数值输入变量。
- 输入:两个数值输入变量
- 输出:一个类别标签,为 0 或 1。
我们可以使用 make_blobs() scikit-learn 函数创建这个包含 1,000 个样本的数据集。
下面的示例创建了数据集,其中输入 (X) 和输出 (y) 分别存储在单独的数组中。
1 2 3 4 5 6 |
# 创建测试数据集的示例 from sklearn.datasets import make_blobs # 创建输入和输出 X, y = make_blobs(n_samples=1000, centers=2, n_features=2, random_state=2) # 总结数组的形状 print(X.shape, y.shape) |
运行示例会创建数据集并打印每个数组的形状。
我们可以看到数据集中有 1,000 行用于 1,000 个样本。我们还可以看到输入数据有两列用于两个输入变量,并且输出数组是一个长数组,其中包含输入数据中每一行的类别标签。
1 |
(1000, 2) (1000,) |
接下来,我们将在这个训练数据集上拟合一个模型。
如何在训练数据集上拟合模型
现在我们有了一个训练数据集,我们可以用这些数据拟合一个模型。
这意味着我们将向学习算法提供所有的训练数据,让学习算法发现输入和输出类别标签之间的映射,从而最小化预测误差。
在这种情况下,因为这是一个两类问题,我们将尝试逻辑回归分类算法。
这可以通过 scikit-learn 的 LogisticRegression 类来实现。
首先,必须定义模型,并包含我们需要的任何特定配置。在这种情况下,我们将使用高效的“_lbfgs_”求解器。
接下来,通过调用 `fit()` 函数并传入训练数据集,将模型拟合到训练数据集上。
最后,我们可以通过以下方式评估模型:首先使用它对训练数据集进行预测(通过调用 `predict()`),然后将预测结果与预期类别标签进行比较并计算准确率。
完整的示例如下所示。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
# 在训练数据集上拟合逻辑回归 from sklearn.linear_model import LogisticRegression from sklearn.datasets import make_blobs from sklearn.metrics import accuracy_score # 创建输入和输出 X, y = make_blobs(n_samples=1000, centers=2, n_features=2, random_state=2) # 定义模型 model = LogisticRegression(solver='lbfgs') # 拟合模型 model.fit(X, y) # 进行预测 yhat = model.predict(X) # 评估预测 acc = accuracy_score(y, yhat) print(acc) |
运行此示例将模型拟合到训练数据集上,然后打印分类准确率。
在这种情况下,我们可以看到模型在训练数据集上具有 100% 的分类准确率。
1 |
1.0 |
现在我们知道如何拟合和评估训练数据集上的模型了,让我们来探究问题的根源。
如何将模型的输入与输出连接起来?
如何将预测结果与模型输入连接
一个训练好的机器学习模型接收输入并进行预测。
这可能是一次处理一行数据;例如
- 输入: 2.12309797 -1.41131072
- 输出: 1
用我们的模型这很简单。
例如,我们可以使用数组输入进行预测并得到一个输出,并且我们知道两者是直接连接的。
输入必须定义为数字数组,具体来说是 1 行 2 列。我们可以通过将示例定义为行列表(每行包含列列表)来实现,例如:
1 2 3 |
... # 定义输入 new_input = [[2.12309797, -1.41131072]] |
然后我们可以将其作为模型的输入进行预测。
1 2 3 |
... # 获取新输入的预测结果 new_output = model.predict(new_input) |
结合上一节中拟合模型的部分,完整的示例如下所示。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
# 使用模型进行单次预测 from sklearn.linear_model import LogisticRegression from sklearn.datasets import make_blobs # 创建输入和输出 X, y = make_blobs(n_samples=1000, centers=2, n_features=2, random_state=2) # 定义模型 model = LogisticRegression(solver='lbfgs') # 拟合模型 model.fit(X, y) # 定义输入 new_input = [[2.12309797, -1.41131072]] # 获取新输入的预测结果 new_output = model.predict(new_input) # 总结输入和输出 print(new_input, new_output) |
运行该示例将定义新的输入并进行预测,然后打印输入和输出。
我们可以看到,在这种情况下,模型预测输入的类别标签为 1。
1 |
[[2.12309797, -1.41131072]] [1] |
如果我们在自己的应用程序中使用该模型,这种模型用法将允许我们直接关联每次预测的输入和输出。
如果我们需要用“_垃圾邮件_”和“_非垃圾邮件_”等有意义的词替换标签 0 和 1,我们可以用一个简单的 if 语句来做到这一点。
到目前为止进展顺利。
当模型被用于一次性进行多次预测时会发生什么?
也就是说,当一次向模型提供多行或多个样本时,我们如何将预测结果与输入关联起来?
例如,我们可以像上一节评估模型时那样,对训练数据集中的 1,000 个示例中的每一个进行预测。在这种情况下,模型将进行 1,000 个不同的预测,并返回一个包含 1,000 个整数值的数组。每个预测对应 1,000 个输入数据行中的一行。
重要的是,输出数组中预测的顺序与进行预测时提供给模型的输入行的顺序匹配。这意味着索引 0 处的输入行与索引 0 处的预测匹配;索引 1、索引 2,一直到索引 999 也是如此。
因此,我们可以根据它们的索引直接关联输入和输出,因为我们知道在对多行输入进行预测时,顺序是保留的。
让我们用一个例子来具体说明。
首先,我们可以对训练数据集中每一行的输入进行预测
1 2 3 |
... # 对整个训练数据集进行预测 yhat = model.predict(X) |
然后我们可以遍历索引并访问每个索引的输入和预测输出。
这准确地展示了如何将预测结果与输入行连接起来。例如,第 0 行的输入和索引 0 的预测结果:
1 2 |
... print(X[0], yhat[0]) |
在这种情况下,我们只看前 10 行及其预测。
1 2 3 4 |
... # 连接预测结果与输出 for i in range(10): print(X[i], yhat[i]) |
综上所述,下面列出了对训练数据中的每一行进行预测并将预测结果与输入连接起来的完整示例。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
# 使用模型进行单次预测 from sklearn.linear_model import LogisticRegression from sklearn.datasets import make_blobs # 创建输入和输出 X, y = make_blobs(n_samples=1000, centers=2, n_features=2, random_state=2) # 定义模型 model = LogisticRegression(solver='lbfgs') # 拟合模型 model.fit(X, y) # 对整个训练数据集进行预测 yhat = model.predict(X) # 连接预测结果与输出 for i in range(10): print(X[i], yhat[i]) |
运行该示例,模型对训练数据集中的 1,000 行进行 1,000 次预测,然后将前 10 个示例的输入与预测值连接起来。
这提供了一个模板,您可以根据自己的预测建模项目进行使用和调整,通过行索引将预测结果与输入行连接起来。
1 2 3 4 5 6 7 8 9 10 |
[ 1.23839154 -2.8475005 ] 1 [-1.25884111 -8.57055785] 0 [ -0.86599821 -10.50446358] 0 [ 0.59831673 -1.06451727] 1 [ 2.12309797 -1.41131072] 1 [-1.53722693 -9.61845366] 0 [ 0.92194131 -0.68709327] 1 [-1.31478732 -8.78528161] 0 [ 1.57989896 -1.462412 ] 1 [ 1.36989667 -1.3964704 ] 1 |
进一步阅读
如果您想深入了解,本节提供了更多关于该主题的资源。
文章
API
- sklearn.datasets.make_blobs API
- sklearn.metrics.accuracy_score API
- sklearn.linear_model.LogisticRegression API
总结
在本教程中,您学习了如何将预测值与机器学习模型的输入关联起来。
具体来说,你学到了:
- 如何在一个训练数据集上拟合和评估模型。
- 如何使用已拟合的模型一次一个地和批量进行预测。
- 如何将预测值与模型的输入连接起来。
你有什么问题吗?
在下面的评论中提出你的问题,我会尽力回答。
一篇关于机器学习的优秀文章
谢谢!
好文章,继续写
谢谢!
如果数据集包含字符串列,如何拟合?
您可以将字符串转换为数字。例如,分类变量使用独热编码,自由文本使用词袋模型。
你好 Jason!我有个问题
我正在进行逻辑回归以预测客户流失。我使用所有客户的样本,目标变量“1”表示流失,“0”表示留存。我的问题是:
——我正在用所有这些客户训练模型,并得到流失概率作为输出,我只能将这个模型应用于新记录,对吗?
——我对训练数据进行了大量的预处理和缩放方法,我需要将所有这些步骤也应用到我的新输入中,然后进行预测,对吗?
谢谢!
您可以随意使用该模型进行预测。只有在新示例(测试集)上评估模型,并使用最终模型进行您不知道答案的预测,才有意义。
是的,在训练数据集上执行的所有操作都必须在新数据上执行。
为了简化事情,可以使用 scikit 管道将所有预处理步骤链接起来。
你好 Jason!我有一个关于连接输入和输出的不同问题。
我有一个神经网络,输出层有 5 个节点。该模型应该预测一个数字,可以是 (-2, -1, 0, 1, 2)。
所以对于每个预测,我都会得到一个像这样的数组
[0.20181388, 0.19936344, 0.19890821, 0.19744289, 0.20247154]
现在我怎么知道每个框代表什么数字?因为看起来在一个构建、训练和预测之后,框 0 代表数字 1,而在另一个完整的构建、训练和预测之后,框 0 现在代表数字 -2。这里有什么联系?
谢谢!
如果你的模型对每个样本预测一个数字,那么你就有 5 个样本的预测结果。
如果你的模型对每个样本预测 5 个数字,那么你就有 1 个样本的预测结果。
谢谢您的回复!
是的,我的模型对每个样本预测一个数字,但上面显示的数组仅针对一个样本。
我应该更具体一点,但我的模型在训练后输出了大约 100 个测试样本。所以我会得到一个列表,其中包含 100 个子列表,每个子列表又包含 5 个浮点数。
所以我的问题是,对于每个样本,我不知道这 5 个预测数字代表什么。
它们代表您训练模型所要预测的任何内容。
你好,
我用 X=(x1,x2,x3) 和 Y=y1 准备了一个线性回归模型,现在我想预测 x1。我该怎么做?
调用 model.predict()。
我准备了一个线性回归模型,输入特征是 (x1)。x1 包含 300 个时间函数数据值,例如 2000 年 1 月 1 日是 250,2000 年 1 月 2 日是 247,2000 年 1 月 3 日是 263,依此类推。我想预测未来 x1 作为时间的函数。我该怎么做?
调用模型的预测函数。
谢谢。对一个重要问题的出色解释。
谢谢!
你好,我想让一个回归模型只预测一列数据。只有一个特征,即时间序列值,我想预测它,如何在神经网络中使用它?
将一个样本作为输入,调用 model.predict()。
https://machinelearning.org.cn/how-to-make-classification-and-regression-predictions-for-deep-learning-models-in-keras/
我用随机森林分类器建立了一个模型,使用训练集中的 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’
我做错了什么?
抱歉,我以前没有见过那个错误。你可以尝试在 stackoverflow 上搜索一下吗?
也许这个教程能帮助你加载数据
https://machinelearning.org.cn/load-machine-learning-data-python/
又一篇很棒的文章!我有一个问题,针对以下场景。
假设我们有包含 20 个特征的数据,并且我们已经完成了以下步骤:
1) 我们研究了数据,2) 进行了所有必要的转换 3) 缩放 4) 额外的特征工程 5) 特征重要性检查 6) 手动和/或自动特征选择。
我们最终得到了 5 个特征,所以在训练之前我们使用 PCA 进一步将维度降低到比如说两个分量。最后我们训练了一些模型,评估它们,然后选择一个用于“生产”。
那么,现在客户向我们发送一个新样本来预测其类别。客户根据初始模式获取信息,对于每个样本,他可以给我们这 20 个特征的值。所以我们总是可以得到我们用于 PCA 的 (5) 个特征的列表,但我猜我们训练好的模型会期望两个值。
所以,问题是,对于我们想要预测其目标类别的新样本,我们如何重新创建 PCA 的效果?
是的,您保留所有数据转换,并在建模之前使用它们来准备所有新数据。
有关更多信息,请参阅
https://machinelearning.org.cn/how-to-save-and-load-models-and-data-preparation-in-scikit-learn-for-later-use/
如果我有 3 个颜色信号(蓝色、红色、绿色)一个接一个地显示,我们如何通过机器学习预测下一个结果颜色?以及我们需要哪种算法?
请回答……………………..
这听起来像是序列分类,或许可以从这里列出的模型开始
https://machinelearning.org.cn/start-here/#deep_learning_time_series
你好 Jason,我开发了一个分类模型,其中目标变量是多类别,带有一组组名。我使用 pd.get_dummies 对目标变量进行了编码。现在当我针对新的文本描述测试模型时,我得到了一个数值向量作为输出。我如何将此向量转换回组名?你能帮帮我吗?
也许可以使用 OneHotEncoder,然后对预测结果调用 inverse_transform() 以获取字符串,请参阅此处
https://machinelearning.org.cn/one-hot-encoding-for-categorical-data/
嘿伙计,很棒的文章。
我只是不太确定预测后如何使用这些数据。
因为我没有在我的模型中使用 customer_id 列,因为它是一个会降低模型准确性的特征。
所以当我将我的“new_input”数据作为参数传递给模型时,它也没有 customer_id。
那么如何知道我的哪些客户与某个预测相关联呢?
谢谢!
移除客户 ID,但保留数组。ID 的索引(行号)将与模型输入的索引和模型预测的索引匹配。此索引将连接所有这三部分信息。
例如,第 0 行的客户 ID、第 0 行的模型输入、第 0 行的预测结果都相互关联。
你好 Jason,很棒的网站,谢谢你!
如果由于数据不平衡而需要在使用管道进行拟合重采样之前删除客户 ID,您如何匹配客户 ID?过采样/欠采样是否意味着索引将不匹配?
好问题,我在这里回答
https://machinelearning.org.cn/how-to-connect-model-input-data-with-predictions-for-machine-learning/
谢谢你的回复 Jason,但是链接指向的是这个页面,你能确认一下吗?再次感谢!
没错。上面的例子难道没有帮助你展示如何通过行索引连接 ID 吗?
哪一部分令人困惑?
嘿,好文章,但我如何从我自己的数据集进行预测?比如说我有一个 Excel 文件中的数据集,在对数据集应用逻辑回归后,我得到了 80% 的准确率。现在我想提供一些输入并预测输出,我应该如何编写代码?
是的,请看这个
https://machinelearning.org.cn/make-predictions-scikit-learn/
是否有可能为所有类型的数据集编写单个代码?我的意思是,无论数据如何(分类、回归、分类、缺失、归一化……等等),代码都独立于数据集,适用于任何给定的数据,可以吗?
不是真的,每个数据集都不同。
我们在这方面能做的最好的是自动机器学习。
https://machinelearning.org.cn/automl-libraries-for-python/
亲爱的,您好!
我正在研究一种传感器设备,它从样本物质中获取数据集,并通过机器学习算法预测物质。我使用的是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
它可能会预测纸巾或纸张,而不是预测纸板。
在这种情况下,我应该怎么做才能提高它区分这些值的能力?我需要采用什么算法吗?
谢谢你。
好问题,这可能会给你一些想法。
https://machinelearning.org.cn/faq/single-faq/what-algorithm-config-should-i-use
以及这份清单
https://machinelearning.org.cn/how-to-improve-machine-learning-results/
感谢您的这篇好文章。
如果我缩放了我的数据集怎么办?我应该以原始数据格式提供输入还是应该先缩放它?在我的例子中,当我以原始数据格式提供输入时,我的模型会失败,但当我提供缩放形式时,它能够成功预测。
评估您的模型在缩放和不缩放情况下的性能,并使用效果最好的方法。
嗨,Jason,
感谢您的帖子,读得很好
有什么想法可以将模型与在Tkinter中创建的GUI连接起来,以预测通过GUI共享的输入输出吗?
这听起来像是一个软件工程问题,也许你可以将你的代码和问题发布到stackoverflow。
嗨 Jason
好文!
我有一个疑问,如果您能帮助我,那就太好了。
我正在预测书籍的“用户评分”。在这个模型中,关键特征可以是“作者”姓名。现在作者姓名是字符串。所以,我首先使用了Label Encoder,它为每个作者姓名分配了一个唯一的数字。但是现在,当我获取我想要预测值的新输入时,问题是作者姓名在输入中将是一个“字符串”。那么现在我怎么知道在拟合模型时哪个数字被分配给了那个特定的作者呢?
为了摆脱这个问题,我首先将我的新输入特征添加到我现有的数据框中,然后再次使用Label Encoder。但是,在这种方法中,如果作者是没有任何历史数据的新作者,我的预测就会出错。当我们第二次添加输入后使用Label Encoder时,它会改变分配给不同名称的数字。
解决此类问题的方法是什么?
请帮助…
一些可以探索的想法
也许你可以准备好你领域中所有已知的作者?
也许你可以使用词袋编码?
也许你可以为作者使用词嵌入?
也许你可以随着新作者的出现而添加到你的编码中?
也许你可以从你的模型中删除作者,或者确认它具有预测性?
也许你可以查阅文献寻找常见解决方案?
嗨 Jason
非常感谢您的精彩课程。
我请求一些帮助。
我一次性在多个嵌入上训练了一个机器学习模型,现在我想只在一个嵌入上进行测试。我的模型的输入形状是 (?, 10, 300),即10个维度为300的嵌入。我想在 (?, 1, 300) 上进行测试。
解决此类问题的方法是什么?
请帮帮我。
不客气。
抱歉,我不明白你为什么要为训练和测试使用单独的嵌入?
嗨,Jason,
我在拟合一个机器学习模型(BoostedTreesRegressor)到输入特征时遇到了问题,其中输入特征包含在训练期间必须训练(优化)的变量。我指的不是超参数,而是指像神经网络中的权重/偏差那样逐渐变化的变量。
我认为 sklearn 库就像一个黑盒子,只训练模型参数,无法训练额外的变量或参数。而在 TensorFlow 1 中,通过使用 tf.Variable 和 sess.run,我们可以训练除常规模型变量之外的变量。
但是,我找不到任何在 TensorFlow 中将 tf.Variable 与 BoostedTreesRegressor 一起使用的方法。
你认为在 Python 库中训练额外变量的可能性如何?任何帮助都将不胜感激。Sara
也许每次数据发生变化时都重新拟合一个新模型,以克服概念漂移。
你好,Jason,解释得很棒,但我有一个有点奇怪的问题。
我正在使用Kaggle上一个非常流行的信用卡欺诈检测数据集来训练一个模型,它有31个特征,其中只有3个是已知的:自数据集中第一笔交易以来的时间、金额和交易类别(是否欺诈或合法)。还有28个其他特征,数据集作者说这些特征已使用PCA进行降维以保护用户隐私。问题是,我打算将此模型连接到的程序具有较少的输入特征,我不知道如何使用我的模型进行预测。
这是一个大学项目,所以我们的应用程序数据集不像真实世界的交易那样完整,而且由于保密原因,前面提到的28个特征是未知的,这也没有帮助,有什么建议可以解决这个问题吗?
谢谢!
抱歉,我不太明白。
通常,模型必须根据可用数据进行调整。如果它是用不同的数据(不同数量的特征)准备的,那可能就不合适了。
如果模型和新数据相关,也许你可以使用迁移学习。
也许你可以填补缺失值。
嗨 Jason,很棒的文章
我有一个问题,我们如何分离出用于预测的值,例如 [ 0.23.77],我想将 [.23] 放在一个单独的列中,将 [.77] 放在另一个列中。原因是我想根据输出预测来训练一个新模型。
也许你可以四舍五入你的值?
也许你可以使用格式化来限制显示值时的精度?
在R中,有没有办法将真阳性结果与原始数据集匹配,以便进一步检查该正确预测部分的属性?我正在使用H2O,H2O框架似乎会删除唯一标识符,这会阻碍与包含我希望进一步检查的属性的原始训练数据集进行连接。
有什么建议吗?
是的,你需要为此分析编写一些自定义代码。
你好,
感谢分享以上信息,这真的很有帮助。您能告诉我有没有办法在将输入拟合到我们预测模型后,可以计算每个输入值的准确度以及输出?就像上面的例子一样
[-1.31478732 -8.78528161] 0
[ 1.57989896 -1.462412 ] 1
[ 1.36989667 -1.3964704 ] 1
我想预测每个输入数据的准确性?
也许scikit-learn函数https://scikit-learn.cn/stable/modules/generated/sklearn.metrics.accuracy_score.html可以帮助你。
完美的工作,谢谢你。
我如何添加一个包含预测结果的“预测”列到测试集中。
也许你可以先获取预测结果,然后使用numpy.hstack()函数来“添加”列。
你好,
我分别使用Count CountVectorizer和LabelEncoder对特征和目标值进行了编码。在验证数据集预测之后。我如何将预测的目标列值转换回原始值并与特征列连接?
请帮助。
提前感谢。
LabelEncoder有inverse_transform()函数可以帮助你。
谢谢你,Adrian。
你好,
我有一个大约40,000行的数据集,有3个属性和1个类属性,我对其进行预测,并且行按该类属性(0到20)排序。我可以逐行进行预测。我的问题是;
我如何查看5行后进行预测?我不想对每行进行预测,我想在查看5批行后看到预测。这意味着40,000/5=8,000个预测,并根据这些预测计算准确性。
请帮忙……
不,你仍然需要逐行运行准确性。准确性就是这样计算的。不过,你可以按批次运行。每次运行“model.predict(X)”时,你都可以将一个批次作为数组X传递。
嗨,Adrian
我有一个问题。我有一个数据集,其中任何一个样本的一个特征是字符串,其他特征是数值,目标也是数值。我使用OrdinalEncoder将字符串特征更改为数值并训练我的模型(随机森林回归)。但是现在我想预测一个新的输入,但是当我给模型新的输入(一个特征是字符串,另一个是数值)时,Python给了我一个错误:“无法将字符串转换为浮点数”
你能帮帮我吗?
谢谢
哪个代码给你那个错误?
嗨 Adrian,
我正在研究一个人体活动分类模型,该模型接收实时数据并预测和统计活动执行的次数。在训练和测试时,我们从 CSV 文件中获取数据。因此,由于它是一个时间序列模型,我计划使用滑动窗口进行分割。我卡在理解如何在数据从加速度计实时传入时实现这一点。我是否必须先将它们存储到类似的 CSV 文件中,然后再获取所需的样本,或者在 Python 中是否有其他方法可以做到这一点?
另外,如果您能指导我找到任何实现类似功能的资源或材料,我将不胜感激。
嗨 Georgy……我建议将它们存储在 CSV 文件中,正如您所建议的那样,这将使您能够将数据加载到数据框中并执行数据准备,以确保您的数据在拟合模型之前尽可能“干净”和一致。以下是一个您可能感兴趣的优秀资源
https://machinelearning.org.cn/data-preparation-for-machine-learning-7-day-mini-course/
你好Jason,很棒的文章。我真的很喜欢。
一个快速问题:如果我有非常多的X[i]和yhat[i],比如i=20,000,并且我希望将结果导出到Excel文件而不是使用print(X[i], yhat[i])函数,我该如何编写代码?
非常感谢您的帮助。
嗨,Tom……以下资源你可能会感兴趣
https://medium.com/@kasiarachuta/importing-and-exporting-csv-files-in-python-7fa6e4d9f408
非常感谢,花了一个晚上寻找这个答案。(就机器学习而言,我是一个初学者)。我还没有尝试你的代码,但它看起来不错,所以我不想等就说声谢谢。顺便说一句,有没有人觉得有点好笑,网上所有的教程几乎解释了predict()的所有内容,除了这个“小”东西,而这个东西在你想要使用预测时实际上是必不可少的。
非常欢迎你,zandel!感谢你的支持和反馈!我们非常感谢。
您能否帮助我解决以下问题,不一定要提供完整的解决方案,提供一篇好的文章即可。一旦我们有一个能产生良好预测的模型,我们可能希望忘记训练和测试数据,只关注我们想要预测的数据。我甚至不确定正确的术语是什么,我们姑且称之为“工作数据”。例如,明天将有周一的数据,我想要周一的预测;周二将有周二的数据,依此类推。当然,我知道如何每天读取新的csv文件,但在那一步之后,我找到的所有例子都谈到拆分为训练集和测试集,而我不想每次都这样做。
感谢这篇精彩的文章。我用这个技术测试了我的一个机器学习模型。遗憾的是,当我按照您的方法提供新输入(与测试集的第一行相同)时,它预测不准确。我感到困惑。
嗨 Brian…您可能会发现以下资源对提高准确性有所帮助。
https://machinelearning.org.cn/improve-model-accuracy-with-data-pre-processing/
谢谢詹姆斯,我将更深入地研究它。我实际上认为我得到了准确的结果,但我的思绪一片混乱,我可能被搞糊涂了。非常感谢您的帮助。我想我会把它整理好的。谢谢!
你好,
很棒的文章。我正在尝试用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”属性
请帮我解决这个问题。
嗨 Tabitha…
感谢您的询问。
我很想帮忙,但我实在没有能力为您调试代码。
我很乐意提出一些建议
考虑将代码积极削减到最低要求。这将帮助您隔离问题并专注于它。
考虑将问题简化为一个或几个简单的例子。
考虑寻找其他可行的类似代码示例,并慢慢修改它们以满足您的需求。这可能会暴露您的失误。
考虑在 StackOverflow 上发布您的问题和代码。
你好 Jason B,
我正在开发一个逻辑回归模型,其中输入数据包含许多分类变量作为预测因子。我使用独热编码(one-hot encoding)和get_dummies函数来获取这些列的数值。该模型在预测训练和测试数据的结果时运行良好,这些数据是使用sklearn库的train_test_split()函数从数据集中创建的。现在,我尝试使用单行/单行输入进行预测,并且无法运行我为训练数据集运行的所有步骤,因为get_dummies对于1行数据返回0行。我如何实现单行数据的分类到数值转换?请举例说明如何操作。感谢您精彩的文章。
嗨 Mohammad…以下资源可能对您在逻辑回归方面有所帮助
https://machinelearning.org.cn/logistic-regression-tutorial-for-machine-learning/
https://machinelearning.org.cn/implement-logistic-regression-stochastic-gradient-descent-scratch-python/
https://machinelearning.org.cn/multinomial-logistic-regression-with-python/
你好,
非常感谢您提供这个有趣的话题。
请问,在进行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 匹配是不正确的。
我正在处理功耗和生产数据集。
我想预测系统中每个客户(例如10个)在下一个时间戳的功耗。
我如何获得每个客户的预测?此外,如何将这些当前时间戳的预测值或实际值重新添加到基于输入数据集训练的模型中。
嗨 Rohit…以下资源你可能会感兴趣
https://machinelearning.org.cn/how-to-develop-lstm-models-for-multi-step-time-series-forecasting-of-household-power-consumption/
嗨,谢谢这篇文章。
我正在处理功耗和生产数据集。
我想预测系统中每个客户(例如10个)在下一个时间戳的功耗。
我如何获得每个客户的预测?此外,如何将这些当前时间戳的预测值或实际值重新添加到基于输入数据集训练的模型中。
你好,我正在做一个预测水稻产量的项目。我的训练数据集有40个特征,测试数据集有39个特征。我训练了模型并得到了很好的准确率。问题在于部署时,我无法使用所有40个特征作为输入。所以我在如何指定我想要的输入特征方面遇到了挑战。我得到了这个错误:ValueError
ValueError: X有4个特征,但RandomForestRegressor期望40个特征作为输入。
请帮助我,谢谢
嗨 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)
如果特定特征在部署时不可用或不适用,请考虑前面提到的处理它们的策略。