Argmax 是您在应用机器学习中可能会遇到的数学函数。
例如,您可能会在用于描述算法的研究论文中看到“ argmax ”或“ arg max ”。您可能还会被指示在算法实现中使用 argmax 函数。
这可能是您第一次遇到 argmax 函数,您可能想知道它是什么以及它是如何工作的。
1. 什么是 Argmax?
Argmax是一个数学函数。
它通常应用于另一个接受参数的函数。例如,给定一个接受参数x的函数g() ,该函数的argmax操作将描述如下:
- 结果 = argmax(g(x))
argmax函数返回目标函数的一个或多个参数 ( arg ),该参数从目标函数返回最大 ( max ) 值。
考虑以下示例,其中g(x)计算为x值的平方,输入值 ( x ) 的域或范围限制为 1 到 5 之间的整数:
- g(1) = 1^2 = 1
- g(2) = 2^2 = 4
- g(3) = 3^2 = 9
- g(4) = 4^2 = 16
- g(5) = 5^2 = 25
我们可以直观地看到函数g(x)的 argmax 为5。
2. Argmax如何用于机器学习?
在应用机器学习中,您将遇到的使用 argmax 的最常见情况是查找导致最大值的数组的索引。
回想一下,数组是一个列表或数字向量。
多类别分类模型通常会预测概率向量(或类概率值),每个类别标签都有一个概率。概率表示样本属于每个类别标签的可能性。
对预测概率进行排序,使得索引 0 处的预测概率属于第一类,索引 1 处的预测概率属于第二类,依此类推
通常,对于多类分类问题,需要从一组预测概率中进行单类标签预测。
这种从预测概率向量到类标签的转换最常使用 argmax 操作进行描述,并且最常使用 argmax 函数实现。
让我们用一个例子来具体说明。
考虑一个包含三个类别的多类别分类问题:“红色”、“蓝色”和“绿色”。类标签映射到整数值以进行建模,如下所示:
- 红色 = 0
- 蓝色 = 1
- 绿色 = 2
每个类别标签整数值映射到一个 3 元素向量的索引,该索引可以由指定示例属于每个类别的可能性的模型预测。
考虑一个模型对输入样本做出了一个预测并预测了以下概率向量:
- yhat = [0.4, 0.5, 0.1]
我们可以看到该示例有 40% 的概率属于红色,有 50% 的概率属于蓝色,有 10% 的概率属于绿色。
- arg max yhat = “蓝色”
3. 如何在 Python 中实现 Argmax
# argmax function
def argmax(vector):
index, value = 0, vector[0]
for i,v in enumerate(vector):
if v > value:
index, value = i,v
return index
# define vector
vector = [0.4, 0.5, 0.1]
# get argmax
result = argmax(vector)
print('arg max of %s: %d' % (vector, result))
arg max of [0.4, 0.5, 0.1]: 1
4. Argmax 与 NumPy
值得庆幸的是, NumPy 库提供了argmax() 函数的内置版本。
这是您应该在实践中使用的版本。
下面的示例演示了相同概率向量上的argmax() NumPy 函数。
# numpy implementation of argmax
from numpy import argmax
# define vector
vector = [0.4, 0.5, 0.1]
# get argmax
result = argmax(vector)
print('arg max of %s: %d' % (vector, result))
正如预期的那样,运行该示例会打印索引 1。
arg max of [0.4, 0.5, 0.1]: 1
您更有可能拥有多个样本的预测概率集合。
这将存储为一个矩阵,其中包含预测概率的行,每列代表一个类标签。argmax 在该矩阵上的期望结果将是一个向量,其中每行预测都有一个索引(或类标签整数)。
这可以通过设置“ axis ”参数使用argmax() NumPy 函数来实现。默认情况下,将为整个矩阵计算 argmax,返回单个数字。相反,我们可以将轴值设置为 1,并为每行数据计算跨列的 argmax。
下面的示例使用包含三个类别标签的四行预测概率的矩阵来演示这一点。
# numpy implementation of argmax
from numpy import argmax
from numpy import asarray
# define vector
probs = asarray([[0.4, 0.5, 0.1], [0.0, 0.0, 1.0], [0.9, 0.0, 0.1], [0.3, 0.3, 0.4]])
print(probs.shape)
# get argmax
result = argmax(probs, axis=1)
print(result)
运行示例首先打印预测概率矩阵的形状,确认我们有四行,每行三列。
然后计算矩阵的 argmax 并将其打印为向量,显示四个值。这就是我们所期望的,其中每一行都会以最大的概率产生一个 argmax 值或索引。
(4, 3)
[1 2 0 2]
具体来说,您了解到:
- Argmax 是一种从目标函数中找到给出最大值的参数的操作。
- Argmax 在机器学习中最常用于寻找具有最大预测概率的类。
- Argmax 可以手动实现,尽管在实践中首选 argmax() NumPy 函数。
参考:What Is Argmax in Machine Learning? - MachineLearningMastery.com