SVM和LR的损失函数的区别

SVM与LR权重调整解析

https://zhuanlan.zhihu.com/p/28036014

关于SVM有一句话是说距离超平面较远的点直接为0,这个意思是说分类正确的为0;

关于LR有一句话是说减小距离较远的点的权重,是指(1-yi)和yi这个式子,距离较远则表示分类越正确,1-yi和yi越接近0;

总之:lr 采用的交叉熵 loss 和 svm 采用的 hinge loss function 思想都是增加对分类影响较大点的权重,减少那些与分类相关不大点的权重

### 支持向量机 SVM损失函数 Hinge Loss 数学原理 支持向量机(SVM)确实具备一种特定形式的损失函数,称为 **Hinge Loss**。这种损失函数主要用于衡量模型预测值与真实标签之间的误差,并通过优化目标最小化这一误差来提升分类性能。 #### 1. Hinge Loss 定义 对于一个给定数据点 \( (x_i, y_i) \),其中 \( x_i \) 是特征向量,\( y_i \in \{-1, +1\} \) 表示类别标签,SVM 的 Hinge Loss 被定义为: \[ L(y_i, f(x_i)) = \max(0, 1 - y_i f(x_i)) \] 这里,\( f(x_i) = w^T x_i + b \) 是 SVM 的线性决策函数[^3]。如果预测值 \( f(x_i) \) 真实标签 \( y_i \) 符合条件 \( y_i f(x_i) \geq 1 \),那么该点被正确分类且位于边界之外,此时损失为零;反之,则会产生正数的惩罚项。 #### 2. 几何意义 从几何角度来看,Hinge Loss 实际上反映了样本到分离超平面的距离是否满足一定的安全边际(Margin)。具体来说: - 当某个样本点落在正确的一侧并超出 Margin 边界时 (\( y_i f(x_i) > 1 \)),它不会贡献任何额外的损失; - 如果样本点靠近甚至跨越了 Margin 或者错误地分配到了另一侧 (\( y_i f(x_i) < 1 \)),则会受到不同程度的惩罚,这促使算法调整权重参数以减少此类情况的发生。 #### 3. 正则化项的作用 除了基本的 Hinge Loss 外,在实际应用中通常还会加入 L2 正则化项来防止过拟合现象发生。完整的优化目标可以表示如下: \[ \min_{w,b} \frac{1}{n}\sum^n_{i=1} \max(0, 1-y_if(x_i)) + \lambda \|w\|^2_2 \] 这里的第二部分就是所谓的正则化项 \( \lambda \|w\|^2_2 \)[^4],用于控制模型复杂度,平衡泛化能力训练集表现之间关系。 #### 4. 总结 综上所述,虽然传统意义上认为 SVM 更关注于寻找最佳分割面而非显式的概率估计过程,但它依然依赖于某种形式的目标函数来进行迭代求解——这就是包含了 Hinge Loss 及相应约束条件的整体框架结构。通过对这些组件的理解可以帮助我们更好地掌握 SVM 工作机制及其背后理论依据。 ```python import torch from torch import nn, optim class SimpleSVM(nn.Module): def __init__(self, input_dim): super(SimpleSVM, self).__init__() self.linear = nn.Linear(input_dim, 1) def forward(self, x): return self.linear(x).squeeze() # 假设 X_train y_train 已经准备好 model = SimpleSVM(input_dim=X_train.shape[1]) optimizer = optim.SGD(model.parameters(), lr=0.01) C = 0.1 for epoch in range(epochs): for i, x in enumerate(X_train): y = y_train[i].float() # 清除梯度 optimizer.zero_grad() # 计算输出 output = model(x.float()) # 计算铰链损失 hinge_loss = torch.clamp(1 - y * output, min=0) # 加入正则化项 l2_norm = sum(param.pow(2).sum() for param in model.parameters()) total_loss = hinge_loss + C * l2_norm # 后向传播更新参数 total_loss.backward() optimizer.step() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值