如何使用Scikit-learn在Python中构建一个机器学习分类器

简介: 如何使用Scikit-learn在Python中构建一个机器学习分类器

本文介绍了如何使用Python和Scikit-learn库,通过乳腺癌肿瘤数据集实现一个简单的朴素贝叶斯分类器,包括数据加载、特征处理、模型训练与评估,以预测肿瘤类型。最后展示了94.15%的分类准确性。

简介

机器学习是计算机科学、人工智能和统计学的研究领域。机器学习的重点是训练算法以从数据中学习模式并进行预测。机器学习尤其有价值,因为它让我们能够使用计算机自动化决策过程。

你会发现机器学习应用无处不在。Netflix 和 Amazon 使用机器学习来进行新产品推荐。银行使用机器学习来检测信用卡交易中的欺诈活动,而医疗保健公司开始使用机器学习来监测、评估和诊断患者。

在本教程中,您将使用 Python 中的 Scikit-learn 实现一个简单的机器学习算法。使用乳腺癌肿瘤信息数据库,您将使用朴素贝叶斯(NB)分类器来预测肿瘤是良性还是恶性。

通过本教程,您将学会如何在 Python 中构建自己的机器学习模型。

先决条件

要完成本教程,您需要:

  • Python 3 和在计算机上设置好的本地编程环境。您可以按照适用于您操作系统的相应安装和设置指南来配置此环境。
  • 如果您是 Python 新手,您可以探索《如何在 Python 3 中编码》以熟悉这种语言。
  • 在本教程的虚拟环境中安装 Jupyter Notebook。在运行机器学习实验时,Jupyter Notebook 非常有用。您可以运行简短的代码块并快速查看结果,这样可以轻松测试和调试您的代码。

步骤 1 — 导入 Scikit-learn

让我们从安装 Python 模块 Scikit-learn 开始,它是 Python 中最好和最有文档记录的机器学习库之一。

要开始我们的编码项目,请激活我们的 Python 3 编程环境。确保您位于环境所在的目录,并运行以下命令:

. my_env/bin/activate

激活我们的编程环境后,检查是否已安装 Sckikit-learn 模块:

python -c "import sklearn"

如果 sklearn 已安装,此命令将顺利完成,没有错误。如果未安装,您将看到以下错误消息:

Traceback (most recent call last): File "<string>", line 1, in <module> ImportError: No module named 'sklearn'

错误消息表明 sklearn 未安装,因此使用 pip 下载该库:

pip install scikit-learn[alldeps]

安装完成后,启动 Jupyter Notebook:

jupyter notebook

在 Jupyter 中,创建一个名为 ML Tutorial 的新 Python Notebook。在 Notebook 的第一个单元格中,导入 sklearn 模块:

import sklearn

您的笔记本应如下图所示:

!Jupyter Notebook with one Python cell, which imports sklearn

现在我们在笔记本中导入了 sklearn,我们可以开始处理我们机器学习模型的数据集。

步骤 2 — 导入 Scikit-learn 的数据集

在本教程中,我们将使用的数据集是乳腺癌威斯康星州诊断数据库。该数据集包括关于乳腺癌肿瘤的各种信息,以及恶性良性的分类标签。数据集有 569 个实例或数据,涉及 569 个肿瘤,并包括 30 个属性或特征,如肿瘤的半径、质地、光滑度和面积。

使用此数据集,我们将构建一个机器学习模型,使用肿瘤信息来预测肿瘤是恶性还是良性。

Scikit-learn 预装了各种数据集,我们可以将其加载到 Python 中,我们需要的数据集已包含在其中。导入并加载数据集:

...
from sklearn.datasets import load_breast_cancer
# 加载数据集
data = load_breast_cancer()

data 变量表示一个像字典一样工作的 Python 对象。要考虑的重要字典键是分类标签名称(target_names)、实际标签(target)、属性/特征名称(feature_names)和属性(data)。

属性是任何分类器的关键部分。属性捕捉有关数据性质的重要特征。鉴于我们要预测的标签(恶性与良性肿瘤),可能有用的属性包括肿瘤的大小、半径和质地。

为每组重要信息创建新变量并分配数据:

...
# 整理我们的数据
label_names = data['target_names']
labels = data['target']
feature_names = data['feature_names']
features = data['data']

现在我们有了每组信息的列表。为了更好地了解我们的数据集,让我们通过打印我们的类标签、第一个数据实例的标签、我们的特征名称以及第一个数据实例的特征值来查看我们的数据:

...
# 查看我们的数据
print(label_names)
print(labels[0])
print(feature_names[0])
print(features[0])

如果你运行了上面的代码,你会看到以下结果:

!Alt Jupyter Notebook with three Python cells, which prints the first instance in our dataset

