简单几步,教你使用scikit-learn做分类和回归预测

简介: 简单几步,教你使用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]))

输出结果:

可以看到,预测值和真实值一样,说明准确率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]))

输出结果:

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

三、如何使用回归模型

回归预测和分类预测一样,都是一种监督学习。通过训练给定的示例即训练集,模型学习到输入特征和输出值之间的映射关系,如输出值为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函数为随机回归数据集生成器

输出结果:

四、总结

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

相关文章
|
1月前
|
机器学习/深度学习 算法 数据挖掘
2023 年第二届钉钉杯大学生大数据挑战赛初赛 初赛 A:智能手机用户监测数据分析 问题二分类与回归问题Python代码分析
本文介绍了2023年第二届钉钉杯大学生大数据挑战赛初赛A题的Python代码分析,涉及智能手机用户监测数据分析中的聚类分析和APP使用情况的分类与回归问题。
50 0
2023 年第二届钉钉杯大学生大数据挑战赛初赛 初赛 A:智能手机用户监测数据分析 问题二分类与回归问题Python代码分析
|
4天前
|
机器学习/深度学习 算法 数据挖掘
决策树算法大揭秘:Python让你秒懂分支逻辑,精准分类不再难
【9月更文挑战第12天】决策树算法作为机器学习领域的一颗明珠,凭借其直观易懂和强大的解释能力,在分类与回归任务中表现出色。相比传统统计方法,决策树通过简单的分支逻辑实现了数据的精准分类。本文将借助Python和scikit-learn库,以鸢尾花数据集为例,展示如何使用决策树进行分类,并探讨其优势与局限。通过构建一系列条件判断,决策树不仅模拟了人类决策过程,还确保了结果的可追溯性和可解释性。无论您是新手还是专家,都能轻松上手,享受机器学习的乐趣。
18 9
|
14天前
|
机器学习/深度学习 算法 数据挖掘
|
17天前
|
机器学习/深度学习 PHP 开发者
探索PHP中的面向对象编程构建你的首个机器学习模型:以Python和scikit-learn为例
【8月更文挑战第30天】在PHP的世界中,面向对象编程(OOP)是一块基石,它让代码更加模块化、易于管理和维护。本文将深入探讨PHP中面向对象的魔法,从类和对象的定义开始,到继承、多态性、封装等核心概念,再到实战中如何应用这些理念来构建更健壮的应用。我们将通过示例代码,一起见证PHP中OOP的魔力,并理解其背后的设计哲学。
|
1月前
|
机器学习/深度学习 人工智能 算法
如何使用Scikit-learn在Python中构建一个机器学习分类器
如何使用Scikit-learn在Python中构建一个机器学习分类器
17 3
|
1月前
|
数据采集 机器学习/深度学习 算法
【python】python客户信息审计风险决策树算法分类预测(源码+数据集+论文)【独一无二】
【python】python客户信息审计风险决策树算法分类预测(源码+数据集+论文)【独一无二】
|
19天前
|
机器学习/深度学习 运维 数据挖掘
scikit-learn 1.0 版本重要新特性一览
scikit-learn 1.0 版本重要新特性一览
|
1月前
|
机器学习/深度学习 算法 数据挖掘
决策树算法大揭秘:Python让你秒懂分支逻辑,精准分类不再难
【8月更文挑战第2天】决策树算法以其直观性和解释性在机器学习领域中独具魅力,尤其擅长处理非线性关系。相较于复杂模型,决策树通过简单的分支逻辑实现数据分类,易于理解和应用。本示例通过Python的scikit-learn库演示了使用决策树对鸢尾花数据集进行分类的过程,并计算了预测准确性。虽然决策树优势明显,但也存在过拟合等问题。即便如此,无论是初学者还是专家都能借助决策树的力量提升数据分析能力。
25 4
|
1月前
|
机器学习/深度学习 算法 数据挖掘
机器学习新手也能飞:Python+Scikit-learn让你轻松入门!
在数据驱动的时代,机器学习是推动科技进步和智能化生活的关键。Python以简洁的语法和强大的库支持,成为机器学习的理想语言。Scikit-learn作为Python的开源机器学习库,提供简单易用的API和丰富的算法,降低了学习门槛。通过Python结合Scikit-learn,即使是初学者也能快速上手,如使用鸢尾花数据集进行分类任务,体验从数据预处理到模型训练和评估的全过程,进而探索更多机器学习的可能性。
37 0
|
1月前
|
Python
【Leetcode刷题Python】75. 颜色分类
在不使用sort函数的情况下对包含红色、白色和蓝色元素的数组进行排序的方法:插入排序法和单指针交换法,并提供了相应的Python实现代码。
9 0