带你读《Python机器学习》之二:Python与数据科学

简介: 本书讲解了如何使用Python的核心元素以及强大的机器学习库,同时还展示了如何正确使用一系列统计模型。本书可作为学习数据科学的初学者及想进一步拓展数据科学领域认识的读者的参考书。同样,本书也适合计算机等相关专业的本科生、研究生阅读。全书共13章,除了简要介绍机器学习及Python在机器学习中的应用,还系统讲述了数据分类、数据预处理、模型优化、集成学习、回归、聚类、神经网络、深度学习等内容。本书将机器学习背后的基本理论与应用实践联系起来,通过这种方式让读者聚焦于如何正确地提出问题、解决问题。

点击查看第一章
点击查看第三章

第2章

Python与数据科学

2.1 Python概述

2017年12月5日,第四届世界互联网大会在浙江省乌镇圆满闭幕。大会吸引了各界的目光,而人工智能几乎成为整个大会的焦点,各行各业的“大佬”都在谈论着AI的未来。不难发现,人工智能将是未来发展的趋势,作为人工智能的首选语言,Python也随之火了起来。根据 IEEE Spectrum 发布的研究报告,在2016 年排名第三的 Python,在2017年已经成为世界上最受欢迎的语言,C 和 Java 分别位居第二和第三位,而在2018年Python依旧保持其强劲的热度位居榜首。IEEE Spectrum依据记者 Nick Diakopoulos 提供的数据,结合 10 个线上数据源的 12 个标准,对 48 种语言进行了排行,如图2-1所示。

image.png

Python是一款面向对象、直译式的计算机编程语言。它包含一整套功能完善的标准库,能够轻松完成很多常见的编程任务。
Python由Guide Van Rossum于1989年圣诞节期间设计,他力图使Python简单直观、开源、容易理解且适合快速开发,这一设计理念可以概括为“优雅”“明确”“简单”。而Python正是在这种设计思想下逐渐成为一款流行的编程语言。
Python为网站搭建、科学计算、图形用户界面(GUI)等各个方面的开发都提供了完善的开发框架。国内网站中,豆瓣网、知乎、果壳网等都使用了Python的Web框架,Google也有很多Python的重要应用。此外,在科学计算方面,Python的NumPy、SciPy、Pandas、Matplotlib、Scikit-learn等框架也非常成熟,这也使得Python成为一款非常适用于数据科学的工具。

2.2 Python与数据科学的关系

数据科学是一个跨学科的课题,综合了三个领域的能力:统计学家的能力——能够建立模型的聚合数据(数据量正在不断增加);计算机科学家的能力——能够设计并使用算法对数据进行高效存储、分析和可视化;领域专家的能力——在细分领域经过专业训练,既可以提出问题,又可以做出专业的解答。
而Python之所以能在数据科学领域广泛应用,主要是因为它的第三方程序包拥有庞大而活跃的生态系统:NumPy可以处理同类型(homogeneous)数组型数据,Pandas可以处理多种类型(heterogenous)带标签的数据,SciPy可以解决常见的科学计算问题,Matplotlib可以绘制用于印刷的可视化图形,IPython可以实现交互式编程和快速分享代码,Scikit-learn可以进行机器学习。

2.3 Python中常用的第三方库

本节详细介绍在数据科学这门学科中,我们经常需要使用的第三方库。

2.3.1 NumPy

NumPy(Numerical Python的简称)是Python科学计算的基础包。本书大部分内容都基于NumPy以及在其基础上所构建的库。它提供了以下功能(不限于此):

  • 快速高效的多维数组对象ndarray。
  • 用于对数组执行元素级计算以及直接对数组执行数学运算的函数。
  • 用于读写硬盘上基于数组的数据集的工具。
  • 线性代数运算、傅里叶变换,以及随机数生成。
  • 用于将C、C++、Fortran代码集成到Python的工具。

除了为Python提供快速的数组处理能力之外,NumPy在数据科学方面还有另一个主要作用,即作为算法之间传递数据的容器。对于数值型数据,NumPy数组在存储和处理数据时要比内置的Python数据结构高效得多。此外,由低级语言(比如C和Fortran)编写的库可以直接操作NumPy数组中的数据,无须进行任何数据复制工作。

