请问L1损失函数的公式和对应的解释是什么?
时间: 2024-05-31 15:09:44 浏览: 194
L1损失函数又叫绝对值损失函数,其公式为:
$ L_{1}(y, \hat{y}) = \sum_{i=1}^{n} |y_{i} - \hat{y}_{i}| $
其中 $y$ 为真实值,$\hat{y}$ 为预测值,$n$ 为样本数量。
L1损失函数的解释是,它是预测值与真实值差异的绝对值之和,用于度量模型的预测误差。相比于L2损失函数,L1损失函数更加关注预测误差较大的样本,因为它的梯度在误差较大的样本处比L2损失函数更大,从而更容易让模型在这些样本上进行调整。此外,L1损失函数对离群点也更加鲁棒,因为它不像L2损失函数那样对误差较大的样本惩罚过重。
相关问题
l1损失函数和l2损失函数各是什么?
L1和L2损失函数都是机器学习和深度学习中常用的代价函数,它们分别对应于不同的正则化技术:
1. **L1损失函数** (也称绝对值损失):它计算预测值和真实值之间的差异的绝对值之和。数学表达式为:`L1(y, y_pred) = ||y - y_pred||_1`。L1损失对大型偏差敏感,因为它鼓励模型结果倾向于稀疏解,对于特征选择有积极作用,可以防止过拟合。
2. **L2损失函数** (也称平方误差损失或二次损失):它计算的是预测值和真实值之间差的平方和,其公式为:`L2(y, y_pred) = ||y - y_pred||_2^2`。L2损失对极端值较不敏感,它鼓励结果更加平滑,常用于线性回归和其他需要最小二乘法求解的问题。
两者的主要区别在于,L1惩罚大的偏差更严厉(因为它只关心偏差的方向而不考虑大小),而L2更重视偏差的精确度(因为它对误差的平方进行加权,使得较大的误差影响更大)。
损失函数类型都有什么
### 不同类型的损失函数及其应用场景
#### 1. 均方误差损失(Mean Squared Error, MSE)
均方误差是最常用的回归问题损失函数之一。通过最小化预测值与实际值之间差的平方和来衡量模型的表现。
数学公式如下:
\[ \text{MSE} = \frac{1}{n}\sum_{i=1}^{n}(y_i-\hat{y}_i)^2 \]
其中 \( n \) 是样本数量,\( y_i \) 表示第 \( i \) 个观测的真实标签,而 \( \hat{y}_i \) 则代表对应的预测输出[^1]。
```python
import numpy as np
def mean_squared_error(y_true, y_pred):
return np.mean((y_true - y_pred)**2)
```
#### 2. 绝对平均误差(Mean Absolute Error, MAE)
绝对平均误差也是一种用于回归任务的度量方式,相比MSE更能抵抗离群点的影响。
定义为:
\[ \text{MAE}=\frac{\sum|y_i-\hat{y}_i|}{N} \]
这里 N 同样指代总的实例数目;其余变量意义不变[^2]。
```python
def mean_absolute_error(y_true, y_pred):
return np.mean(np.abs(y_true - y_pred))
```
#### 3. 二元交叉熵(Binary Cross Entropy)
此损失广泛应用于二分类问题中,特别是逻辑斯蒂回归算法里。其目的是最大化给定类别下观察到的数据概率。
表达式为:
\[ L=-\left[y\cdot\ln(p)+(1-y)\cdot\ln(1-p)\right] \]
这里的 \( p \) 来自于sigmoid激活后的神经网络输出,表示正类别的估计概率;\( y \) 取0或1作为目标标签[^4]。
```python
from scipy.special import expit
def binary_crossentropy(y_true, logits):
probs = expit(logits)
epsilon = 1e-7 # 防止取log时数值溢出
clipped_probs = np.clip(probs, epsilon, 1.-epsilon)
loss = -(y_true * np.log(clipped_probs) +
(1 - y_true) * np.log(1 - clipped_probs)).mean()
return loss
```
#### 4. 多分类交叉熵(Categorical Crossentropy)
当面对超过两个以上的类别时,则会用到多分类版本的交叉熵损失。这有助于处理独热编码形式的目标向量。
计算方法类似于上述二元情况下的扩展版:
\[ CCE=-\sum_k y_k\log(\hat{p}_k), k=1,...K \]
此处 K 表明总共有多少种可能的结果选项。
```python
def categorical_crossentropy(y_true, logits):
probs = softmax(logits, axis=-1)
epsilon = 1e-7
clipped_probs = np.clip(probs, epsilon, 1.-epsilon)
losses = -np.sum(y_true * np.log(clipped_probs), axis=-1).mean()
return losses
def softmax(x, axis=None):
"""Compute the softmax of vector x."""
e_x = np.exp(x - np.max(x,axis=axis,keepdims=True))
return e_x / e_x.sum(axis=axis, keepdims=True)
```
#### 5. Huber Loss
Huber损失结合了MSE和平滑L1的优点,在一定程度内像二次项那样对待较小残差,而对于较大偏差则采取线性增长策略,从而减轻极端值带来的负面影响。
具体来说,
如果 |a|≤δ ,那么 huber(a)=0.5*a²;
否则的话,huber(a)=δ*|a|-0.5*δ²
其中 δ 控制着两种模式切换的位置。
```python
def huber_loss(y_true, y_pred, delta=1.0):
error = y_true - y_pred
abs_error = np.abs(error)
quadratic_part = 0.5*(error**2)
linear_part = delta * (abs_error - 0.5*delta)
result = np.where(abs_error <= delta,
quadratic_part,
linear_part)
return np.mean(result)
```
阅读全文
相关推荐
















