《Numpy 简易速速上手小册》第9章:Numpy 在机器学习中的应用(2024 最新版)

在这里插入图片描述

文章目录

  • 9.1 数据预处理
    • 9.1.1 基础知识
    • 9.1.2 完整案例:数据标准化
    • 9.1.3 拓展案例 1:缺失值处理
    • 9.1.4 拓展案例 2:非数值数据的转换
  • 9.2 特征提取和处理
    • 9.2.1 基础知识
    • 9.2.2 完整案例:特征归一化
    • 9.2.3 拓展案例 1:特征降维
    • 9.2.4 拓展案例 2:独热编码
  • 9.3 与机器学习库的集成
    • 9.3.1 基础知识
    • 9.3.2 完整案例:Scikit-learn 集成
    • 9.3.3 拓展案例 1:TensorFlow 集成
    • 9.3.4 拓展案例 2:PyTorch 集成

9.1 数据预处理

9.1.1 基础知识

在机器学习中,数据预处理是一个至关重要的步骤。良好的数据预处理可以显著提升模型的性能和准确性。Numpy 在这方面提供了强大的支持,包括但不限于:

  • 标准化(Normalization):调整数据使其具有零均值和单位方差,有助于模型学习和收敛。
  • 归一化(Min-Max Scaling):将数据缩放到给定的最小值和最大值(通常是 0 到 1)之间。
  • 处理缺失值:替换或删除数据集中的缺失值。
  • 数据转换:例如将非数值数据转换为数值数据。

9.1.2 完整案例:数据标准化

假设你有一组机器学习的特征数据,需要进行标准化处理。

import numpy as np

# 示例数据
features = np.array([[1.2, 3.2],
                     [2.3, 2.1],
                     [4.5, 6.7],
                     [5.7, 2.4]])

# 计算均值和标准差
mean = np.mean(features, axis=0)
std = np.std(features, axis=0)

# 标准化数据
standardized_features = (features - mean) / std

print("Standardized Features:\n", standardized_features)

这个案例演示了如何使用 Numpy 计算特征数据的均值和标准差,并进行标准化。

9.1.3 拓展案例 1:缺失值处理

处理包含缺失值的数据集。

# 示例数据,其中 np.nan 表示缺失值
data_with_nan = np.array([[3, np.nan, 5],
                          [1, 2, np.nan],
                          [np.nan, 4, 6]])

# 计算每列的均值,忽略缺失值
col_mean = np.nanmean(data_with_nan, axis=0)

# 用每列的均值替换缺失值
inds = np.where(np.isnan(data_with_nan))
data_with_nan[inds] = np.take(col_mean, inds[1])

print("Data after replacing NaNs:\n", data_with_nan)

在这个案例中,我们处理了包含缺失值的数据,使用每列的均值来替换这些缺失值。

9.1.4 拓展案例 2:非数值数据的转换

将分类数据(如字符串)转换为数值,以便进行机器学习处理。

# 示例数据,包含分类特征
categories = np.array(['red', 'blue', 'red', 'green'])

# 创建一个映射,将分类转换为数值
unique_categories = np.unique(categories)
category_mapping = {category: idx for idx, category in enumerate(unique_categories)}

# 将分类数据转换为数值
numeric_categories = np.vectorize(category_mapping.get)(categories)

print("Numeric Categories:", numeric_categories)

在这个案例中,我们将字符串分类数据(颜色名称)转换为了数值形式,这种转换对于大多数机器学习模型是必要的。

这些数据预处理的技巧和方法是机器学习项目成功的关键。通过有效的预处理,你可以确保模型获得准确和有意义的输入,从而提高整体的性能和准确性。

在这里插入图片描述


9.2 特征提取和处理

9.2.1 基础知识

特征提取和处理在机器学习中的重要性不言而喻。它们涉及从原始数据中提取有用信息并将其转换为模型可以理解的格式。Numpy 在这方面提供了强大的支持,可以用于:

  • 特征提取:从原始数据集中提取有用的特征,如图像、文本或声音数据的处理。
  • 特征转换:将特征转换为更合适的格式,比如归一化、标准化、独热编码(One-Hot Encoding)等。
  • 降维:使用如主成分分析(PCA)等方法减少特征数量,以简化模型并减少计算成本。

