基于python的分类预测_如何使用Python scikit-learn机器学习库做分类和回归预测

scikit-learn是基于Python的一个机器学习库,你可以在scikit-learn库中选择合适的模型,使用它训练数据集并对新数据集作出预测。

对于初学者来说,有一个共同的困惑:

怎么使用scikit-learn库中的模型做预测?

本文的目的就是解答这个困惑,手把手地教你使用机器学习模型。

本文分以下三点内容:针对特定的预测如何选择合适的模型

什么是分类预测

什么是回归预测

废话少说,让我们开始吧!毕加索 作品:爱、名声和悲剧

一、选择模型

模型选择是机器学习的第一步。

你可以使用K折交叉验证或者分割训练集/测试集的方法处理数据集,并用来训练模型。这样做为了能够让训练出来的模型对新数据集做出预测。

还要判断该问题是分类问题还是回归问题,分类问题预测的是类别、标签,一般来说是二分类即(0,1),比如是否下雨。回归问题预测的是连续的数值,比如股票的价格。

二、如何使用分类模型

分类问题是指模型学习输入特征和输出标签之间的映射关系,然后对新的输入预测标签。拿识别垃圾邮件举例,输入的是邮件的文本、时间、标题等等特征,而输出的则是垃圾邮件和非垃圾邮件两个标签。模型通过训练数据集,学习特征与标签的关系,才能做出预测。

下面给出一个简单的,针对二进制分类问题的LogisticRegression(逻辑回归)模型代码示例。

虽然我们用的是LogisticRegression(逻辑回归)分类模型解决问题,但scikit-learn中的其它分类模型同样适用。

# 导入LogisticRegression方法

from sklearn.linear_model import LogisticRegression

# 导入数据生成器

from sklearn.datasets.samples_generator import make_blobs

# 生成2维数据,类别是2类

X, y = make_blobs(n_samples=100, centers=2, n_features=2, random_state=1)

# 训练模型

model = LogisticRegression()

model.fit(X, y)

注:make_blobs为聚类数据生成器

这里特别介绍两种分类预测的模型,类别预测和概率预测。

1、类别预测

类别预测:给定模型并训练数据实例后,通过scikit-learn的predict()函数预测新数据实例的类别。

比如,Xnew数组中有一个或多个数据实例,这个数组可以传递给predict()函数,用来预测每个实例的类别。

Xnew = [[...], [...]]

ynew = model.predict(Xnew)

输入代码:

# 类别预测案例

from sklearn.linear_model import LogisticRegression

from sklearn.datasets.samples_generator import make_blobs

# 生成数据集,有100个实列即100行,目标类别有2个:(0,1)

X, y = make_blobs(n_samples=100, centers=2, n_features=2, random_state=1)

# 拟合模型

model = LogisticRegression()

model.fit(X, y)

# 生成新的预测数据集,有3个实例。这里的新实例可以为1个或多个

Xnew, _ = make_blobs(n_samples=3, centers=2, n_features=2, random_state=1)

# 开始预测

ynew = model.predict(Xnew)

# 展示类别的预测结果

print('预测类别:')

for i in range(len(Xnew)):

print("X=%s, Predicted=%s" % (Xnew[i], ynew[i]))

# 展示数据集真实类别

print('真实类别:')

for i in range(len(Xnew)):

print("X=%s, Predicted=%s" % (Xnew[i], _[i]))

输出结果:预测类别:

X=[-0.79415228 2.10495117], Predicted=0

X=[-8.25290074 -4.71455545], Predicted=1

X=[-2.18773166 3.33352125], Predicted=0

真实类别:

X=[-0.79415228 2.10495117], Real=0

X=[-8.25290074 -4.71455545], Real=1

X=[-2.18773166 3.33352125], Real=0

可以看到,预测值和真实值一样,说明准确率100%。关于字符串类别标签的小提示

