12.3 机器学习案例 (简要介绍)


文档摘要

12.3 机器学习案例 (简要介绍) NumPy 在机器学习中的应用案例:简要介绍 NumPy 作为 Python 中科学计算的核心库,在机器学习领域扮演着至关重要的角色。其强大的多维数组对象、丰富的数学函数以及高效的性能,为机器学习算法的实现和数据处理提供了坚实的基础。本章将简要介绍 NumPy 在机器学习中的一些常见应用案例,并通过代码示例进行说明。 12.3.1 数据预处理 机器学习算法通常要求输入数据具有特定的格式和特征。NumPy 提供了强大的数据处理能力,可以帮助我们完成以下常见的数据预处理任务: 数据清洗: 处理缺失值、异常值和重复值。 数据转换: 将数据转换为适合机器学习算法的格式,例如标准化、归一化和独热编码。

12.3 机器学习案例 (简要介绍)

NumPy 在机器学习中的应用案例:简要介绍

NumPy 作为 Python 中科学计算的核心库,在机器学习领域扮演着至关重要的角色。其强大的多维数组对象、丰富的数学函数以及高效的性能,为机器学习算法的实现和数据处理提供了坚实的基础。本章将简要介绍 NumPy 在机器学习中的一些常见应用案例,并通过代码示例进行说明。

12.3.1 数据预处理

机器学习算法通常要求输入数据具有特定的格式和特征。NumPy 提供了强大的数据处理能力,可以帮助我们完成以下常见的数据预处理任务:

  • 数据清洗: 处理缺失值、异常值和重复值。

  • 数据转换: 将数据转换为适合机器学习算法的格式,例如标准化、归一化和独热编码。

  • 特征工程: 从原始数据中提取有用的特征,例如计算统计量、进行特征组合等。

代码示例:数据标准化

import numpy as np # 原始数据 data = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) # 计算均值和标准差 mean = np.mean(data, axis=0) std = np.std(data, axis=0) # 标准化 standardized_data = (data - mean) / std print("原始数据:\n", data) print("标准化后的数据:\n", standardized_data)

代码详解:

  1. import numpy as np: 导入 NumPy 库并将其别名为 np,这是标准的 NumPy 使用习惯。

  2. data = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]): 创建一个 NumPy 数组,表示原始数据。

  3. mean = np.mean(data, axis=0): 计算每一列(axis=0)的均值。np.mean() 函数用于计算数组的均值。

  4. std = np.std(data, axis=0): 计算每一列的标准差。np.std() 函数用于计算数组的标准差。

  5. standardized_data = (data - mean) / std: 对数据进行标准化。 标准化公式为: (x - mean) / std,其中 x 是原始数据,mean 是均值,std 是标准差。 NumPy 的广播机制使得可以方便地进行数组的减法和除法运算。

  6. print("原始数据:\n", data): 打印原始数据。

  7. print("标准化后的数据:\n", standardized_data): 打印标准化后的数据。

12.3.2 构建机器学习模型

NumPy 可以用于构建各种机器学习模型,例如线性回归、逻辑回归、支持向量机等。NumPy 提供了矩阵运算、线性代数、随机数生成等功能,这些功能是构建机器学习模型的基础。

代码示例:线性回归 (使用最小二乘法)

import numpy as np # 训练数据 X = np.array([[1], [2], [3], [4], [5]]) # 输入特征 y = np.array([2, 4, 5, 4, 5]) # 目标变量 # 添加偏置项 (截距) X_b = np.c_[np.ones((X.shape[0], 1)), X] # 使用最小二乘法计算模型参数 theta = np.linalg.inv(X_b.T.dot(X_b)).dot(X_b.T).dot(y) # 打印模型参数 print("截距:", theta[0]) print("斜率:", theta[1]) # 预测 X_new = np.array([[6]]) X_new_b = np.c_[np.ones((X_new.shape[0], 1)), X_new] y_predict = X_new_b.dot(theta) print("预测值:", y_predict)

代码详解:

  1. X = np.array([[1], [2], [3], [4], [5]]): 创建输入特征数组 X。 每个样本只有一个特征,所以 X 是一个二维数组,形状为 (5, 1)。

  2. y = np.array([2, 4, 5, 4, 5]): 创建目标变量数组 y

  3. X_b = np.c_[np.ones((X.shape[0], 1)), X]: 添加偏置项 (截距)。 np.ones((X.shape[0], 1)) 创建一个形状为 (5, 1) 的全 1 数组,作为偏置项。 np.c_[] 函数将全 1 数组和原始特征数组 X 按列拼接起来,形成新的特征数组 X_b

  4. theta = np.linalg.inv(X_b.T.dot(X_b)).dot(X_b.T).dot(y): 使用最小二乘法计算模型参数 theta。 该公式是最小二乘法的闭式解,可以直接计算出最优的参数值。np.linalg.inv() 函数用于计算矩阵的逆,X_b.TX_b 的转置,dot() 函数用于计算矩阵乘法。

  5. print("截距:", theta[0]): 打印截距。

  6. print("斜率:", theta[1]): 打印斜率。

  7. X_new = np.array([[6]]): 创建新的输入数据 X_new 用于预测。

  8. X_new_b = np.c_[np.ones((X_new.shape[0], 1)), X_new]: 为新的输入数据添加偏置项。

  9. y_predict = X_new_b.dot(theta): 使用计算得到的模型参数 theta 对新的输入数据进行预测。

  10. print("预测值:", y_predict): 打印预测值。

