入门系列之Scikit-learn在Python语言中构建机器学习分类器
小标 2018-12-20 来源 : 阅读 888 评论 0

摘要:本文主要向大家介绍了入门系列之Scikit-learn在Python语言中构建机器学习分类器,通过具体的内容向大家展示,希望对大家学习Python语言有所帮助。

本文主要向大家介绍了入门系列之Scikit-learn在Python语言中构建机器学习分类器,通过具体的内容向大家展示,希望对大家学习Python语言有所帮助。

介绍

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

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

在本教程结束时,您将了解如何使用Python构建自己的机器学习模型。关于Python的语法详见腾讯云开发者手册Python中文开发文档。

准备

要完成本教程,您需要:

Python 3 本地编程环境

在virtualenv中安装Jupyter Notebook。Jupyter Notebooks在运行机器学习实验时非常有用。您可以运行短代码块并快速查看结果,从而轻松测试和调试代码。

第一步 - 导入Scikit-learn

让我们首先安装Python模块Scikit-learn,这是Python 最好、文档记录最多的机器学习库之一。

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

$ . my_env/bin/activate

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

(my_env) $ python -c "import sklearn"

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

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

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

(my_env) $ pip install scikit-learn[alldeps]

安装完成后,启动Jupyter Notebook:

(my_env) $ jupyter notebook

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

ML Tutorialimport sklearn

您的 Notebook应如下图所示:

Notebook

现在我们已经在 Notebook中导入了sklearn,我们可以开始使用机器学习模型的数据集。

第二步 - 导入Scikit-learn的数据集

我们将在本教程中使用的数据集是乳腺癌威斯康星诊断数据库。该数据集包括关于乳腺癌肿瘤的各种信息,以及恶性或良性的分类标签。该数据集在569个肿瘤上具有569个

实例

或数据,并且包括关于30个

属性

或特征的信息,例如肿瘤的半径,纹理,平滑度和面积。


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

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

ML Tutorial... from sklearn.datasets import load_breast_cancer # Load dataset data = load_breast_cancer()

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

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

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

ML Tutorial... # Organize our data label_names = data['target_names'] labels = data['target'] feature_names = data['feature_names'] features = data['data']

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

ML Tutorial... # Look at our data print(label_names) print(labels[0]) print(feature_names[0]) print(features[0])

如果运行代码,您将看到以下结果:

输出结果

如图所示,我们的类名是恶性和良性,然后将其映射到二进制值0和1,其中0代表恶性肿瘤1代表良性肿瘤。因此,我们的第一个数据实例是恶性肿瘤,其

平均半径

为1.79900000e+01。


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

第三步 - 将数据组织到集合中

要评估分类器的性能,您应该始终在看不见的数据上测试模型。因此,在构建模型之前,将数据拆分为两部分:

训练集

测试集


您可以使用训练集在开发阶段训练和评估模型。然后,您使用训练的模型对看不见的测试集进行预测。这种方法让您了解模型的性能和稳健性。

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

ML Tutorial... from sklearn.model_selection import train_test_split # Split our data train, test, train_labels, test_labels = train_test_split(features,                                                           labels,                                                           test_size=0.33,                                                           random_state=42)

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

我们现在可以继续培训我们的第一个模型。

第四步 - 构建和评估模型

机器学习有很多模型,每种模型都有自己的优点和缺点。在本教程中,我们将重点介绍一种通常在二进制分类任务中表现良好的简单算法,即Naive Bayes (NB)。

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

ML Tutorial... from sklearn.naive_bayes import GaussianNB # Initialize our classifier gnb = GaussianNB() # Train our classifier model = gnb.fit(train, train_labels)

在我们训练模型之后,我们可以使用训练的模型对我们的测试集进行预测,这里,我们使用predict()函数。该predict()函数返回测试集中每个数据实例的预测数组。然后我们可以输出我们的预测,以了解模型确定的内容。

使用带有test的predict()函数输出结果:

ML Tutorial... # Make predictions preds = gnb.predict(test) print(preds)

运行代码,您将看到以下结果:

预测输出结果

正如您在Jupyter Notebook输出中看到的,该predict()函数返回了一个0s和1s 数组,它们代表了我们对肿瘤类的预测值(恶性与良性)。

现在我们有了预测,让我们评估分类器的表现。

第五步 - 评估模型的准确性

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

ML Tutorial... from sklearn.metrics import accuracy_score # Evaluate accuracy print(accuracy_score(test_labels, preds))

您将看到以下结果:

准确性结果

正如您在输出中看到的那样,NB分类器准确率为94.15%。这意味着分类器有94.15%的时间能够正确预测肿瘤是恶性还是良性。这些结果表明我们的30个属性的特征集是肿瘤类别的良好指标。

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

ML教程

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 # Load dataset data = load_breast_cancer() # Organize our data label_names = data['target_names'] labels = data['target'] feature_names = data['feature_names'] features = data['data'] # Look at our data print(label_names) print('Class label = ', labels[0]) print(feature_names) print(features[0]) # Split our data train, test, train_labels, test_labels = train_test_split(features,                                                           labels,                                                           test_size=0.33,                                                           random_state=42) # Initialize our classifier gnb = GaussianNB() # Train our classifier model = gnb.fit(train, train_labels) # Make predictions preds = gnb.predict(test) print(preds) # Evaluate accuracy print(accuracy_score(test_labels, preds))

现在,您可以继续使用代码来查看是否可以使分类器的性能更佳。您可以尝试不同的功能子集,甚至尝试完全不同的算法。

本文由职坐标整理并发布,希望对同学们学习Python有所帮助,更多内容请关注职坐标编程语言Python频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程