机器学习基础:NumPy、TensorFlow与scikit-learn

在机器学习和人工智能的领域中,经常会遇到一些基础的库,它们是构建更高级机器学习库的基石。如果是一名企业开发者,可能会使用这些库来构建完整的解决方案,但这通常需要更长的时间并且更难维护。这些工作更多地由数据科学家、专业的人工智能/机器学习工程师以及更高级机器学习库的开发者来完成。尽管如此,了解这些底层库的工作原理仍然是一个好主意。

在本模块中,还将简要介绍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数组具有切片功能,允许获取一行或一列:

# 返回第一行作为一维向量 print(arr[0, :]) # 返回第一列作为一维向量 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的索引和切片功能比这更强大。查看参考文档以获得更完整的概述。

NumPy数组可以通过hstack和vstack水平或垂直堆叠(如果维度正确),这两个函数都接受一个数组元组作为参数(注意括号的数量!):

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入门”中看到了Keras。TensorFlow的核心是一个用于张量计算的库。

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

  • 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) # 一个NumPy数组

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

scikit-learn

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

!pip install scikit-learn
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485