入门系列之Scikit-learn在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 Tutorial
import 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中构建机器学习分类器。现在,您可以使用Scikit-learn在Python中加载数据、组织数据、训练、预测和评估机器学习分类器。本教程中的步骤可以帮助您简化在Python中使用自己的数据的过程,更多机器学习和人工智能的相关教程可以访问腾讯云社区。
参考文献:《How To Build a Machine Learning Classifier in Python with Scikit-learn》
问答
相关阅读
安全报告 | 2018上半年互联网恶意爬虫分析:从全景视角看爬虫与反爬虫
此文已由作者授权腾讯云+社区发布,原文链接:https://cloud.tencent.com/developer/article/1171081?fromSource=waitui
欢迎大家前往腾讯云+社区或关注云加社区微信公众号(QcloudCommunity),第一时间获取更多海量技术实践干货哦~
海量技术实践经验,尽在云加社区!
入门系列之Scikit-learn在Python中构建机器学习分类器的更多相关文章
- Scikit Learn: 在python中机器学习
转自:http://my.oschina.net/u/175377/blog/84420#OSC_h2_23 Scikit Learn: 在python中机器学习 Warning 警告:有些没能理解的 ...
- 爬虫入门系列(三):用 requests 构建知乎 API
爬虫入门系列目录: 爬虫入门系列(一):快速理解HTTP协议 爬虫入门系列(二):优雅的HTTP库requests 爬虫入门系列(三):用 requests 构建知乎 API 在爬虫系列文章 优雅的H ...
- python中Scikit-Learn机器学习模块
Scikit-Learn是基于python的机器学习模块,基于BSD开源许可证.这个项目最早由DavidCournapeau 在2007 年发起的,目前也是由社区自愿者进行维护. Scikit-Lea ...
- Golang 入门系列(六)理解Go中的协程(Goroutine)
前面讲的都是一些Go 语言的基础知识,感兴趣的朋友可以先看看之前的文章.https://www.cnblogs.com/zhangweizhong/category/1275863.html. 今天就 ...
- Golang 入门系列(五)GO语言中的面向对象
前面讲了很多Go 语言的基础知识,包括go环境的安装,go语言的语法等,感兴趣的朋友可以先看看之前的文章.https://www.cnblogs.com/zhangweizhong/category/ ...
- 3.6 scikit-learn:Python中的机器学习
sklearn实战-乳腺癌细胞数据挖掘(博主亲自录制视频教程) https://study.163.com/course/introduction.htm?courseId=1005269003&am ...
- Flask入门系列(转载)
一.入门系列: Flask入门系列(一)–Hello World 项目开发中,经常要写一些小系统来辅助,比如监控系统,配置系统等等.用传统的Java写,太笨重了,连PHP都嫌麻烦.一直在寻找一个轻量级 ...
- Android视频录制从不入门到入门系列教程(三)————视频方向
运行Android视频录制从不入门到入门系列教程(二)————显示视频图像中的Demo后,我们应该能发现视频的方向是错误的. 由于Android中,Camera给我们的视频图片的原始方向是下图这个样子 ...
- 理解 Python 中的可变参数 *args 和 **kwargs:
默认参数: Python是支持可变参数的,最简单的方法莫过于使用默认参数,例如: def getSum(x,y=5): print "x:", x print "y:& ...
随机推荐
- Django入门四之数据库相关
1. 数据库设置 在settings.py中配置数据库 我首先使用的是sqlite3,所以配置如下 2. 数据库的数据结构定义 #blog/models.py #定义了一个表(Student),表里两 ...
- 0513JS数组的定义、遍历、添加
|数组|-定义方式|--1.new Array();|----空数组|------var attr = new Array();|------lenght:0|------_proto_: Array ...
- django管理数据库之中文字符编码问题
django中通过models创建数据库字符编码文字mysql数据库中默认的字符编码都为latin1,插入中文时会出现以下的错误类型 1366 - Incorrect string value: '\ ...
- 进阶-Redis 知识梳理
redis介绍 1.什么是NoSQL NoSQL(统称),泛指非关系型的数据库,NoSQL即Not-Only SQL,它可以作为关系型数据库的良好补充. 2.NoSQL数据库的四大分类如下: 键值(K ...
- Version 1.6.0 of the JVM is not suitable for the this product.Version:1.8 or greater is required
这个问题时在打开eclipse时报的一个错误,报这个问题的意思我们都明白,说的就是当前版本的jdk版本太低,eclipse需要更高版本的jdk. 那就下一个更高版本的jdk就可以啦,这里我要说说我当时 ...
- codeforces 983A Finite or not?
题意: 判断一个分数在某一进制下是否为无限小数. 思路: 首先把这个分数约分,然后便是判断. 首先,一个分数是否为无限小数,与分子是无关的,只与分母有关. 然后,再来看看10进制的分数,可化为有限小数 ...
- Python中’__main__’模块的作用
Python不同于C/C++,程序执行并不需要主程序,如main(),而是文件自上而下的执行.但很多Python程序中都有 if __name__ == '__main__': statements ...
- SSM-MyBatis-10:Mybatis中SqlSession的getMapper()和简单的工具类MyBatisUtils
------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- getMapper的作用,获取到接口,直接通过点的方式调用方法,以免直接手打的方式写错方法名,(强类型的方式) ...
- Get,Post请求方式经典详解
本文转自:http://blog.csdn.net/findsafety/article/details/47129021 前几天工作中,所有表单我都采用post方法,头儿说那样不好,大型网站上一般都 ...
- 自动化运维工具sshd,expect,pssh,rsync详解
ssh secure shell,安全的远程登录:openssh和dropbear都是它的开源实现,ssh协议有v1和v2俩个版本,现在使用的都是v2版,v1已经不安全了:ssh基于DH算法做密钥交换 ...