书籍下载qg群6089740钉钉群21734177 IT书籍http:/t.cn/RDIAj5D 也可以与其他大量Pytho科学计算工具一起使用,本章后面会讲到相关内容。 在阅读本书的过程中,我们建议你同时浏览scikit-Learn用户指南(htp:/scikit-learn.org stable/user_.guide.html)和API文档,里面给出了每个算法的更多细节和更多选项。在线文 档非常全面,而本书会介绍机器学习的所有必备知识,以便于你深入了解。 安装scikit-Learn scikit-learn依赖于另外两个Python包:NumPy和SciPy。若想绘图和进行交互式开发, 还应该安装matplotlib、Python和Jupyter Notebook。我们推荐使用下面三个预先打包的 Python发行版之一,里面已经装有必要的包。 Anaconda (https://store.continuum.io/cshop/anaconda/) 用于大规模数据处理、预测分析和科学计算的Python发行版。Anaconda已经预先安装 好NumPy、SciPy、matplotlib、pandas、.Python、Jupyter Notebook和scikit-learn。 它可以在Mac OS、Windows和Linux上运行,是一种非常方便的解决方案。对于尚未 安装Python科学计算包的人,我们建议使用Anaconda。.Anaconda现在还免费提供商用 的ntel MKL库。MKL(在安装Anaconda时自动安装)可以使scikit-learn中许多算 法的速度大大提升。 Enthought Canopy (https://www.enthought.com/products/canopy/) 用于科学计算的另一款Python发行版。它已经预先装有NumPy、SciPy、matplotlib pandas和IPython,但免费版没有预先安装scikit-Learn。如果你是能够授予学位的 学术机构的成员,可以申请学术许可,免费使用Enthought Canopy的付费订阅版。 Enthought Canopy适用于Python2.7.x,可以在Mac OS、Windows和Linux上运行。 Python(x,y)(http://python-xy.github.io/) 专门为Windows打造的Python科学计算免费发行版。Python(xy)已经预先装有NumPy、 SciPy、matplotlib、pandas、IPython和scikit-learn。 如果你已经安装了Python,可以用pip安装上述所有包: pip install numpy scipy matplotlib ipython scikit-learn pandas 1.4必要的库和工具 了解scikit-Learn及其用法是很重要的,但还有其他一些库也可以改善你的编程体验。 scikit-learn是基于NumPy和SciPy科学计算库的。除了NumPy和SciPy,我们还会用 到pandas和matplotlib。我们还会介绍Jupyter Notebook,一个基于浏览器的交互编程环 境。简单来说,对于这些工具,你应该了解以下内容,以便充分利用scikit-Learn。,' 注1:你如果不熟悉NumPy或matplotlib,我们推荐阅读SciPy讲稿(htp:www.scipy-lectures.org)的第1章。 引言15 电子书寻找看手相钉钉或微信pythontesting
引言 | 5 也可以与其他大量 Python 科学计算工具一起使用,本章后面会讲到相关内容。 在阅读本书的过程中,我们建议你同时浏览 scikit-learn 用户指南(http://scikit-learn.org/ stable/user_guide.html)和 API 文档,里面给出了每个算法的更多细节和更多选项。在线文 档非常全面,而本书会介绍机器学习的所有必备知识,以便于你深入了解。 安装scikit-learn scikit-learn 依赖于另外两个 Python 包:NumPy 和 SciPy。若想绘图和进行交互式开发, 还应该安装 matplotlib、IPython 和 Jupyter Notebook。我们推荐使用下面三个预先打包的 Python 发行版之一,里面已经装有必要的包。 Anaconda(https://store.continuum.io/cshop/anaconda/) 用于大规模数据处理、预测分析和科学计算的 Python 发行版。Anaconda 已经预先安装 好 NumPy、SciPy、matplotlib、pandas、IPython、Jupyter Notebook 和 scikit-learn。 它可以在 Mac OS、Windows 和 Linux 上运行,是一种非常方便的解决方案。对于尚未 安装 Python 科学计算包的人,我们建议使用 Anaconda。Anaconda 现在还免费提供商用 的 Intel MKL 库。MKL(在安装 Anaconda 时自动安装)可以使 scikit-learn 中许多算 法的速度大大提升。 Enthought Canopy(https://www.enthought.com/products/canopy/) 用于科学计算的另一款 Python 发行版。它已经预先装有 NumPy、SciPy、matplotlib、 pandas 和 IPython,但免费版没有预先安装 scikit-learn。如果你是能够授予学位的 学术机构的成员,可以申请学术许可,免费使用 Enthought Canopy 的付费订阅版。 Enthought Canopy 适用于 Python 2.7.x,可以在 Mac OS、Windows 和 Linux 上运行。 Python(x,y)(http://python-xy.github.io/) 专门为 Windows 打造的 Python 科学计算免费发行版。Python(x,y) 已经预先装有 NumPy、 SciPy、matplotlib、pandas、IPython 和 scikit-learn。 如果你已经安装了 Python,可以用 pip 安装上述所有包: $ pip install numpy scipy matplotlib ipython scikit-learn pandas 1.4 必要的库和工具 了解 scikit-learn 及其用法是很重要的,但还有其他一些库也可以改善你的编程体验。 scikit-learn 是基于 NumPy 和 SciPy 科学计算库的。除了 NumPy 和 SciPy,我们还会用 到 pandas 和 matplotlib。我们还会介绍 Jupyter Notebook,一个基于浏览器的交互编程环 境。简单来说,对于这些工具,你应该了解以下内容,以便充分利用 scikit-learn。1 注 1:你如果不熟悉 NumPy 或 matplotlib,我们推荐阅读 SciPy 讲稿(http://www.scipy-lectures.org/)的第 1 章。 书籍下载qq群6089740 钉钉群21734177 IT书籍 http://t.cn/RDIAj5D 电子书寻找看手相 钉钉或微信pythontesting
1.4.1 Jupyter Notebook Jupyter Notebook是可以在浏览器中运行代码的交互环境。这个工具在探索性数据分析方面 非常有用,在数据科学家中广为使用。虽然Jupyter Notebook支持多种编程语言,但我们 只需要支持Python即可。用Jupyter Notebook整合代码、文本和图像非常方便,实际上本 书所有内容都是以Jupyter Notebook的形式进行编写的。所有代码示例都可以在GitHub下 (https://github.com/amueller/introduction_to_ml_with_python). 1.4.2 NumPy NumPy是Python科学计算的基础包之一。它的功能包括多维数组、高级数学函数(比如 线性代数运算和傅里叶变换),以及伪随机数生成器。 在scikit-Learn中,NumPy数组是基本数据结构。scikit-learn接受NumPy数组格式的 数据。你用到的所有数据都必须转换成NumPy数组。NumPy的核心功能是ndarray类, 即多维(n维)数组。数组的所有元素必须是同一类型。NumPy数组如下所示: In[2]: import numpy as np ×=np.array([1,2,3],[4,5,6]) print("x:\n{]".format(x)) 0ut[2]: X: [123] [456] 本书会经常用到NumPy。对于NumPy ndarray类的对象,我们将其简称为“NumPy数组” 或“数组”。 1.4.3 SciPy SciPy是Python中用于科学计算的函数集合。它具有线性代数高级程序、数学函数优化、 信号处理、特殊数学函数和统计分布等多项功能。scikit-learn利用SciPy中的函数集 合来实现算法。对我们来说,SciPy中最重要的是scipy.sparse:它可以给出稀疏矩阵 (sparse matrice),稀疏矩阵是scikit-Learn中数据的另一种表示方法。如果想保存一个大 部分元素都是0的二维数组,就可以使用稀疏矩阵: In[3]: from scipy import sparse #创建一个二维umPy数组,对角线为1,其余都为0 eye np.eye(4) print("NumPy array:\n{}".format(eye)) 0ut[3]: NumPy array: [1.0.0.0.] 61第1章
6 | 第 1 章 1.4.1 Jupyter Notebook Jupyter Notebook 是可以在浏览器中运行代码的交互环境。这个工具在探索性数据分析方面 非常有用,在数据科学家中广为使用。虽然 Jupyter Notebook 支持多种编程语言,但我们 只需要支持 Python 即可。用 Jupyter Notebook 整合代码、文本和图像非常方便,实际上本 书所有内容都是以 Jupyter Notebook 的形式进行编写的。所有代码示例都可以在 GitHub 下 载(https://github.com/amueller/introduction_to_ml_with_python)。 1.4.2 NumPy NumPy 是 Python 科学计算的基础包之一。它的功能包括多维数组、高级数学函数(比如 线性代数运算和傅里叶变换),以及伪随机数生成器。 在 scikit-learn 中,NumPy 数组是基本数据结构。scikit-learn 接受 NumPy 数组格式的 数据。你用到的所有数据都必须转换成 NumPy 数组。NumPy 的核心功能是 ndarray 类, 即多维(n 维)数组。数组的所有元素必须是同一类型。NumPy 数组如下所示: In[2]: import numpy as np x = np.array([[1, 2, 3], [4, 5, 6]]) print("x:\n{}".format(x)) Out[2]: x: [[1 2 3] [4 5 6]] 本书会经常用到 NumPy。对于 NumPy ndarray 类的对象,我们将其简称为“NumPy 数组” 或“数组”。 1.4.3 SciPy SciPy 是 Python 中用于科学计算的函数集合。它具有线性代数高级程序、数学函数优化、 信号处理、特殊数学函数和统计分布等多项功能。scikit-learn 利用 SciPy 中的函数集 合来实现算法。对我们来说,SciPy 中最重要的是 scipy.sparse:它可以给出稀疏矩阵 (sparse matrice),稀疏矩阵是 scikit-learn 中数据的另一种表示方法。如果想保存一个大 部分元素都是 0 的二维数组,就可以使用稀疏矩阵: In[3]: from scipy import sparse # 创建一个二维NumPy数组,对角线为1,其余都为0 eye = np.eye(4) print("NumPy array:\n{}".format(eye)) Out[3]: NumPy array: [[ 1. 0. 0. 0.]
书籍下载qq群6089740钉钉群21734177 IT书籍http:/t.cn/RDIAj5D [0.1. 0.0.] 0.0.1.0.] 0.0. 0.1.] In[4]: #将NumPy数组转换为CSR格式的SciPyi稀硫矩 #只保存非零元素 sparse_matrix sparse.csr_matrix(eye) print("\nSciPy sparse CSR matrix:\n{]".format(sparse_matrix)) 0ut[4]: SciPy sparse CSR matrix: (0,) 1.0 (1,1) 1.0 (2,2) 1.0 (3,3) 1.0 通常来说,创建稀疏数据的稠密表示(dense representation)是不可能的(因为太浪费内 存),所以我们需要直接创建其稀疏表示(sparse representation)。下面给出的是创建同一 稀疏矩阵的方法,用的是COO格式: In[5]: data np.ones(4) row_indices np.arange(4) col_indices np.arange(4) eye_coo sparse.coo_matrix((data,(row_indices,col_indices))) print("C0o representation:\n{]".format(eye_coo)) 0ut[5]: COO representation: (0,0) 1.0 (1,1) 1.0 (2,2) 1.0 (3,3) 1.0 关于SciPy稀疏矩阵的更多内容可查阅SciPy讲稿(http:www.scipy-lectures.org)。 1.4.4 matplotlib matplotlib是Python主要的科学绘图库,其功能为生成可发布的可视化内容,如折 线图、直方图、散点图等。将数据及各种分析可视化,可以让你产生深刻的理解,而 我们将用matplotlib完成所有的可视化内容。在Jupyter Notebook中,你可以使用 %matplotlib notebook和%matplotlib inline命令,将图像直接显示在浏览器中。我们推 荐使用matplotlib notebook命令,它可以提供交互环境(虽然在写作本书时我们用的是 %matplotlib inline)。举个例子,下列代码会生成图1-1中的图像: In[6]: %matplotlib inline import matplotlib.pyplot as plt #在-10和10之间生成一个数列,共100个数 引言17 电子书寻找看手相钉钉或微信pythontesting
引言 | 7 [ 0. 1. 0. 0.] [ 0. 0. 1. 0.] [ 0. 0. 0. 1.]] In[4]: # 将NumPy数组转换为CSR格式的SciPy稀疏矩阵 # 只保存非零元素 sparse_matrix = sparse.csr_matrix(eye) print("\nSciPy sparse CSR matrix:\n{}".format(sparse_matrix)) Out[4]: SciPy sparse CSR matrix: (0, 0) 1.0 (1, 1) 1.0 (2, 2) 1.0 (3, 3) 1.0 通常来说,创建稀疏数据的稠密表示(dense representation)是不可能的(因为太浪费内 存),所以我们需要直接创建其稀疏表示(sparse representation)。下面给出的是创建同一 稀疏矩阵的方法,用的是 COO 格式: In[5]: data = np.ones(4) row_indices = np.arange(4) col_indices = np.arange(4) eye_coo = sparse.coo_matrix((data, (row_indices, col_indices))) print("COO representation:\n{}".format(eye_coo)) Out[5]: COO representation: (0, 0) 1.0 (1, 1) 1.0 (2, 2) 1.0 (3, 3) 1.0 关于 SciPy 稀疏矩阵的更多内容可查阅 SciPy 讲稿(http://www.scipy-lectures.org/)。 1.4.4 matplotlib matplotlib 是 Python 主要的科学绘图库,其功能为生成可发布的可视化内容,如折 线图、直方图、散点图等。将数据及各种分析可视化,可以让你产生深刻的理解,而 我们将用 matplotlib 完 成 所 有 的 可 视 化 内 容。 在 Jupyter Notebook 中, 你 可 以 使 用 %matplotlib notebook 和 %matplotlib inline 命令,将图像直接显示在浏览器中。我们推 荐使用 %matplotlib notebook 命令,它可以提供交互环境(虽然在写作本书时我们用的是 %matplotlib inline)。举个例子,下列代码会生成图 1-1 中的图像: In[6]: %matplotlib inline import matplotlib.pyplot as plt # 在-10和10之间生成一个数列,共100个数 书籍下载qq群6089740 钉钉群21734177 IT书籍 http://t.cn/RDIAj5D 电子书寻找看手相 钉钉或微信pythontesting
×=np.1 inspace(-10,10,100) #用正弦函数创建第二个数组 y np.sin(x) #pLot函数绘制一个数组关于另一个数组的折线图 plt.plot(x,y,marker="x") 10 05 0.0 05 1010 图1-1:用matplotlib画出正弦函数的简单折线图 1.4.5 pandas pandas是用于处理和分析数据的Python库。它基于一种叫作DataFrame的数据结构,这 种数据结构模仿了R语言中的DataFrame。,简单来说,一个pandas DataFrame是一张表 格,类似于Excel表格。pandas中包含大量用于修改表格和操作表格的方法,尤其是可 以像SQL一样对表格进行查询和连接。NumPy要求数组中的所有元素类型必须完全相 同,而pandas不是这样,每一列数据的类型可以互不相同(比如整型、日期、浮点数和字 符串)。pandas的另一个强大之处在于,它可以从许多文件格式和数据库中提取数据,如 SQL、Excel文件和逗号分隔值(CSV)文件。pandas的详细功能介绍已经超出了本书的 范围。但Wes McKinney的《Python数据处理》2一书是很好的参考指南。下面是利用字典 创建DataFrame的一个小例子: In[7]: tmport pandas as pd from IPython.display import display #创建关于人的简单数据集 data ={'Name':["John","Anna","Peter","Linda"], 'Location':["New York","Paris","Berlin","London"], 'Age':[24,13,53,33] data_pandas pd.DataFrame(data) #IPython.display可以在Jupyter Notebook中打印出“美观的”DataFrame display(data_pandas) 注2:该书已由人民邮电出版社出版,详见http:/www.ituring.com.cn/book/1819。一编者注 8|第1章
8 | 第 1 章 x = np.linspace(-10, 10, 100) # 用正弦函数创建第二个数组 y = np.sin(x) # plot函数绘制一个数组关于另一个数组的折线图 plt.plot(x, y, marker="x") 图 1-1:用 matplotlib 画出正弦函数的简单折线图 1.4.5 pandas pandas 是用于处理和分析数据的 Python 库。它基于一种叫作 DataFrame 的数据结构,这 种数据结构模仿了 R 语言中的 DataFrame。简单来说,一个 pandas DataFrame 是一张表 格,类似于 Excel 表格。pandas 中包含大量用于修改表格和操作表格的方法,尤其是可 以像 SQL 一样对表格进行查询和连接。NumPy 要求数组中的所有元素类型必须完全相 同,而 pandas 不是这样,每一列数据的类型可以互不相同(比如整型、日期、浮点数和字 符串)。pandas 的另一个强大之处在于,它可以从许多文件格式和数据库中提取数据,如 SQL、Excel 文件和逗号分隔值(CSV)文件。pandas 的详细功能介绍已经超出了本书的 范围。但 Wes McKinney 的《Python 数据处理》2 一书是很好的参考指南。下面是利用字典 创建 DataFrame 的一个小例子: In[7]: import pandas as pd from IPython.display import display # 创建关于人的简单数据集 data = {'Name': ["John", "Anna", "Peter", "Linda"], 'Location' : ["New York", "Paris", "Berlin", "London"], 'Age' : [24, 13, 53, 33] } data_pandas = pd.DataFrame(data) # IPython.display可以在Jupyter Notebook中打印出“美观的”DataFrame display(data_pandas) 注 2:该书已由人民邮电出版社出版,详见 http://www.ituring.com.cn/book/1819。——编者注
书籍下载qg群6089740钉钉群21734177 IT书籍http:/t.cn/RDIAj5D 上述代码的输出如下: Age Location Name 0 24 New York John 1 13 Paris Anna 2 53 Berlin Peter 3 33 London Linda 查询这个表格的方法有很多种。举个例子: In[8]: #选择年龄大于30的所有行 display(data_pandas[data_pandas.Age 30]) 输出结果如下: Age Location Name 2 53 Berlin Peter 3 33 London Linda 1.4.6 mglearn 本书的附加代码可以在GitHub下载(https:/github.com/amueller/introduction_to_ml_with python)。附加代码不仅包括本书中的所有示例,还包括mglearn库。这是我们为本书编写 的实用函数库,以免将代码清单与绘图和数据加载的细节混在一起。感兴趣的话,你可以 查看仓库中的所有函数,但mglearn模块的细节并不是本书的重点。如果你在代码中看到 了对mglearn的调用,通常是用来快速美化绘图,或者用于获取一些有趣的数据。 本书会频繁使用NumPy、matplotlib和pandas.。所有代码都默认导入了这 些库: import numpy as np import matplotlib.pyplot as plt import pandas as pd import mglearn 我们还假设你在Jupyter Notebook中运行代码,并使用matplotlib notebook或 %matplotlib inline魔法命令来显示图像。如果你没有使用Jupyter Notebook或 这些魔法命令,那么就需要调用plt.show来显示图像。 1.5 Python2与Python3的对比 目前Python主要有两大版本广为使用:Python2((更确切地说是Python2.7)和Python3 (写作本书时的最新版本是Python3.5)。有时这会造成一些混乱。Python2已经停止开发, 但由于Python3包含许多重大变化,所以Python2的代码通常无法在Python3中运行。如 果你是Python新手,或者要从头开发一个新项目,我们强烈推荐使用最新版本的Python3, 你无需做任何更改。如果你要依赖一个用Pythor2编写的大型代码库,可以暂时不升级。 引言19 电子书寻找看手相钉钉或微信pythontesting
引言 | 9 上述代码的输出如下: Age Location Name 0 24 New York John 1 13 Paris Anna 2 53 Berlin Peter 3 33 London Linda 查询这个表格的方法有很多种。举个例子: In[8]: # 选择年龄大于30的所有行 display(data_pandas[data_pandas.Age > 30]) 输出结果如下: Age Location Name 2 53 Berlin Peter 3 33 London Linda 1.4.6 mglearn 本书的附加代码可以在 GitHub 下载(https://github.com/amueller/introduction_to_ml_with_ python)。附加代码不仅包括本书中的所有示例,还包括 mglearn 库。 这是我们为本书编写 的实用函数库,以免将代码清单与绘图和数据加载的细节混在一起。感兴趣的话,你可以 查看仓库中的所有函数,但 mglearn 模块的细节并不是本书的重点。如果你在代码中看到 了对 mglearn 的调用,通常是用来快速美化绘图,或者用于获取一些有趣的数据。 本书会频繁使用 NumPy、matplotlib 和 pandas。所有代码都默认导入了这 些库: import numpy as np import matplotlib.pyplot as plt import pandas as pd import mglearn 我们还假设你在 Jupyter Notebook 中运行代码,并使用 %matplotlib notebook 或 %matplotlib inline 魔法命令来显示图像。如果你没有使用 Jupyter Notebook 或 这些魔法命令,那么就需要调用 plt.show 来显示图像。 1.5 Python 2与Python 3的对比 目前 Python 主要有两大版本广为使用:Python 2(更确切地说是 Python 2.7)和 Python 3 (写作本书时的最新版本是 Python 3.5)。有时这会造成一些混乱。Python 2 已经停止开发, 但由于 Python 3 包含许多重大变化,所以 Python 2 的代码通常无法在 Python 3 中运行。如 果你是 Python 新手,或者要从头开发一个新项目,我们强烈推荐使用最新版本的 Python 3, 你无需做任何更改。如果你要依赖一个用 Python 2 编写的大型代码库,可以暂时不升级。 书籍下载qq群6089740 钉钉群21734177 IT书籍 http://t.cn/RDIAj5D 电子书寻找看手相 钉钉或微信pythontesting