我有一组数据,每个条目有 9 个“特征”(从 1e-3 到 9e3 的正数),我需要使用每个条目的特征从 5 个可能的标签中选择一个条目。
我知道我需要定义一个评分函数,该函数接受特征、对它们进行加权并返回一个数字,该数字反射(reflect)每个标签被赋予这些特征和权重的可能性。损失函数将在输入上凸出:它将返回评分函数的输出与人类提供的标签之间的差异。评分函数的权重矩阵将使用梯度下降法进行优化,使损失最小化。
具体来说,我有一些看起来像这样的东西:
entry 1> (ground-truth label), [0.9, 0.2, 1e-2, 6.853, 0.882 ... 1]
*prediction: label 3* *actually: label 4* *loss = some number, update weights*
entry 2> (ground-truth label), [features 1...9]
*prediction: label 1* *actually: label 1* *loss = 0, don't update weights*
...
entry 80,000> (etc...)
如何选择将这些特征映射到五个可能标签之一的可能性的评分函数?
会不会像:
for (loop through all data)
[features] <dot product> [weights] = prediction
if(prediction near (number))
assign label 1
else if (prediction near (number 2)
assign label 2
else (etc...)
hinge_loss_function(prediction) = loss
[weights] = loss*stepsize
end for
这感觉很不对,但我是梯度下降的新手。关于如何进行多标签分类有什么想法吗?
请您参考如下方法:
你的问题不清楚!为什么?
首先,如果你有两个标签的训练数据,那么你如何设计一个五类分类问题的模型?在训练期间,您的模型不知道其他三个类别是什么,因此在测试期间,它如何预测一个实例属于那些未知的三个类别?
您可以考虑一些无监督分类技术,例如不需要为训练实例提供真实标签的聚类。但是我不确定你的要求是什么!
其次,梯度下降(一种优化算法)不是一种解决分类问题的技术,而是可以用来解决最小化问题。比如说,您设计了一个模型,其中有一个目标函数(包括模型参数)。您可以使用梯度下降来最小化该目标函数以找出最佳模型参数。
我鼓励您阅读关于 gradient descent 的维基文章.如果您有带有真实标签的训练数据,您可以使用任何监督分类模型,例如逻辑回归或 SVM 等,并采用梯度下降技术来找出模型参数。
更新
您提供的算法很接近,但需要进行一些修改。我们可以简单地总结梯度下降学习如下:
我们可以将上述算法转化为更数学化的符号如下。