正如图像所示,我们的类别名称是恶性良性,它们分别被映射为二进制值01,其中0代表恶性肿瘤,1代表良性肿瘤。因此,我们的第一个数据实例是一个平均半径1.79900000e+01的恶性肿瘤。

现在我们已经加载了数据,我们可以开始构建我们的机器学习分类器。

步骤 3 — 将数据组织成数据集

为了评估分类器的性能,你应该始终在未见过的数据上测试模型。因此,在构建模型之前,将数据分成两部分:训练集测试集

你可以使用训练集来在开发阶段训练和评估模型。然后使用训练好的模型对未见的测试集进行预测。这种方法可以让你了解模型的性能和鲁棒性。

幸运的是,sklearn有一个名为train_test_split()的函数,它可以将你的数据分成这些集合。导入该函数,然后使用它来分割数据:

...
from sklearn.model_selection import train_test_split
# 分割我们的数据
train, test, train_labels, test_labels = train_test_split(features,
                                                          labels,
                                                          test_size=0.33,
                                                          random_state=42)

该函数使用test_size参数随机分割数据。在这个例子中,我们现在有一个代表原始数据集33%的测试集(test)。剩下的数据(train)则组成训练数据。我们还有相应的标签,即train_labelstest_labels

现在我们可以开始训练我们的第一个模型了。

步骤 4 — 构建和评估模型

机器学习有许多模型,每个模型都有其优势和劣势。在本教程中,我们将专注于一个在二元分类任务中通常表现良好的简单算法,即朴素贝叶斯(NB)。

首先,导入GaussianNB模块。然后使用GaussianNB()函数初始化模型,然后使用gnb.fit()将模型拟合到数据上进行训练:

...
from sklearn.naive_bayes import GaussianNB
# 初始化我们的分类器
gnb = GaussianNB()
# 训练我们的分类器
model = gnb.fit(train, train_labels)

在训练模型之后,我们可以使用训练好的模型对我们的测试集进行预测,使用predict()函数进行预测。predict()函数返回测试集中每个数据实例的预测数组。然后我们可以打印我们的预测结果以了解模型的判断。

使用predict()函数和test集合打印结果:

...
# 进行预测
preds = gnb.predict(test)
print(preds)

运行代码,你会看到以下结果:

!Jupyter Notebook with Python cell that prints the predicted values of the Naive Bayes classifier on our test data

如你在Jupyter Notebook输出中所见,predict()函数返回了一个代表肿瘤类别(恶性 vs. 良性)的预测值数组01

现在我们有了预测结果,让我们评估我们的分类器的性能。

步骤 5 — 评估模型的准确性

使用真实类标签的数组,我们可以通过比较两个数组(test_labels vs. preds)来评估模型预测值的准确性。我们将使用sklearnaccuracy_score()函数来确定我们的机器学习分类器的准确性。

...
from sklearn.metrics import accuracy_score
# 评估准确性
print(accuracy_score(test_labels, preds))

你会看到以下结果:

!Alt Jupyter Notebook with Python cell that prints the accuracy of our NB classifier

如你在输出中所见,朴素贝叶斯分类器的准确率为94.15%。这意味着分类器能够正确预测肿瘤是恶性还是良性的时间占了94.15%。这些结果表明我们的30个属性特征集是肿瘤类别的良好指标。

你已经成功构建了你的第一个机器学习分类器。让我们通过将所有的import语句放在笔记本或脚本的顶部来重新组织代码。代码的最终版本应该如下所示:

from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import GaussianNB
from sklearn.metrics import accuracy_score
# 加载数据集
data = load_breast_cancer()
# 整理数据
label_names = data['target_names']
labels = data['target']
feature_names = data['feature_names']
features = data['data']
# 查看数据
print(label_names)
print('类别标签 = ', labels[0])
print(feature_names)
print(features[0])
# 分割数据
train, test, train_labels, test_labels = train_test_split(features,
                                                          labels,
                                                          test_size=0.33,
                                                          random_state=42)
# 初始化分类器
gnb = GaussianNB()
# 训练分类器
model = gnb.fit(train, train_labels)
# 进行预测
preds = gnb.predict(test)
print(preds)
# 评估准确性
print(accuracy_score(test_labels, preds))

现在你可以继续优化你的代码,看看能否让你的分类器表现得更好。你可以尝试使用不同的特征子集,甚至尝试完全不同的算法。查看 Scikit-learn 网站获取更多的机器学习想法。

结论

在本教程中,你学会了如何在 Python 中构建一个机器学习分类器。现在你可以使用 Scikit-learn 在 Python 中加载数据、整理数据、训练、预测和评估机器学习分类器。本教程中的步骤应该能帮助你在 Python 中更轻松地处理自己的数据。


