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

目录
相关文章
|
14天前
|
机器学习/深度学习 数据采集 算法
探索NumPy与机器学习库的集成之路
【4月更文挑战第17天】本文探讨了NumPy在机器学习中的核心作用,它为各类机器学习库提供基础数据处理和数值计算能力。NumPy的线性代数、优化算法和随机数生成等功能,对实现高效模型训练至关重要。scikit-learn等库广泛依赖NumPy进行数据预处理。未来,尽管面临大数据和复杂模型的性能挑战,NumPy与机器学习库的集成将继续深化,推动技术创新。
|
8月前
|
机器学习/深度学习 存储 数据处理
利用NumPy和Pandas进行机器学习数据处理与分析
利用NumPy和Pandas进行机器学习数据处理与分析
|
2月前
|
机器学习/深度学习 存储 搜索推荐
利用机器学习算法改善电商推荐系统的效率
电商行业日益竞争激烈,提升用户体验成为关键。本文将探讨如何利用机器学习算法优化电商推荐系统,通过分析用户行为数据和商品信息,实现个性化推荐,从而提高推荐效率和准确性。
|
28天前
|
机器学习/深度学习 算法 搜索推荐
Machine Learning机器学习之决策树算法 Decision Tree(附Python代码)
Machine Learning机器学习之决策树算法 Decision Tree(附Python代码)
|
2月前
|
机器学习/深度学习 数据采集 算法
解码癌症预测的密码:可解释性机器学习算法SHAP揭示XGBoost模型的预测机制
解码癌症预测的密码:可解释性机器学习算法SHAP揭示XGBoost模型的预测机制
128 0
|
2月前
|
机器学习/深度学习 数据采集 监控
机器学习-特征选择:如何使用递归特征消除算法自动筛选出最优特征?
机器学习-特征选择:如何使用递归特征消除算法自动筛选出最优特征?
77 0
|
2月前
|
机器学习/深度学习 人工智能 算法
探索机器学习中的支持向量机(SVM)算法
【2月更文挑战第20天】 在数据科学与人工智能的领域中,支持向量机(SVM)是一种强大的监督学习算法,它基于统计学习理论中的VC维理论和结构风险最小化原理。本文将深入探讨SVM的核心概念、工作原理以及实际应用案例。我们将透过算法的数学原理,揭示如何利用SVM进行有效的数据分类与回归分析,并讨论其在处理非线性问题时的优势。通过本文,读者将对SVM有更深层次的理解,并能够在实践中应用这一算法解决复杂的数据问题。
21 0
|
3天前
|
机器学习/深度学习 数据采集 算法
Python用逻辑回归、决策树、SVM、XGBoost 算法机器学习预测用户信贷行为数据分析报告
Python用逻辑回归、决策树、SVM、XGBoost 算法机器学习预测用户信贷行为数据分析报告
12 1
|
20天前
|
机器学习/深度学习 自然语言处理 算法
|
1天前
|
机器学习/深度学习 算法 数据挖掘
【Python 机器学习专栏】K-means 聚类算法在 Python 中的实现
【4月更文挑战第30天】K-means 是一种常见的聚类算法,用于将数据集划分为 K 个簇。其基本流程包括初始化簇中心、分配数据点、更新簇中心并重复此过程直到收敛。在 Python 中实现 K-means 包括数据准备、定义距离函数、初始化、迭代和输出结果。虽然算法简单高效,但它需要预先设定 K 值,且对初始点选择敏感,可能陷入局部最优。广泛应用在市场分析、图像分割等场景。理解原理与实现对应用聚类分析至关重要。

热门文章

最新文章