2.3.2 SciPy

SciPy包含致力于科学计算中常见问题的各个工具箱。它的不同子模块对应于不同的应用,如插值、积分、优化、图像处理、统计、特殊函数等。
SciPy可以与其他标准科学计算程序库进行比较,比如GSL(GNU C或C++科学计算库)或者Matlab工具箱。SciPy是Python中科学计算程序的核心包,用于有效地计算NumPy矩阵,以便让NumPy和SciPy协同工作。表2-1列出了SciPy中经常用到的部分子功能。

2.3.3 Pandas

Pandas这个名字源于panel data(面板数据,这是计量经济学中关于多维结构化数据集的一个术语),也是Python data analysis(Python数据分析)的简写。
Pandas处理以下三种数据结构:

  • 系列(Series)。
  • 数据帧(DataFrame)。
  • 面板(Panel)。

这些数据结构都构建在NumPy数组之上。其中,Series为一维数组,与NumPy中的一维array类似,二者与Python基本的数据结构List也很相近。Series如今能保存不同的数据类型,包括字符串、布尔值、数字等;DataFrame是二维的表格型数据结构,其很多功能与R语言中的data.frame类似,可以将DataFrame理解为Series的容器;Panel是三维的数组,可以理解为DataFrame的容器。
Pandas提供了使我们能够快速、便捷地处理结构化数据的大量数据结构和函数,是数据科学中重要的Python库。你很快就会发现,它是使Python成为强大而高效的数据分析环境的重要因素之一。它用来操作数据和分析数据,很适合不同类型的数据,如表格、有序时间序列、无序时间序列、矩阵等。
此外,Pandas兼具NumPy高性能的数组计算功能以及电子表格和关系型数据库(如SQL)灵活的数据处理功能。它提供了复杂而精细的索引功能,以便更为便捷地完成重塑、切片和切块、聚合以及选取数据子集等操作。

2.3.4 Matplotlib

Matplotlib是一个Python 2D绘图库,它可以在各种平台上以各种硬拷贝格式和交互式环境生成具有出版品质的图形。Matplotlib可用于Python脚本、Python和IPython shell、Jupyter Note、Web应用程序服务器和4个图形用户界面工具包。
Matplotlib试图让简单的事情变得更简单,让无法实现的事情变得可能实现。只需几行代码即可生成绘图、直方图、功率谱、条形图、错误图、散点图等。
Matplotlib子模块Pyplot提供了类似于MATLAB的界面,经常与IPython结合使用。对于高级用户,可以通过面向对象的界面或MATLAB用户熟悉的一组函数完全控制线条样式、字体属性、轴属性等。

2.3.5 Scikit-learn

基于SciPy,目前开发者针对不同的应用领域已经发展出为数众多的分支版本,它们被统一称为Scikits,即SciPy工具包的意思。而在这些分支版本中,最有名也是专门面向机器学习的一个就是Scikit-learn。
Scikit-learn项目最早由数据科学家 David Cournapeau 在 2007 年发起,需要NumPy和SciPy等其他包的支持,它是Python语言中专门针对机器学习应用而发展起来的一款开源框架。
和其他众多的开源项目一样,Scikit-learn目前主要由社区成员自发进行维护。可能是由于维护成本的限制,Scikit-learn相比其他项目要显得更为保守。这主要体现在两个方面:一是Scikit-learn从来不做除机器学习领域之外的其他扩展,二是Scikit-learn从来不采用未经广泛验证的算法。
Scikit-learn的基本功能主要被分为六大部分:分类、回归、聚类、数据降维、模型选择和数据预处理。

2.4 编译环境

Python的集成开发环境(IDE)软件,除了标准二进制发布包所附的IDLE之外,还有许多其他的选择。这些IDE能够提供语法着色、语法检查、运行调试、自动补全、智能感知等便利功能。为Python专门设计的IDE有Anaconda、Pycharm、PyScripter、Eric等,这些IDE各具特点。

2.4.1 Anaconda

