铰链损失#
- sklearn.metrics.hinge_loss(y_true, pred_decision, *, labels=None, sample_weight=None)[source]#
平均合页损失(非正则化)。
在二元分类情况下,假设 y_true 中的标签用 +1 和 -1 编码,当预测错误时,
margin = y_true * pred_decision
始终为负(因为符号不同),这意味着1 - margin
始终大于 1。因此,累积合页损失是分类器犯错次数的上限。在多分类情况下,该函数期望 y_true 中包含所有标签,或者提供一个可选的 labels 参数,其中包含所有标签。多标签余量根据 Crammer-Singer 方法计算。与二元情况一样,累积合页损失是分类器犯错次数的上限。
更多信息请阅读 用户指南。
- 参数:
- y_truearray-like 形状为 (n_samples,) 的数组
真实目标,由两个值的整数构成。正标签必须大于负标签。
- pred_decisionarray-like 形状为 (n_samples,) 或 (n_samples, n_classes) 的数组
预测决策,由 decision_function 输出(浮点数)。
- labelsarray-like,默认为 None
包含问题的所有标签。用于多分类合页损失。
- sample_weightarray-like 形状为 (n_samples,) 的数组,默认为 None
样本权重。
- 返回:
- lossfloat
平均合页损失。
参考文献
[1][2]Koby Crammer, Yoram Singer. On the Algorithmic Implementation of Multiclass Kernel-based Vector Machines. Journal of Machine Learning Research 2, (2001), 265-292.
示例
>>> from sklearn import svm >>> from sklearn.metrics import hinge_loss >>> X = [[0], [1]] >>> y = [-1, 1] >>> est = svm.LinearSVC(random_state=0) >>> est.fit(X, y) LinearSVC(random_state=0) >>> pred_decision = est.decision_function([[-2], [3], [0.5]]) >>> pred_decision array([-2.18..., 2.36..., 0.09...]) >>> hinge_loss([-1, 1, 1], pred_decision) np.float64(0.30...)
多类别情况
>>> import numpy as np >>> X = np.array([[0], [1], [2], [3]]) >>> Y = np.array([0, 1, 2, 3]) >>> labels = np.array([0, 1, 2, 3]) >>> est = svm.LinearSVC() >>> est.fit(X, Y) LinearSVC() >>> pred_decision = est.decision_function([[-1], [2], [3]]) >>> y_true = [0, 2, 3] >>> hinge_loss(y_true, pred_decision, labels=labels) np.float64(0.56...)
图库示例#
使用不同的 SVM 核绘制分类边界