如何使用scikit-learn进行预测

一旦你在scikit-learn中选择并适合最终的机器学习模型,你就可以使用它来预测新的数据实例。

在初学者中,有一些关于如何确切地做到这一点的困惑。我经常看到这样的问题:

我如何在scikit-learn中使用我的模型进行预测?

在本教程中,你将确切地了解如何使用scikit-learn Python库中的最终机器学习模型进行分类和回归预测。

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

  • 如何最终确定模型,以便为进行预测做好准备。
  • 如何在scikit-learn工具包中进行类和概率预测。
  • 如何在scikit-learn包中进行回归预测。

我们开始吧。

教程概述

本教程分为3个部分,它们是:

  • 首先完成你的模型。
  • 如何使用分类模型进行预测。
  • 如何用回归模型进行预测。

1.首先确定你的模型

在你做出预测之前,你必须训练一个最终的模型。

你可能已经使用数据的k-fold交叉验证或训练/测试拆分对模型进行了训练。这样做是为了让你估计模型在样本外数据(例如新数据)上的技能。

这些模型已经达到了它们的目的,现在可以丢弃了。

现在,你必须根据所有可用的数据训练最终模型。

你可以在此处了解有关如何培训最终模型的更多信息:

2.如何使用分类模型进行预测

分类问题是模型学习输入特征和作为标签的输出特征(如“垃圾邮件”和“非垃圾邮件”)之间的映射的问题。

下面是一个简单的二进制分类问题的最终Logistic回归模型的示例代码。

虽然我们在本教程中使用的是Logistic回归,但在scikit-learn中的几乎所有分类算法上都有相同的函数可用。

# example of training a final classification model
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import make_blobs
# generate 2d classification dataset
X, y = make_blobs(n_samples=100, centers=2, n_features=2, random_state=1)
# fit final model
model = LogisticRegression()
model.fit(X, y)

在最终确定模型后,你可能希望将模型保存到文件,例如通过pickle。保存后,你可以随时加载模型并使用它进行预测。有关这方面的示例,请参阅帖子:

为简单起见,对于本教程中的示例,我们将跳过此步骤。

对于我们最终的模型,我们可能希望做出两种类型的分类预测;它们是类别预测和概率预测。

类型预测

类型预测是:给定最终的模型和一个或多个数据实例,预测数据实例的类型。

我们不知道新数据的结果类型。这就是我们首先需要模型的原因。

我们可以使用scikit-learn中使用recast()函数的最终分类模型来预测类型中的新数据实例。

例如,我们在名为Xnew的数组中有一个或多个数据实例。这可以传递给我们模型上的predict()函数,以便预测数组中每个实例的类值。

Xnew = [[...], [...]]
ynew = model.predict(Xnew)

多类预测

让我们用一个同时预测多个数据实例的例子来具体说明这一点。

# example of training a final classification model
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import make_blobs
# generate 2d classification dataset
X, y = make_blobs(n_samples=100, centers=2, n_features=2, random_state=1)
# fit final model
model = LogisticRegression()
model.fit(X, y)
# new instances where we do not know the answer
Xnew, _ = make_blobs(n_samples=3, centers=2, n_features=2, random_state=1)
# make a prediction
ynew = model.predict(Xnew)
# show the inputs and predicted outputs
for i in range(len(Xnew)):
	print("X=%s, Predicted=%s" % (Xnew[i], ynew[i]))

运行该示例将预测三个新数据实例的类型,然后将数据和预测一起打印。

X=[-0.79415228  2.10495117], Predicted=0
X=[-8.25290074 -4.71455545], Predicted=1
X=[-2.18773166  3.33352125], Predicted=0

单类预测

如果只有一个新数据实例,则可以将其作为数组包装的实例提供给recast()函数;例如:

# example of making a single class prediction
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import make_blobs
# generate 2d classification dataset
X, y = make_blobs(n_samples=100, centers=2, n_features=2, random_state=1)
# fit final model
model = LogisticRegression()
model.fit(X, y)
# define one new instance
Xnew = [[-0.79415228, 2.10495117]]
# make a prediction
ynew = model.predict(Xnew)
print("X=%s, Predicted=%s" % (Xnew[0], ynew[0]))

运行该示例将打印单个实例和预测的类型。

X=[-0.79415228, 2.10495117], Predicted=0

关于类型标签的注意事项

当你准备数据时,你将已经将域中的类值(如字符串)映射到整数值。你可能使用过LabelEncoding。

此LabelEncoding可用于通过inverse_transform()函数将整数转换回字符串值。

因此,你可能希望在拟合最终模型时保存(pickle)用于编码y值的LabelEncoding。

概率预测

你可能希望进行的另一种预测是数据实例属于每个类型的概率。

这称为概率预测,在给定新实例的情况下,模型将每个结果类型的概率作为介于0和1之间的值返回。

你可以通过调用recast_proba()函数在scikit-learn中进行以下类型的预测,例如:

Xnew = [[...], [...]]
ynew = model.predict_proba(Xnew)

此函数仅在那些能够进行概率预测的分类模型上可用,这些分类模型是大多数(但不是全部)模型。

下面的示例对Xnew数据实例数组中的每个示例进行概率预测。

# example of making multiple probability predictions
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import make_blobs
# generate 2d classification dataset
X, y = make_blobs(n_samples=100, centers=2, n_features=2, random_state=1)
# fit final model
model = LogisticRegression()
model.fit(X, y)
# new instances where we do not know the answer
Xnew, _ = make_blobs(n_samples=3, centers=2, n_features=2, random_state=1)
# make a prediction
ynew = model.predict_proba(Xnew)
# show the inputs and predicted probabilities
for i in range(len(Xnew)):
	print("X=%s, Predicted=%s" % (Xnew[i], ynew[i]))