9.2.2 完整案例:特征归一化

假设你有一组数值型特征,需要进行归一化处理,以便用于机器学习模型。

import numpy as np

# 示例特征数据
features = np.array([[100, 0.001],
                     [8, 0.05],
                     [50, 0.005],
                     [88, 0.07]])

# 归一化特征
min_vals = features.min(axis=0)
max_vals = features.max(axis=0)
normalized_features = (features - min_vals) / (max_vals - min_vals)

print("Normalized Features:\n", normalized_features)

这个案例展示了如何将特征数据归一化到 0 和 1 之间。

9.2.3 拓展案例 1:特征降维

在处理具有许多特征的复杂数据集时,降维可以提高效率并减少过拟合。

from sklearn.decomposition import PCA

# 创建一个具有多个特征的数据集
data = np.random.rand(100, 10)

# 应用 PCA 进行降维
pca = PCA(n_components=2)
reduced_data = pca.fit_transform(data)

print("Reduced Data Shape:", reduced_data.shape)

在这个案例中,我们使用 PCA 将一个 10 维的数据集降维到 2 维。

9.2.4 拓展案例 2:独热编码

对于分类数据,独热编码是将类别变量转换为机器学习模型可以理解的形式的一种常用方法。

# 示例分类数据
categories = np.array(['apple', 'banana', 'apple', 'orange'])

# 将分类数据转换为独热编码
unique_categories = np.unique(categories)
one_hot_encoded = np.zeros((categories.size, unique_categories.size))

for i, category in enumerate(categories):
    idx = np.where(unique_categories == category)
    one_hot_encoded[i, idx] = 1

print("One-Hot Encoded Data:\n", one_hot_encoded)

在这个案例中,我们将字符串类别数据转换为了独热编码格式,以便用于机器学习模型。

特征提取和处理是构建有效机器学习模型的关键步骤。通过适当的特征处理,你可以确保模型接收到的输入是最优化和最有信息量的,从而提高模型的性能和准确性。

在这里插入图片描述


9.3 与机器学习库的集成

9.3.1 基础知识

机器学习库,如 Scikit-learn、TensorFlow 和 PyTorch,为构建复杂的机器学习模型提供了丰富的工具和接口。这些库通常与 Numpy 紧密集成,使得 Numpy 数组成为在这些平台上进行数据操作和模型训练的首选格式。

  • 数据兼容性:大多数机器学习库都可以直接处理 Numpy 数组。
  • 性能优化:Numpy 数组经过优化,能够高效地处理大型数据集。
  • 易用性:Numpy 的广泛应用和统一接口使得与各种机器学习库的集成变得容易。

9.3.2 完整案例:Scikit-learn 集成

使用 Numpy 数据与 Scikit-learn 库结合进行机器学习任务。

from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
import numpy as np

# 创建数据集
X = np.random.rand(100, 5)  # 特征数据
y = np.random.rand(100)    # 目标变量

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)

# 创建并训练模型
model = LinearRegression()
model.fit(X_train, y_train)

# 预测
predictions = model.predict(X_test)

print("Predictions:", predictions)

在这个案例中,我们使用 Numpy 创建了数据集,然后使用 Scikit-learn 的线性回归模型进行训练和预测。

9.3.3 拓展案例 1:TensorFlow 集成

将 Numpy 数据与 TensorFlow 结合,用于构建和训练深度学习模型。

import tensorflow as tf
import numpy as np

# 创建数据集
X = np.random.rand(100, 5).astype(np.float32)
y = np.random.rand(100, 1).astype(np.float32)

# 构建简单的神经网络模型
model = tf.keras.models.Sequential([
    tf.keras.layers.Dense(10, activation='relu'),
    tf.keras.layers.Dense(1)
])

# 编译模型
model.compile(optimizer='adam', loss='mean_squared_error')

# 训练模型
model.fit(X, y, epochs=10)

在这个案例中,我们创建了一个简单的神经网络,并使用由 Numpy 数组组成的数据进行训练。

9.3.4 拓展案例 2:PyTorch 集成

使用 PyTorch 和 Numpy 结合来进行机器学习任务。

import torch
import numpy as np

# 创建 Numpy 数据
X_np = np.random.rand(100, 5)
y_np = np.random.rand(100, 1)

