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

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

8090eecd4fe3d2bfb5bb236e9633ba2.png

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 都发挥着至关重要的作用。

目录
相关文章
|
9月前
|
人工智能 自然语言处理 数据挖掘
云上玩转Qwen3系列之三:PAI-LangStudio x Hologres构建ChatBI数据分析Agent应用
PAI-LangStudio 和 Qwen3 构建基于 MCP 协议的 Hologres ChatBI 智能 Agent 应用,通过将 Agent、MCP Server 等技术和阿里最新的推理模型 Qwen3 编排在一个应用流中,为大模型提供了 MCP+OLAP 的智能数据分析能力,使用自然语言即可实现 OLAP 数据分析的查询效果,减少了幻觉。开发者可以基于该模板进行灵活扩展和二次开发,以满足特定场景的需求。
|
5月前
|
机器学习/深度学习 数据采集 算法
量子机器学习入门:三种数据编码方法对比与应用
在量子机器学习中,数据编码方式决定了量子模型如何理解和处理信息。本文详解角度编码、振幅编码与基础编码三种方法,分析其原理、实现及适用场景,帮助读者选择最适合的编码策略,提升量子模型性能。
432 8
|
6月前
|
机器学习/深度学习 人工智能 自然语言处理
Java 大视界 -- Java 大数据机器学习模型在自然语言生成中的可控性研究与应用(229)
本文深入探讨Java大数据与机器学习在自然语言生成(NLG)中的可控性研究,分析当前生成模型面临的“失控”挑战,如数据噪声、标注偏差及黑盒模型信任问题,提出Java技术在数据清洗、异构框架融合与生态工具链中的关键作用。通过条件注入、强化学习与模型融合等策略,实现文本生成的精准控制,并结合网易新闻与蚂蚁集团的实战案例,展示Java在提升生成效率与合规性方面的卓越能力,为金融、法律等强监管领域提供技术参考。
|
6月前
|
机器学习/深度学习 算法 Java
Java 大视界 -- Java 大数据机器学习模型在生物信息学基因功能预测中的优化与应用(223)
本文探讨了Java大数据与机器学习模型在生物信息学中基因功能预测的优化与应用。通过高效的数据处理能力和智能算法,提升基因功能预测的准确性与效率,助力医学与农业发展。
|
6月前
|
机器学习/深度学习 搜索推荐 数据可视化
Java 大视界 -- Java 大数据机器学习模型在电商用户流失预测与留存策略制定中的应用(217)
本文探讨 Java 大数据与机器学习在电商用户流失预测与留存策略中的应用。通过构建高精度预测模型与动态分层策略,助力企业提前识别流失用户、精准触达,实现用户留存率与商业价值双提升,为电商应对用户流失提供技术新思路。
|
6月前
|
机器学习/深度学习 存储 分布式计算
Java 大视界 --Java 大数据机器学习模型在金融风险压力测试中的应用与验证(211)
本文探讨了Java大数据与机器学习模型在金融风险压力测试中的创新应用。通过多源数据采集、模型构建与优化,结合随机森林、LSTM等算法,实现信用风险动态评估、市场极端场景模拟与操作风险预警。案例分析展示了花旗银行与蚂蚁集团的智能风控实践,验证了技术在提升风险识别效率与降低金融风险损失方面的显著成效。
|
9月前
|
机器学习/深度学习 数据采集 人工智能
智能嗅探AJAX触发:机器学习在动态渲染中的创新应用
随着Web技术发展,动态加载数据的网站(如今日头条)对传统爬虫提出新挑战:初始HTML无完整数据、请求路径动态生成且易触发反爬策略。本文以爬取“AI”相关新闻为例,探讨了通过浏览器自动化、抓包分析和静态逆向接口等方法采集数据的局限性,并提出借助机器学习智能识别AJAX触发点的解决方案。通过特征提取与模型训练,爬虫可自动推测数据接口路径并高效采集。代码实现展示了如何模拟AJAX请求获取新闻标题、简介、作者和时间,并分类存储。未来,智能化将成为采集技术的发展趋势。
238 1
智能嗅探AJAX触发:机器学习在动态渲染中的创新应用
|
7月前
|
机器学习/深度学习 分布式计算 Java
Java 大视界 -- Java 大数据机器学习模型在遥感图像土地利用分类中的优化与应用(199)
本文探讨了Java大数据与机器学习模型在遥感图像土地利用分类中的优化与应用。面对传统方法效率低、精度差的问题,结合Hadoop、Spark与深度学习框架,实现了高效、精准的分类。通过实际案例展示了Java在数据处理、模型融合与参数调优中的强大能力,推动遥感图像分类迈向新高度。
|
7月前
|
机器学习/深度学习 存储 Java
Java 大视界 -- Java 大数据机器学习模型在游戏用户行为分析与游戏平衡优化中的应用(190)
本文探讨了Java大数据与机器学习模型在游戏用户行为分析及游戏平衡优化中的应用。通过数据采集、预处理与聚类分析,开发者可深入洞察玩家行为特征,构建个性化运营策略。同时,利用回归模型优化游戏数值与付费机制,提升游戏公平性与用户体验。
|
机器学习/深度学习 数据采集 JSON
Pandas数据应用:机器学习预处理
本文介绍如何使用Pandas进行机器学习数据预处理,涵盖数据加载、缺失值处理、类型转换、标准化与归一化及分类变量编码等内容。常见问题包括文件路径错误、编码不正确、数据类型不符、缺失值处理不当等。通过代码案例详细解释每一步骤,并提供解决方案,确保数据质量,提升模型性能。
509 88