目录
相关文章
|
14天前
|
机器学习/深度学习 算法 Python
机器学习特征筛选:向后淘汰法原理与Python实现
向后淘汰法(Backward Elimination)是机器学习中一种重要的特征选择技术,通过系统性地移除对模型贡献较小的特征,以提高模型性能和可解释性。该方法从完整特征集出发,逐步剔除不重要的特征,最终保留最具影响力的变量子集。其优势包括提升模型简洁性和性能,减少过拟合,降低计算复杂度。然而,该方法在高维特征空间中计算成本较高,且可能陷入局部最优解。适用于线性回归、逻辑回归等统计学习模型。
60 7
|
13天前
|
机器学习/深度学习 数据可视化 TensorFlow
Python 高级编程与实战:深入理解数据科学与机器学习
本文深入探讨了Python在数据科学与机器学习中的应用,介绍了pandas、numpy、matplotlib等数据科学工具,以及scikit-learn、tensorflow、keras等机器学习库。通过实战项目,如数据可视化和鸢尾花数据集分类,帮助读者掌握这些技术。最后提供了进一步学习资源,助力提升Python编程技能。
|
11天前
|
机器学习/深度学习 设计模式 API
Python 高级编程与实战:构建 RESTful API
本文深入探讨了使用 Python 构建 RESTful API 的方法,涵盖 Flask、Django REST Framework 和 FastAPI 三个主流框架。通过实战项目示例,详细讲解了如何处理 GET、POST 请求,并返回相应数据。学习这些技术将帮助你掌握构建高效、可靠的 Web API。
|
11天前
|
机器学习/深度学习 设计模式 测试技术
Python 高级编程与实战:构建自动化测试框架
本文深入探讨了Python中的自动化测试框架,包括unittest、pytest和nose2,并通过实战项目帮助读者掌握这些技术。文中详细介绍了各框架的基本用法和示例代码,助力开发者快速验证代码正确性,减少手动测试工作量。学习资源推荐包括Python官方文档及Real Python等网站。
|
14天前
|
机器学习/深度学习 数据可视化 算法
Python 高级编程与实战:深入理解数据科学与机器学习
在前几篇文章中,我们探讨了 Python 的基础语法、面向对象编程、函数式编程、元编程、性能优化和调试技巧。本文将深入探讨 Python 在数据科学和机器学习中的应用,并通过实战项目帮助你掌握这些技术。
|
12天前
|
机器学习/深度学习 设计模式 API
Python 高级编程与实战:构建微服务架构
本文深入探讨了 Python 中的微服务架构,介绍了 Flask、FastAPI 和 Nameko 三个常用框架,并通过实战项目帮助读者掌握这些技术。每个框架都提供了构建微服务的示例代码,包括简单的 API 接口实现。通过学习本文,读者将能够使用 Python 构建高效、独立的微服务。
|
12天前
|
消息中间件 分布式计算 并行计算
Python 高级编程与实战:构建分布式系统
本文深入探讨了 Python 中的分布式系统,介绍了 ZeroMQ、Celery 和 Dask 等工具的使用方法,并通过实战项目帮助读者掌握这些技术。ZeroMQ 是高性能异步消息库,支持多种通信模式;Celery 是分布式任务队列,支持异步任务执行;Dask 是并行计算库,适用于大规模数据处理。文章结合具体代码示例,帮助读者理解如何使用这些工具构建分布式系统。
|
18天前
|
机器学习/深度学习 数据采集 人工智能
容器化机器学习流水线:构建可复用的AI工作流
本文介绍了如何构建容器化的机器学习流水线,以提高AI模型开发和部署的效率与可重复性。首先,我们探讨了机器学习流水线的概念及其优势,包括自动化任务、确保一致性、简化协作和实现CI/CD。接着,详细说明了使用Kubeflow Pipelines在Kubernetes上构建流水线的步骤,涵盖安装、定义流水线、构建组件镜像及上传运行。容器化流水线不仅提升了环境一致性和可移植性,还通过资源隔离和扩展性支持更大规模的数据处理。
|
4月前
|
机器学习/深度学习 算法 数据挖掘
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构。本文介绍了K-means算法的基本原理,包括初始化、数据点分配与簇中心更新等步骤,以及如何在Python中实现该算法,最后讨论了其优缺点及应用场景。
235 6
|
20天前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于机器学习的人脸识别算法matlab仿真,对比GRNN,PNN,DNN以及BP四种网络
本项目展示了人脸识别算法的运行效果(无水印),基于MATLAB2022A开发。核心程序包含详细中文注释及操作视频。理论部分介绍了广义回归神经网络(GRNN)、概率神经网络(PNN)、深度神经网络(DNN)和反向传播(BP)神经网络在人脸识别中的应用,涵盖各算法的结构特点与性能比较。

热门文章

最新文章