1.简介
在众多IDE中,Anaconda Python是一款适合数据分析者的集成开发环境,它包含常用科学计算、数据分析、自然语言处理、绘图等包,所有的模块几乎都是最新的,容量适中。Anaconda使用了conda和pip包管理工具,安装第三方包非常方便,避免了管理各个库之间依赖性的麻烦。Anaconda继承了Python、IPython、Spyder和众多的框架与环境,且支持Python 2和Python 3,包括免费版、协作版、企业版等。
Anaconda集成的Jupyter Notebook由于支持Latex等功能,被国外数据科学工作者和大学讲师广泛使用,成为Python数据科学领域的标准IDE工具。
2.安装
Anaconda官方网址为:https://www.anaconda.com/download/
(1)进入官网下载Anaconda,该网站可以检测出当前电脑的操作系统,这里以Windows系统为例,故网站提供Windows系统版本安装包。Anaconda官网提供了3.7和2.7两个版本,读者可以根据需要自行选择下载。这里以3.7版本为例。其下载界面如图2-2所示。

image.png

(2)下载完成后,双击exe文件进行安装。其安装界面如图2-3所示。

image.png

(3)选择安装路径,如图2-4所示。

image.png

(4)单击Install按钮,等待进度条读取完毕即可完成安装。注意:安装时有两个高级选项,第一个是把Anaconda加入PATH(系统环境变量),第二个是将Anaconda作为默认的Python 3.6,如图2-5所示。
(5)打开Anaconda Navigator(导航),在Environments(管理版本和包)可以看到NumPy、SciPy、Scikit-learn、Matplotlib等常用数据科学库都已安装完毕,如图2-6所示。

image.png

image.png

2.4.2 Jupyter Notebook

Anaconda的安装为后续机器学习算法的编写提供了必要的环境。Anaconda安装完成后,我们使用集成在其上的Jupyter Notebook作为后续实现机器学习算法的IDE。
1.简介
Jupyter Notebook(此前被称为IPython Notebook)是一个交互式笔记本,支持运行 40 多种编程语言,它是 Donald Knuth在1984年提出的文字表达化编程的一种形式。在文字表达化编程中,可以直接在代码旁写出叙述性文档,而不是另外编写单独的文档。用 Donald Knuth 的话来说:“让我们集中精力向人们解释我们希望计算机做什么,而不是指示计算机做什么。”
归根到底,代码是写给人而不是计算机看的。Notebook 提供了这种能力,编程人员能够直接在代码旁写出叙述性文档。这不仅对阅读Notebook 的人很有用,而且对编程人员将来回头分析代码也有很大用处。
Jupyter Notebook 的本质是一个Web应用程序,便于创建和共享文学化程序文档,支持实时代码、数学方程、可视化和Markdown,其用途包括数据清理和转换、数值模拟、统计建模、机器学习等。
2.编程示例
下面我们以一个小程序为例,为读者演示Jupyter Notebook的简单使用。该程序实现了矩阵之间的乘法。
(1)打开Jupyter,单击New,在下拉菜单中选择Python 3,新建Python文件,如图2-7所示。


image.png

(2)在新打开的Python文件界面中,单击上方的Untitled,可实现对新建文件的重命名功能,这里将其重命名为test,如图2-8所示。

image.png

(3)输入代码,按Shift+Enter组合键运行代码。以下代码实现了一个2×3矩阵与一个3×2矩阵相乘的功能:

import numpy as np
#创建一个2行3列的矩阵
two_dim_matrix_one = np.array([[1, 2, 3], [4, 5, 6]])
# 创建一个3行2列的矩阵
two_dim_matrix_two = np.array([[1, 2], [3, 4], [5, 6]])
# 使用NumPy包中的方法进行相乘
two_multi_res = np.dot(two_dim_matrix_one, two_dim_matrix_two)
print('two_multi_res: %s' %(two_multi_res))

其运行结果如图2-9所示。

image.png

2.5 本章小结

Python适用于机器学习的最直接原因是有NumPy和SciPy库支持Scikit-learn这样的项目,因为它目前几乎是所有机器学习任务的标准工具。除此之外,Python也是非常容易理解的,这有助于保持最新的机器学习和AI的现状,例如,用Python实现最新算法时会节省很多时间。尝试人工智能和机器学习的新思路往往需要实现相对复杂的算法,语言越简单,调试就越容易。机器学习是一个集成度很高的学科,因为任何机器学习系统都需要从现实世界中提取大量数据作为训练数据或系统输入数据,因此Python的框架库生态系统意味着它通常可以很好地访问和转换数据。
总而言之,Python是一种伟大的语言,它可以让研究人员和从业者专注于机器学习。

