建模之常见损失函数(Keras, Sklearn, R)

序号 概况 表达式 场景 sklearn keras R
1 交叉熵 H ( p , q ) = ∑ x ( p ( x ) × log ( 1 q ( x ) ) ) = ∫ x P ( x ) × log ( Q ( x ) ) d x H(p, q)=\sum_x(p(x) \times \text{log}(\frac{1}{q(x)})) = \int_x P(x) \times \text{log}(Q(x))\mathrm{d}x H(p,q)=x(p(x)×log(q(x)1))=xP(x)×log(Q(x))dx
− log ( p ( y ∣ y ^ ) ) = − ( y × log ( p ^ ) + ( 1 − y ) × log ( 1 − p ^ ) ) -\text{log}(p(y\mid\hat{y})) = -(y \times \text{log}(\hat{p}) + (1 - y) \times \text{log}(1 - \hat{p})) log(p(yy^))=(y×log(p^)+(1y)×log(1p^))
分类 sklearn.metrics.log_loss keras.losses.BinaryCrossentropy(class)
keras.losses.binary_crossentropy(function)
binary_crossentropy
LogLoss
2 多分类:one-hot 同上 keras.losses.CategoricalCrossentropy(class)
keras.losses.categorical_crossentropy(function)
categorical_crossentropy
MultiLogLoss
3 同上 keras.losses.SparseCategoricalCrossentropy(class)
keras.losses.sparse_categorical_crossentropy(function)
sparse_categorical_crossentropy
4 keras: loss = y ^ − y × log ( y ^ ) \text{loss} = \hat{y} - y \times \text{log}(\hat{y}) loss=y^y×log(y^)
Sklearn: loss = 2 × ( y × log ( y y ^ ) + y ^ − y ) ‾ \text{loss} = \overline{2 \times (y \times \text{log}(\frac{y}{\hat{y}}) + \hat{y} - y)} loss=
### 均方差损失函数 (MSE) 与交叉熵损失函数 (CrossEntropy) #### 定义 均方误差(Mean Squared Error, MSE)是一种衡量预测值与真实值之间差异的常见方法。具体来说,它计算的是预测值和实际观测值之间的平均平方差[^1]。 对于二分类或多分类问题,交叉熵损失函数则更为适用。该函数通过测量两个概率分布间的距离来评估模型性能;其中一个分布代表数据的真实标签,另一个则是由模型给出的概率估计[^2]。 #### 数学表达式 - **MSE**: \[ \text{MSE} = \frac{1}{n}\sum_{i=1}^{n}(y_i-\hat{y}_i)^2 \] 其中 \( y_i \) 表示第 i 个样本的实际输出,\( \hat{y}_i \) 是对应的预测输出,而 n 则表示总的样本数量。 - **Binary Cross Entropy** (适用于二元分类) \[ L(y,\hat{y})=-\left[y\log(\hat{y})+(1-y)\log(1-\hat{y})\right]\] 这里 \( y \in {0,1} \),即为真实的类别标签;\( \hat{y} \) 属于区间 [0,1], 表明属于正类别的可能性大小。 - **Categorical Cross Entropy** (用于多分类情况) 如果存在 K 类,则可以写成如下形式: \[L=\sum _{{k=1}}^{K}-t_k\ln(p_k),\quad {\mbox{where }}p=(p_1,...,p_K){\mbox{ and }}t=(t_1,...,t_K).\] 此处 \( t_k \) 是 one-hot 编码后的真值向量,\( p_k \) 对应着预测得到的概率向量中的各个分量[^3]. #### 应用场景对比 - 当处理回归任务时,比如房价预测、股票价格走势分析等连续数值型变量建模的情况下,更倾向于选用 MSE 或者其他类似的度量方式作为评价标准。 - 而面对分类问题尤其是涉及到多个互斥选项的选择时(如图像识别、自然语言处理等领域内的文本分类),由于其能够更好地反映不同类别间的信息差距并促进更快收敛速度的缘故,因此往往优先考虑使用交叉熵损失函数来进行训练过程中的优化工作[^4]. 此外,在某些特殊情况下即使同样是做分类任务也可能因为特定需求偏向某一方。例如当遇到极度不平衡的数据集时可能需要调整权重使得两种类型的错误成本不对称从而影响最终选择哪种损失函数更加合适[^5]. ```python import numpy as np from sklearn.metrics import mean_squared_error from tensorflow.keras.losses import BinaryCrossentropy, CategoricalCrossentropy # Example of calculating losses using Python code snippets: def mse_loss(true_values, predicted_values): """Calculate Mean Squared Error loss.""" return mean_squared_error(true_values, predicted_values) binary_cross_entropy = BinaryCrossentropy() categorical_cross_entropy = CategoricalCrossentropy() true_binary_labels = np.array([0., 1.]) predicted_probabilities_for_binaries = np.array([[0.9], [0.1]]) print(f"MSE Loss: {mse_loss(true_binary_labels, predicted_probabilities_for_binaries.flatten()):.4f}") print(f"Binary Cross Entropy Loss: {binary_cross_entropy(true_binary_labels, predicted_probabilities_for_binaries).numpy():.4f}") true_categorical_labels = np.array([[1., 0., 0.], [0., 1., 0.]]) # One hot encoded labels. predicted_class_probs = np.array([[0.8, 0.1, 0.1], [0.2, 0.7, 0.1]]) print(f"Categorical Cross Entropy Loss: {categorical_cross_entropy(true_categorical_labels, predicted_class_probs).numpy():.4f}") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值