运行实例进行概率预测,然后打印输入数据实例以及属于第一类和第二类(0和1)的每个实例的概率。

X=[-0.79415228 2.10495117], Predicted=[0.94556472 0.05443528]
X=[-8.25290074 -4.71455545], Predicted=[3.60980873e-04 9.99639019e-01]
X=[-2.18773166 3.33352125], Predicted=[0.98437415 0.01562585]

如果你想要向用户显示概率以供专家解释,这在你的应用程序中可能会很有帮助。

3.如何运用回归模型进行预测

回归是一个有监督的学习问题,在给定输入示例的情况下,模型学习到适当输出量的映射,例如“0.1”和“0.2”等。

下面是一个最终的线性回归模型的示例。同样,所展示的用于进行回归预测的功能适用于scikit-learn中提供的所有回归模型。

# example of training a final regression model
from sklearn.linear_model import LinearRegression
from sklearn.datasets import make_regression
# generate regression dataset
X, y = make_regression(n_samples=100, n_features=2, noise=0.1, random_state=1)
# fit final model
model = LinearRegression()
model.fit(X, y)

我们可以通过对最终模型调用recast()函数来预测最终回归模型的数量。

与分类一样,predict()函数接受一个或多个数据实例的列表或数组。

多元回归预测

下面的示例演示了如何对具有未知预期结果的多个数据实例进行回归预测。

# example of training a final regression model
from sklearn.linear_model import LinearRegression
from sklearn.datasets import make_regression
# generate regression dataset
X, y = make_regression(n_samples=100, n_features=2, noise=0.1)
# fit final model
model = LinearRegression()
model.fit(X, y)
# new instances where we do not know the answer
Xnew, _ = make_regression(n_samples=3, n_features=2, noise=0.1, random_state=1)
# make a prediction
ynew = model.predict(Xnew)
# show the inputs and predicted outputs
for i in range(len(Xnew)):
	print("X=%s, Predicted=%s" % (Xnew[i], ynew[i]))

运行该示例进行多个预测,然后并排打印输入和预测以供查看。

X=[-1.07296862 -0.52817175], Predicted=-61.32459258381131
X=[-0.61175641 1.62434536], Predicted=-30.922508147981667
X=[-2.3015387 0.86540763], Predicted=-127.34448527071137

一元回归预测

只要单个数据实例适当地包装在周围的列表或数组中,就可以使用相同的函数对其进行预测。

例如:

# example of training a final regression model
from sklearn.linear_model import LinearRegression
from sklearn.datasets import make_regression
# generate regression dataset
X, y = make_regression(n_samples=100, n_features=2, noise=0.1)
# fit final model
model = LinearRegression()
model.fit(X, y)
# define one new data instance
Xnew = [[-1.07296862, -0.52817175]]
# make a prediction
ynew = model.predict(Xnew)
# show the inputs and predicted outputs
print("X=%s, Predicted=%s" % (Xnew[0], ynew[0]))

运行该示例进行单个预测,并打印数据实例和预测以供查看。

X=[-1.07296862, -0.52817175], Predicted=-77.17947088762787

进一步阅读

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

01

Python

发表评论

邮箱地址不会被公开。 必填项已用*标注

什么阻碍了你实现迈入机器学习领域的目标?

什么阻碍了你实现迈入机器学习领域的目标?

2020-04-22 机器学习

如果你在为进入机器学习领域而挣扎,感觉到有什么东西阻止了自己的开始,那么你应该看看这篇文章。 在这篇文章中,我们会讨论阻止进入机器学习领域的自我限制的信念,让你明白面临的问题。 几乎总是一种自我限制的信念阻碍了你们的进步。 也许你会在一个或多个这样的信念中看到自己。如果是这样的话, [......]

了解详情

R语言机器学习迷你课程

R语言机器学习迷你课程

2020-08-12 机器学习

在这个迷你课程中,你将发现如何开始,构建精确的模型,并自信地完成在14天内使用R预测建模机器学习项目。 这是一个重要而重要的文章。你可能想把它书签。 了解如何准备数据,拟合机器学习模型,并用我的新书评估他们在r上的预测,包括14步教程、3个项目和完整源代码。 我们开始吧。 [......]

了解详情

关于机器学习的几点思考

关于机器学习的几点思考

2020-04-26 机器学习

机器学习是一个大的、跨学科的研究领域。 你可以通过机器学习获得令人印象深刻的结果,并找到非常具有挑战性的问题的解决方案。但这只是更广泛的机器学习领域的一小部分,通常被称为预测建模或预测分析。 在这篇文章中,你将发现如何改变你对机器学习的思考方式,以便更好地为你提供机器学习实践者的服务。 [......]

了解详情

找到你的机器学习部落

找到你的机器学习部落

2020-04-26 机器学习

机器学习是一个充满算法和数据的迷人而强大的研究领域。 问题是,有这么多不同类型的人对机器学习感兴趣,每个人都有不同的需求。重要的是要了解你想要从机器学习中得到什么,并根据这些需求调整你的自学。 如果你不这样做,你很容易就会陷入困境,迷失方向,失去兴趣,得不到你想要的东西。 找到 [......]

了解详情

应用机器学习过程

应用机器学习过程

2020-04-26 机器学习

随着时间的推移,在处理应用机器学习问题时,你会开发出一种模式或流程,以快速获得良好的正常结果。 一旦开发完成,你就可以在一个又一个项目上反复使用此过程。你的流程越健壮、越发达,你就能越快地获得可靠的结果。 在这篇文章中,我想与你分享我解决机器学习问题的过程框架。 你可以将其用作下一 [......]

了解详情