根据文档,可以为SGDClassifier
指定不同的损失函数。据我所知,log loss
是一种cross-entropy
损失函数,理论上可以处理软标签,即以某些概率[0,1]给出的标签。
问题是:是否可以直接使用带有log loss
函数的SGDClassifier
来处理带软标签的分类问题?如果不能——如何使用scikit-learn解决这个任务(在软标签上的线性分类)?
更新:
由于target
的标记方式和问题的性质,硬标签无法取得好的结果。但这仍然是一个分类问题(不是回归),我希望保留prediction
的概率解释,因此回归方法也不适用。交叉熵损失函数可以自然处理target
中的软标签。似乎scikit-learn中所有线性分类器的损失函数只能处理硬标签。
所以问题可能是:
如何为SGDClassifier
指定自己的损失函数,例如。看起来scikit-learn
在这里没有采用模块化方法,需要在其源码中进行一些更改
回答:
根据文档,
‘log’损失提供逻辑回归,这是一种概率分类器。
一般来说,损失函数的形式为Loss( prediction, target )
,其中prediction
是模型的输出,target
是真实值。在逻辑回归的情况下,prediction
是(0,1)
上的值(即“软标签”),而target
是0
或1
(即“硬标签”)。
所以回答你的问题,取决于你是指prediction
还是target
。一般来说,标签的形式(“硬”或“软”)由选择的prediction
算法和手头target
的数据决定。
如果你的数据有“硬”标签,并且你希望模型输出“软”标签(可以设定阈值得到“硬”标签),那么是的,逻辑回归属于这一类别。
如果你的数据有“软”标签,那么你需要选择一个阈值将它们转换为“硬”标签,然后使用典型的分类方法(即逻辑回归)。否则,你可以使用回归方法,其中模型被拟合以预测“软”目标。在后一种方法中,你的模型可能会给出(0,1)
之外的值,这需要处理。