NumPy、TensorFlow和scikit-learn简介

目录

安装

NumPy

TensorFlow

scikit-learn

结论


这是我们关于Python及其在机器学习和AI中的应用系列的第八个也是最后一个模块。在上一篇中,我们与Keras讨论了神经网络。现在,我们将快速看一下NumPyTensorFlow。因为它们是机器学习库的构建块,所以您一定会遇到它们。如果您是企业开发人员,则不会仅使用这些库编写完整的解决方案(这需要更长的时间,而且更难维护)。对于数据科学家,专门的AI/ML工程师以及更高级别的ML库的开发人员而言,这将更多。不过,最好看一下低层库以了解它们的含义。

在本模块中,我还将简要介绍scikit-learn库,因为它是Python生态系统中最完整的机器学习(不包括深度学习)库。

安装

如果您经历了之前的模块,则所需的一切都已安装!

NumPy

如第4单元所述,NumPy的核心是其N维数组,并且还提供了线性代数和傅立叶变换等功能。在机器学习库的功能中,NumPy数组是非常常见的输入值。因此,当您拥有一种特定格式的数据集并且必须将其转换为另一种格式时,通常会直接使用NumPy。或者,您可以使用NumPy作为库函数调用的结果。

只要维度有意义,就可以从嵌套列表、嵌套元组或它们的组合直接创建任意数量的NumPy数组。

import numpy as np
arr = np.array([ [1, 2, 3], (4, 5, 6) ])
print(arr[0, 1])

在这里,我们使用较短的np措辞进行导入numpy,这是可以接受且非常普遍的做法。

另外,(0, 1)是一个用作索引的元组。

NumPy数组具有切片,可让您采用行或列:

# returns the first row as a one-dimensional vector
print(arr[0, :])
# returns the first column as a one-dimensional vector 
print(arr[:, 0])

相同的语法也适用于更多维度(尽管在这里很难说):

arr = np.array([ [ [1, 2, 3], [4, 5, 6] ], 
                 [ [7, 8, 9], [10, 11, 12] ] ])
print(arr[:, :, 0]) # [[ 1,  4], [ 7, 10]]
print(arr[1, :, 0]) # [ 7, 10]

NumPy的索引和切片功能比这更强大。查看参考资料以获得更完整的概述。

使用hstackvstackNumPy的数组可以水平或垂直堆叠(如果尺寸是正确的),两者都以数组的元组作为参数(获得括号的数量正确!)

arr1 = np.array([ [ 1, 1 ], [ 1, 1 ]])
arr2 = np.array([ [ 2, 2 ], [2, 2]])
print(np.hstack((arr1, arr2)))
print(np.vstack((arr1, arr2)))

NumPy的一种强大方法是reshape。顾名思义,它改变了数组的形状。这是一个reshape例子:

vector = np.array([ 1, 2, 3, 4, 5, 6, 7, 8, 9 ])
matrix = vector.reshape((3, 3))

reshape的参数是新形状,期望维度的元组。这是一个非常简单的示例,但是您也可以使用它在具有更大维度的数组之间进行重塑。元素以一定的索引顺序从原始数组中读取,并以相同的索引顺序写入新数组。请参阅reshape文档以了解有关索引顺序的更多信息。

TensorFlow

为了在更高层次上使用神经网络,我们在Keras 简介介绍了KerasTensorFlow的核心是用于张量计算的库。

张量是向量和多维矩阵的一般化:

  • 0张量是标量
  • 1张量是向量
  • 2张量是矩阵
  • 3张量就是... 3张量。

等等。

张量可以保存任何类型的数据:整数、浮点数、字符串等。尽管在使用诸如Keras之类的高级库时通常不会遇到这些问题,但是查看它们仍然很有趣,因为它们是TensorFlow的基础构建块。

那么,NumPy数组和张量之间有什么区别?两个对象或多或少表示相同的数据,但是张量是不可变的。

TensorFlow可以对张量执行各种操作。这是一个从三个矩阵开始,对前两个矩阵进行矩阵乘法,然后将第三个矩阵相加,然后求反的示例。

import tensorflow as tf
a = tf.constant([ [ 0.6, 0.1 ], [ 0.4, -0.3 ] ])
b = tf.constant([ [ 1.2, 0.7 ], [ 0.9, 1.1 ] ])
c = tf.constant([ [ -0.1, 0.2 ], [ 0.3, 0.1 ] ])

d = tf.matmul(a, b)
e = tf.add(c, d)
f = tf.linalg.inv(e)

sess = tf.Session()
result = sess.run(f) # a NumPy array

操作不会立即执行。仅在创建并运行会话时才计算结果。在创建会话之前,以上代码构建了一个操作,然后对其进行评估。

scikit-learn

scikit-learn是一个广泛的库,提供许多传统的机器学习方法(非常笼统地说:除机器学习之外的所有内容)。您可以在Jupyter Notebook单元中使用pip安装它:

!pip install scikit-learn

考虑到库的广度,我们将不专注于一个特定的代码示例,而是概述该库的期望。scikit-learn提供有监督和无监督的学习方法。有监督的意味着您对训练集中的每个输入都具有预期的输出;无监督意味着您不需要,并且让算法得出自己的结论。它的监督学习的主要功能是通过支持向量机、随机森林/决策树、最近邻居、朴素贝叶斯等算法进行分类(识别类别)和回归(预测连续值)。无监督学习主要集中在聚类(基于特征的自动分组)上,使用诸如k均值和均值漂移的算法。除了学习功能本身,scikit-learn提供了验证、评估和比较模型和工具以预处理输入数据的方法。这里有很多遗漏,所以我邀请您来看看他们的用户指南以获取完整概述。

结论

我们几乎没有涉及NumPyTensorFlowscikit-learn的表面,但是现在您已经了解了它们可以做什么以及为什么它们在Python的机器学习生态系统中很重要。在本模块结束时,我们也达到了本系列的终点。您现在已经掌握了基础知识,可以利用Python中与AI/ML相关的各种库。感谢您的阅读!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值