12.3.3 模型评估

NumPy 可以用于评估机器学习模型的性能。NumPy 提供了各种数学函数和统计函数,可以帮助我们计算模型的评估指标,例如准确率、精确率、召回率、F1 值、均方误差等。

代码示例:计算均方误差 (MSE)

import numpy as np # 真实值 y_true = np.array([1, 2, 3, 4, 5]) # 预测值 y_predicted = np.array([1.2, 1.8, 3.2, 3.8, 5.1]) # 计算均方误差 mse = np.mean((y_true - y_predicted)**2) print("均方误差:", mse)

代码详解:

  1. y_true = np.array([1, 2, 3, 4, 5]): 创建真实值数组 y_true

  2. y_predicted = np.array([1.2, 1.8, 3.2, 3.8, 5.1]): 创建预测值数组 y_predicted

  3. mse = np.mean((y_true - y_predicted)**2): 计算均方误差 (MSE)。 MSE 的公式为: mean((y_true - y_predicted)^2),其中 y_true 是真实值,y_predicted 是预测值。 NumPy 的广播机制使得可以方便地进行数组的减法和平方运算。 np.mean() 函数用于计算数组的均值。

  4. print("均方误差:", mse): 打印均方误差。

12.3.4 神经网络基础

NumPy 可以作为实现神经网络的基础。 虽然现在有很多深度学习框架如 TensorFlow 和 PyTorch 提供了更高级的抽象和优化,但理解 NumPy 在神经网络中的作用对于理解底层原理至关重要。

代码示例:简单的神经网络前向传播

import numpy as np # 输入数据 X = np.array([[0.1, 0.2]]) # 权重 W1 = np.array([[0.3, 0.4], [0.5, 0.6]]) W2 = np.array([[0.7], [0.8]]) # 偏置 b1 = np.array([0.1, 0.2]) b2 = np.array([0.3]) # 激活函数 (sigmoid) def sigmoid(x): return 1 / (1 + np.exp(-x)) # 前向传播 Z1 = np.dot(X, W1) + b1 A1 = sigmoid(Z1) Z2 = np.dot(A1, W2) + b2 A2 = sigmoid(Z2) print("输出:", A2)

代码详解:

  1. X = np.array([[0.1, 0.2]]): 输入数据,是一个 1x2 的矩阵。

  2. W1 = np.array([[0.3, 0.4], [0.5, 0.6]]): 第一层权重,是一个 2x2 的矩阵。

  3. W2 = np.array([[0.7], [0.8]]): 第二层权重,是一个 2x1 的矩阵。

  4. b1 = np.array([0.1, 0.2]): 第一层偏置,是一个 1x2 的矩阵。

  5. b2 = np.array([0.3]): 第二层偏置,是一个 1x1 的矩阵。

  6. def sigmoid(x): return 1 / (1 + np.exp(-x)): 定义 sigmoid 激活函数。

  7. Z1 = np.dot(X, W1) + b1: 计算第一层线性组合。 np.dot(X, W1) 是矩阵乘法,+ b1 是加上偏置。

  8. A1 = sigmoid(Z1): 对第一层线性组合应用 sigmoid 激活函数。

  9. Z2 = np.dot(A1, W2) + b2: 计算第二层线性组合。

  10. A2 = sigmoid(Z2): 对第二层线性组合应用 sigmoid 激活函数,得到最终输出。

  11. print("输出:", A2): 打印输出。

流程图:

12.3.5 其他应用

除了以上介绍的案例,NumPy 还在机器学习中还有很多其他应用,例如:

  • 图像处理: 图像可以表示为 NumPy 数组,NumPy 可以用于进行图像的滤波、缩放、旋转等操作。

  • 自然语言处理: 文本可以表示为 NumPy 数组,NumPy 可以用于进行文本的向量化、词嵌入等操作。

  • 强化学习: NumPy 可以用于存储和处理强化学习中的状态、动作、奖励等数据。

总结

NumPy 是机器学习中不可或缺的工具。它提供高效的多维数组对象和丰富的数学函数,为数据预处理、模型构建和模型评估提供了强大的支持。 虽然高级框架如 TensorFlow 和 PyTorch 提供了更易用的接口和 GPU 加速,但理解 NumPy 的基础知识对于深入理解机器学习算法和优化模型性能至关重要。 通过学习和掌握 NumPy,可以更好地理解和应用机器学习算法,从而解决实际问题。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U