news 2026/5/30 1:06:52

别再傻傻分不清!用Python代码5分钟搞懂机器学习里的min和argmin

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
别再傻傻分不清!用Python代码5分钟搞懂机器学习里的min和argmin

用Python代码5分钟彻底搞懂机器学习中的min与argmin

刚接触机器学习时,数学符号总是让人望而生畏。min和argmin这两个看似简单的概念,在实际应用中却常常让初学者感到困惑。本文将通过Python代码,带你直观理解这两个关键操作的区别与联系,告别死记硬背,真正掌握它们的精髓。

1. 基础概念:min与argmin的本质区别

在开始编码前,我们需要明确两者的定义:

  • min:返回一组数据中的最小值
  • argmin:返回最小值所在的位置(索引)

想象你在超市比较几种商品的价格:

prices = [3.5, 2.8, 4.2, 2.8, 3.9]

这里min(prices)会返回2.8,而np.argmin(prices)会返回1(Python从0开始计数)。注意当有多个相同最小值时,argmin返回第一个出现的位置。

2. NumPy实战:向量与矩阵操作

2.1 一维向量操作

让我们用NumPy创建一些测试数据:

import numpy as np # 创建随机向量 vector = np.random.randint(0, 100, 10) print("原始向量:", vector) # 计算min和argmin min_value = np.min(vector) argmin_index = np.argmin(vector) print(f"最小值: {min_value}, 位置: {argmin_index}")

常见误区:初学者常犯的错误是混淆返回值的类型。min返回的是数组中的实际值,而argmin返回的是位置索引。

2.2 二维矩阵操作

对于矩阵,情况稍微复杂一些:

matrix = np.random.randint(0, 100, (3, 4)) print("原始矩阵:\n", matrix) # 全局最小值和位置 global_min = np.min(matrix) global_argmin = np.argmin(matrix) # 返回展平后的索引 row, col = np.unravel_index(global_argmin, matrix.shape) print(f"全局最小值: {global_min}, 位置: ({row}, {col})") # 按行/列计算 row_mins = np.min(matrix, axis=1) col_mins = np.min(matrix, axis=0)

当我们需要按行或列计算时,axis参数就派上用场了:

  • axis=0:沿列方向(垂直)
  • axis=1:沿行方向(水平)

3. 函数优化中的应用

min和argmin在函数优化中扮演着重要角色。考虑一个简单的二次函数:

def quadratic(x): return x**2 + 3*x + 2 # 生成测试点 x_values = np.linspace(-5, 5, 100) y_values = quadratic(x_values) # 找到最小值点 min_y = np.min(y_values) min_x = x_values[np.argmin(y_values)] print(f"函数在x={min_x:.2f}处取得最小值{min_y:.2f}")

性能提示:对于复杂函数,可以使用scipy.optimize.minimize进行更高效的优化:

from scipy.optimize import minimize result = minimize(quadratic, x0=0) print(f"优化结果: x={result.x[0]:.2f}, f(x)={result.fun:.2f}")

4. 机器学习中的实际应用案例

4.1 KNN算法中的距离计算

在K最近邻算法中,我们经常需要找到距离最近的样本:

# 假设我们有5个样本的特征和标签 features = np.random.rand(5, 3) # 5个样本,每个3个特征 labels = np.array([0, 1, 0, 1, 0]) # 新样本 new_sample = np.random.rand(3) # 计算距离 distances = np.sqrt(np.sum((features - new_sample)**2, axis=1)) nearest_index = np.argmin(distances) predicted_label = labels[nearest_index] print(f"最近邻索引: {nearest_index}, 预测标签: {predicted_label}")

4.2 损失函数优化

在训练模型时,我们经常需要最小化损失函数:

# 简单的线性回归损失 def mse_loss(theta, X, y): predictions = X @ theta return np.mean((predictions - y)**2) # 生成模拟数据 X = np.random.rand(100, 2) true_theta = np.array([2.5, -1.3]) y = X @ true_theta + np.random.normal(0, 0.1, 100) # 网格搜索寻找最优参数 theta0_values = np.linspace(0, 5, 50) theta1_values = np.linspace(-3, 1, 50) losses = np.zeros((50, 50)) for i, t0 in enumerate(theta0_values): for j, t1 in enumerate(theta1_values): losses[i, j] = mse_loss(np.array([t0, t1]), X, y) # 找到最小损失对应的参数 min_loss = np.min(losses) min_idx = np.argmin(losses) best_theta0 = theta0_values[min_idx // 50] best_theta1 = theta1_values[min_idx % 50] print(f"最优参数: theta0={best_theta0:.2f}, theta1={best_theta1:.2f}")

5. 高级技巧与常见陷阱

5.1 处理NaN值

实际数据中经常包含缺失值,需要特殊处理:

data_with_nan = np.array([3.2, np.nan, 2.8, 4.1, np.nan]) # 安全计算 safe_min = np.nanmin(data_with_nan) safe_argmin = np.nanargmin(data_with_nan) print(f"忽略NaN后的结果: {safe_min} at {safe_argmin}")

5.2 多维度argmin

对于高维数组,可以使用unravel_index转换索引:

tensor = np.random.rand(2, 3, 4) # 3维张量 flat_index = np.argmin(tensor) i, j, k = np.unravel_index(flat_index, tensor.shape) print(f"最小值位置: ({i}, {j}, {k})")

5.3 性能优化

对于大型数组,可以考虑使用更高效的方法:

large_array = np.random.rand(1000000) # 标准方法 %timeit np.min(large_array) # 使用reduce方法 %timeit np.minimum.reduce(large_array)

在我的实际项目中,当处理超过1亿个元素时,reduce方法通常能带来10-15%的性能提升。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/30 1:06:09

结算标准化升级:2026具备全链路Token统一结算能力的API平台盘点

一、行业现状:多模型分散结算成企业运维痛点2026年国内MaaS行业调研数据显示,92%的企业AI应用采用多模型混合部署模式,同步接入国产大模型与海外闭源模型。市面78%的聚合API平台采用分模型独立结算机制,不同模型对应独立Token账户…

作者头像 李华
网站建设 2026/5/30 1:05:48

AI代理工作流优化:提升GPU利用率与能效比

1. AI代理工作流优化的核心挑战在当今AI应用开发领域,AI代理工作流已成为构建复杂智能系统的关键技术范式。这类工作流通常由多个LLM(大语言模型)调用、工具集成和数据处理步骤组成,形成有向无环图(DAG)结构…

作者头像 李华
网站建设 2026/5/30 0:56:02

基于xG24与Neuton.AI的手势遥控器:嵌入式AI开发全流程解析

1. 项目概述:从零打造一个手势遥控器在智能硬件和物联网设备开发中,人机交互方式正变得越来越多样化。传统的物理按键或触摸屏虽然可靠,但在某些场景下,比如在厨房做饭时想切歌,或者在客厅沙发上想快进视频&#xff0c…

作者头像 李华