有时候,数据集的类别可能是字符串,比如(是,否)、(热,冷)等,但模型并不接受字符串输入输出,必须将字符串类别转化为整数的形式,比如(1,0)对应(是,否)。

scikit-learn提供LabelEncoder函数,用以将字符串转换为整数。

2、概率预测

另一种分类模型是预测数据实例属于每个类别的概率,如果有2个类别(0,1),则预测输出值为0的概率和1概率。

比如,Xnew数组中有一个或多个数据实例,这个数组可以传递给predict_proba()函数,用来预测每个实例的类别。

Xnew = [[...], [...]]

ynew = model.predict_proba(Xnew)

概率预测只适用于能够进行概率预测的模型,大多数(不是全部)模型可以做到。

下面的例子,通过训练好的模型对Xnew数组中的每个实例进行概率预测。

输入代码:

# 概率预测案例

from sklearn.linear_model import LogisticRegression

from sklearn.datasets.samples_generator import make_blobs

# 生成数据集,有100个实列即100行,目标类别有2个:(0,1)

X, y = make_blobs(n_samples=100, centers=2, n_features=2, random_state=1)

# 训练模型

model = LogisticRegression()

model.fit(X, y)

# 生成新的预测集,有3个实例即3行

Xnew, _ = make_blobs(n_samples=3, centers=2, n_features=2, random_state=1)

# 开始预测

ynew = model.predict_proba(Xnew)

# 展示预测的类别概率,分别生成为0的概率和为1的概率

print('预测的类别概率:')

for i in range(len(Xnew)):

print("X=%s, Predicted=%s" % (Xnew[i], ynew[i]))

print('真实类别:')

for i in range(len(Xnew)):

print("X=%s, Predicted=%s" % (Xnew[i], _[i]))

输出结果:预测的类别概率:

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]

真实类别:

X=[-0.79415228 2.10495117], Real=0

X=[-8.25290074 -4.71455545], Real=1

X=[-2.18773166 3.33352125], Real=0

概率预测的输出可以理解为:输出每个类别的概率,有多少个类别就有多少个概率值。

回归预测

回归预测和分类预测一样,都是一种监督学习。通过训练给定的示例即训练集,模型学习到输入特征和输出值之间的映射关系,如输出值为0.1,0.4,0.8......

下面代码用的最常见的LinearRegression线性回归预测模型,当然你也可以用其它所有回归模型来实践它。

输入代码:

# 线性回归预测案例

# 导入相关方法

from sklearn.linear_model import LinearRegression

from sklearn.datasets import make_regression

# 生成随机回归训练数据集,有100个实列即100行

X, y = make_regression(n_samples=100, n_features=2, noise=0.1, random_state=1)

# 拟合模型

model = LinearRegression()

model.fit(X, y)

# 生成新的预测集,有3个实例即3行

Xnew, _ = make_regression(n_samples=3, n_features=2, noise=0.1, random_state=1)

# 开始预测

ynew = model.predict(Xnew)

# 展示预测的值

print('预测值:')

for i in range(len(Xnew)):

print("X=%s, Predicted=%s" % (Xnew[i], ynew[i]))

# 展示真实的值

print('真实值:')

for i in range(len(Xnew)):

print("X=%s, Real=%s" % (Xnew[i], _[i]))

注:make_regression函数为随机回归数据集生成器

输出结果:预测值:

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

X=[-0.61175641 1.62434536], Predicted=120.64928064345101

X=[-2.3015387 0.86540763], Predicted=0.5518357031232064

真实值:

X=[-1.07296862 -0.52817175], Real=-95.68750948023445

X=[-0.61175641 1.62434536], Real=26.204828091429512

X=[-2.3015387 0.86540763], Real=-121.28229571474058

总结

本文分别用scikit-learn库中的分类模型和回归模型做了预测,并解释了这两种预测模型的区别,你也可以探索其它相关函数并实现文中的案例。

本文翻译自Jason Brownlee博士的博客,参阅原文

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值