# 将 Numpy 数据转换为 PyTorch 张量
X_torch = torch.from_numpy(X_np.astype(np.float32))
y_torch = torch.from_numpy(y_np.astype(np.float32))

# 构建简单的神经网络
model = torch.nn.Sequential(
    torch.nn.Linear(5, 10),
    torch.nn.ReLU(),
    torch.nn.Linear(10, 1)
)

# 定义损失函数和优化器
criterion = torch.nn.MSELoss()
optimizer = torch.optim.Adam(model.parameters(), lr=0.001)

# 训练模型
for epoch in range(10):
    # 前向传播
    y_pred = model(X_torch)

    # 计算损失
    loss = criterion(y_pred, y_torch)

    # 反向传播和优化
    optimizer.zero_grad()
    loss.backward()
    optimizer.step()

    print(f'Epoch {epoch}, Loss: {loss.item()}')

在这个案例中,我们展示了如何将 Numpy 数组转换为 PyTorch 张量,并用它们来训练一个简单的神经网络。

这些案例展示了 Numpy 如何与流行的机器学习库无缝集成,形成一个强大的工具集,用于解决各种机器学习问题。从传统的机器学习到最前沿的深度学习,Numpy 都发挥着至关重要的作用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/368532.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MySQL知识点总结:构建可靠高性能的关系型数据库

摘要:MySQL是一款广泛使用的开源关系型数据库管理系统,具备可靠性和高性能的特点。本文将总结MySQL的一些重要知识点,帮助读者了解如何使用MySQL构建可靠高性能的关系型数据库。 正文: ### 1. 数据类型 MySQL支持多种数据类型&…

SpringBoot整合Activiti7—— 补偿边界/补偿中间事件(十五)

文章目录 补偿边界/补偿中间事件代码实现xml文件测试流程流程执行步骤 补偿边界/补偿中间事件 补偿事件可以被触发来回滚或修复之前已经完成的任务或活动。 补偿事件通常与错误边界事件(Error Boundary Event)结合使用。当任务或活动发生异常时&#xff…

SQL sever2008中创建用户并赋权

一、创建数据库dream CREATE DATABASE dream; 二、创建登录用户XZS 法一:使用SSMS创建 通过查询 sys.syslogins 系统视图来确定当前登录是否具有系统管理员权限。执行以下查询语句: SELECT name, isntname FROM sys.syslogins WHERE sysadmin 1;选…

Android Studio从零基础到APP上线(3)

第3章 简单控件 本章介绍App开发常见的几类简单控件的用法,主要包括:显示文字的文本视图,容纳视图的常用布局,响应点击的按钮控件,显示图片的图像视图等。然后结合本章所学的知识,演示一个实战项目“简单计算器”的设计与实现。 3.1 文本显示 本节介绍如何在文本视图Tex…

Jmeter,如何从数组参数中取值

有个post请求,参数“equipment_ids”,是个数组,需求每次执行的时候,按顺序取equipment_ids中不同的值 要实现在 JMeter 中每次执行请求时按顺序取不同的 equipment_ids 中的值,你可以使用 Counter 元件来生成索引&…

【面试深度解析】掌上先机后端面试(Java基础能力夯实)

欢迎关注公众号(通过文章导读关注:【11来了】),及时收到 AI 前沿项目工具及新技术的推送! 在我后台回复 「资料」 可领取编程高频电子书! 在我后台回复「面试」可领取硬核面试笔记! 文章导读地址…

HTML音频标签

新增的语义化的标签: 即直接给了一个具象化的盒子。 新增的多媒体标签: 视频格式: 当都不支持的时候会显示文字。 video仍然是可以看成一个盒子。 音频格式: 新增的input 表单控件: 新增的表单属性: 提示文…

MyBatis 的XML实现方法

MyBatis 的XML实现方法 MyBatis 的XML实现方法前情提示创建mapper接口添加配置创建xml文件操作数据库insert标签delete标签select标签resultMap标签 update标签sql标签,include标签 MyBatis 的XML实现方法 前情提示 关于mybatis的重要准备工作,请看MyBatis 的注解实现方法 创…

Java SWT Composite 绘画

