目录
安装
NumPy
TensorFlow
scikit-learn
结论
这是我们关于Python及其在机器学习和AI中的应用系列的第八个也是最后一个模块。在上一篇中,我们与Keras讨论了神经网络。现在,我们将快速看一下NumPy和TensorFlow。因为它们是机器学习库的构建块,所以您一定会遇到它们。如果您是企业开发人员,则不会仅使用这些库编写完整的解决方案(这需要更长的时间,而且更难维护)。对于数据科学家,专门的AI/ML工程师以及更高级别的ML库的开发人员而言,这将更多。不过,最好看一下低层库以了解它们的含义。
在本模块中,我还将简要介绍scikit-learn库,因为它是Python生态系统中最完整的机器学习(不包括深度学习)库。
如果您经历了之前的模块,则所需的一切都已安装!
如第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的索引和切片功能比这更强大。查看参考资料以获得更完整的概述。
使用hstack和vstack,NumPy的数组可以水平或垂直堆叠(如果尺寸是正确的),两者都以数组的元组作为参数(获得括号的数量正确!):
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文档以了解有关索引顺序的更多信息。
为了在更高层次上使用神经网络,我们在Keras 简介中介绍了Keras。TensorFlow的核心是用于张量计算的库。
张量是向量和多维矩阵的一般化:
等等。
张量可以保存任何类型的数据:整数、浮点数、字符串等。尽管在使用诸如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是一个广泛的库,提供许多传统的机器学习方法(非常笼统地说:除机器学习之外的所有内容)。您可以在Jupyter Notebook单元中使用pip安装它:
!pip install scikit-learn
考虑到库的广度,我们将不专注于一个特定的代码示例,而是概述该库的期望。scikit-learn提供有监督和无监督的学习方法。有监督的意味着您对训练集中的每个输入都具有预期的输出;无监督意味着您不需要,并且让算法得出自己的结论。它的监督学习的主要功能是通过支持向量机、随机森林/决策树、最近邻居、朴素贝叶斯等算法进行分类(识别类别)和回归(预测连续值)。无监督学习主要集中在聚类(基于特征的自动分组)上,使用诸如k均值和均值漂移的算法。除了学习功能本身,scikit-learn提供了验证、评估和比较模型和工具以预处理输入数据的方法。这里有很多遗漏,所以我邀请您来看看他们的用户指南以获取完整概述。
我们几乎没有涉及NumPy、TensorFlow和scikit-learn的表面,但是现在您已经了解了它们可以做什么以及为什么它们在Python的机器学习生态系统中很重要。在本模块结束时,我们也达到了本系列的终点。您现在已经掌握了基础知识,可以利用Python中与AI/ML相关的各种库。感谢您的阅读!