2.6 本章习题

1. 选择题
(1)K最近邻方法在什么情况下分类效果较好?(  )
A.样本较多但典型性不好
B.样本较少但典型性好
C.样本呈团状分布
D.样本呈链状分布

(2)下列哪一项不属于Python的集成开发环境?(  )
A. Pycharm
B. Anaconda
C. Eric
D. Eclipse

(3)下列哪一项是Python科学计算的基础包?(  )
A. NumPy
B. Pandas
C. Matplotlib
D. SciPy

2. 填空题
(1)Python科学计算的基础包是   

(2)Python中常用的第三方库有            

(3)Python是一款      的计算机编程语言。

(4)   是一个Python 2D绘图库,它可以在各种平台上使用。

3. 判断题
给定n个数据点,如果其中一半用于训练,一半用于测试,则测试误差和训练误差之间的差别会随着n的增加而减少。(  )

相关文章
|
22天前
|
数据采集 数据可视化 数据处理
Python数据科学:Pandas库入门与实践
Python数据科学:Pandas库入门与实践
|
27天前
|
机器学习/深度学习 数据采集 数据可视化
Python在数据科学中的应用:从入门到实践
本文旨在为读者提供一个Python在数据科学领域应用的全面概览。我们将从Python的基础语法开始,逐步深入到数据处理、分析和可视化的高级技术。文章不仅涵盖了Python中常用的数据科学库,如NumPy、Pandas和Matplotlib,还探讨了机器学习库Scikit-learn的使用。通过实际案例分析,本文将展示如何利用Python进行数据清洗、特征工程、模型训练和结果评估。此外,我们还将探讨Python在大数据处理中的应用,以及如何通过集成学习和深度学习技术来提升数据分析的准确性和效率。
|
23天前
|
机器学习/深度学习 数据采集 数据可视化
Python数据科学实战:从Pandas到机器学习
Python数据科学实战:从Pandas到机器学习
|
25天前
|
机器学习/深度学习 人工智能 算法
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
手写数字识别系统,使用Python作为主要开发语言,基于深度学习TensorFlow框架,搭建卷积神经网络算法。并通过对数据集进行训练,最后得到一个识别精度较高的模型。并基于Flask框架,开发网页端操作平台,实现用户上传一张图片识别其名称。
69 0
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
|
20天前
|
机器学习/深度学习 数据可视化 数据处理
掌握Python数据科学基础——从数据处理到机器学习
掌握Python数据科学基础——从数据处理到机器学习
33 0
|
20天前
|
机器学习/深度学习 数据采集 人工智能
机器学习入门:Python与scikit-learn实战
机器学习入门:Python与scikit-learn实战
34 0
|
21天前
|
机器学习/深度学习 数据采集 数据挖掘
Python在数据科学中的应用:从数据处理到模型训练
Python在数据科学中的应用:从数据处理到模型训练
|
16天前
|
机器学习/深度学习 算法 数据挖掘
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构。本文介绍了K-means算法的基本原理,包括初始化、数据点分配与簇中心更新等步骤,以及如何在Python中实现该算法,最后讨论了其优缺点及应用场景。
58 4
|
12天前
|
机器学习/深度学习 算法 数据挖掘
C语言在机器学习中的应用及其重要性。C语言以其高效性、灵活性和可移植性,适合开发高性能的机器学习算法,尤其在底层算法实现、嵌入式系统和高性能计算中表现突出
本文探讨了C语言在机器学习中的应用及其重要性。C语言以其高效性、灵活性和可移植性,适合开发高性能的机器学习算法,尤其在底层算法实现、嵌入式系统和高性能计算中表现突出。文章还介绍了C语言在知名机器学习库中的作用,以及与Python等语言结合使用的案例,展望了其未来发展的挑战与机遇。
29 1
|
21天前
|
机器学习/深度学习 自然语言处理 算法
深入理解机器学习算法:从线性回归到神经网络
深入理解机器学习算法:从线性回归到神经网络