Java SWT Composite 绘画 1 Java SWT2 Java 图形框架 AWT、Swing、SWT、JavaFX2.1 Java AWT (Abstract Window Toolkit)2.2 Java Swing2.3 Java SWT (Standard Widget Toolkit)2.4 Java JavaFX 3 比较和总结 1 Java SWT Java SWT(Standard Widget Toolkit&#xff…

Power BI案例-链接Mysql方法

Power BI案例-连锁Mysql 方法1-通过组件mysql-connector-net-8.3.0: 选择文件–获取数据–选择MySQL数据库–选择链接 提示无组件,选择了解详细情况 弹出浏览器,选择下载 不用登陆,可以直接下载 下载的组件如下&#xff1a…

【开源】基于JAVA+Vue+SpringBoot的陕西非物质文化遗产网站

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 设计目标2.2 研究内容2.3 研究方法与过程2.3.1 系统设计2.3.2 查阅文献2.3.3 网站分析2.3.4 网站设计2.3.5 网站实现2.3.6 系统测试与效果分析 三、系统展示四、核心代码4.1 查询民间文学4.2 查询传统音乐4.3 增改传统舞…

代码随想录算法训练营Day46|139.单词拆分、多重背包理论基础、背包问题总结

目录 139.单词拆分 方法一:回溯法 算法实现 方法二:背包问题 算法实现 多重背包理论基础 思路 算法实现 背包问题总结 前言 背包递推公式 遍历顺序 0-1背包 完全背包 139.单词拆分 题目链接 文章链接 方法一:回溯法 在回溯专题…

Endnote常见设置(硕士毕业论文参考文献修改)

1、根据大多数期刊或学校使用的标准,英文名首字母大写后续字母小写。 2、需要手动调整Endnote中的参考文献相关内容 3、关于姓名大小写设置 AS IS是不更改大小写,EndNote库中文献的大小是什么样,Word中就显示什么样。选择Normal为首字母大…

HDMI2.1之eARC简介-Dolby Atmos和DTS:X

文章目录 eARC目的更大的带宽更高质量音频支持对象型音频与CEC(Consumer Electronics Control)的兼容性: 适应流媒体发展Dolby AtmosDTS:X高分辨率音频更高的音频位深度和采样率低延迟音频 对象型音频格式独立对象三维定位动态音场适应性和灵…

嵌入式——串行外围设备接口(SPI)

目录 一、初识SPI 1. 介绍 2. 特性 补: 二、物理层 1. SS (Slave Select) 2. SCK (Serial Clock) 3. MOSI (Master Output, Slave Input) 4. MISO (Master Input&#xff0…

虚拟机Windows Server 2016 安装 MySQL8

目录 一、下载MySQL8 1.下载地址: 2.创建my.ini文件 二、安装步骤 第一步:命令窗口 第二步:切换目录 第三步:安装服务 第四步:生成临时密码 第五步:启动服务 第六步: 修改密码 三…

【Linux系统化学习】进程替换

目录 进程程序替换 替换原理 ​编辑替换函数 函数解释 命名理解 函数使用 execl execlp execv execvp 调用其它程序 进程程序替换 替换原理 用fork创建子进程后执行的是和父进程相同的程序(但有可能执行不同的代码分支),子进程往往要调用一种exec函数以执行另一个…

0203-2-输入输出系统

第六章:输入输出系统 I/O系统的功能,模型和接口 I/O系统管理的对象是I/O设备和相应的设备控制器。 I/O系统的基本功能 隐藏物理设备的细节与设备的无关性提高处理机和I/O设备的利用率对I/O设备进行控制确保对设备的正确共享错误处理 I/O软件的层次结…

重写Sylar基于协程的服务器(4、协程调度模块的设计)

重写Sylar基于协程的服务器(4、协程调度模块的设计) 重写Sylar基于协程的服务器系列: 重写Sylar基于协程的服务器(0、搭建开发环境以及项目框架 || 下载编译简化版Sylar) 重写Sylar基于协程的服务器(1、日…

2.03作业

1.请编程实现单向循环链表的头插,头删,尾插,尾删。 2.请编程实现单向循环链表约瑟夫环 约瑟夫环:用循环链表编程实现约瑟夫问题 n个人围成一圈,,从某人开始报数,1,2,......,m,数到…