1 损失函数
我们先用sklearn生成一个多标签分类数据集。
from sklearn.datasets import make_multilabel_classification
X, y = make_multilabel_classification(n_samples=1000,
n_features=10,
n_classes=3,
n_labels=2,
random_state=1)
print(X.shape, y.shape)
看一下标签长啥样。
每一行都是0、1标签,1可能有多个,这就是多标签了。
由于仍然是二分类(标签只有0和1),所以激活函数用Sigmoid(对输出的每一个维度用Sigmoid)。这个时候损失函数就是BCELoss。
如果是普通的二分类,Sigmoid的输出是一个值。用 N N N表示样本数量, p n p_n pn表示预测第 n n n个样本为正例的概率, y n y_n yn表示第 n n n个样本的标签,则BCELoss计算公式为:
l o s s = − 1 N ∑ n = 1 N y n × l o g ( p n ) + ( 1 − y n ) × l o g ( 1 − p n ) loss=-\frac{1}{N}\sum_{n=1}^{N}y_n×log(p_n)+(1-y_n)×log(1-p_n) loss=−N1n=1∑