损失函数是用来干嘛的
时间: 2024-12-28 18:22:49 浏览: 11
### 损失函数在机器学习中的作用
损失函数在机器学习中起着核心作用,作为评估模型预测值与实际目标值之间差异的标准。通过量化这种差异,损失函数不仅指导了模型参数的调整方向,还充当了优化过程的核心依据[^2]。
具体来说,在有监督的学习框架下,每一个训练样本都会计算出一个误差值,这些误差构成了整体的成本函数的一部分。为了使模型能够更好地拟合数据并具备良好的泛化能力,通常会利用诸如梯度下降这样的优化方法来最小化由损失函数定义的整体误差[^1]。
#### 应用场景
根据不同类型的机器学习任务,会选择不同类型和形式的损失函数:
- **回归问题**:当面对连续数值型变量时,常用的损失函数包括均方误差(MSE),它简单直观地测量预测值与真实值之间的平方差;还有Huber损失,后者对于异常点更加鲁棒。
```python
import numpy as np
def mean_squared_error(y_true, y_pred):
return np.mean((y_true - y_pred)**2)
def huber_loss(y_true, y_pred, delta=1.0):
error = y_true - y_pred
is_small_error = np.abs(error) <= delta
squared_loss = np.square(error)/2.0
linear_loss = delta * (np.abs(error) - delta/2.0)
return np.where(is_small_error, squared_loss, linear_loss).mean()
```
- **分类问题**:针对离散类别标签的任务,则更多依赖于交叉熵损失及其变种(如二元交叉熵)。这类损失函数特别适用于概率分布间的比较,并能有效促进多类别的区分度提升。
```python
from scipy.special import softmax
def binary_cross_entropy(y_true, y_pred):
epsilon = 1e-15
y_pred_clipped = np.clip(y_pred, epsilon, 1.-epsilon)
loss = -(y_true*np.log(y_pred_clipped)+(1-y_true)*np.log(1-y_pred_clipped))
return np.mean(loss)
def categorical_cross_entropy(y_true, y_pred):
predictions = softmax(y_pred, axis=-1)
losses = -np.sum(y_true * np.log(predictions), axis=-1)
return np.mean(losses)
```
阅读全文