损失函数
又称为 目标函数,优化评分函数。
模型传参的两个重要指标之一:
一个是优化器
另一个就是 损失函数
损失函数需要对比的两个参数
y_true: 真实标签。
y_pred: 预测值。
损失函数包括
mean_squared_error
MSE 均方误差
Mean Square Error (MSE)
最基本的损失函数
神经网络计算值(预测值)与标签值的平方误差和
该值越小,模型越准确。
代码:
mean_squared_error(y_true, y_pred)
数学公式:
定义:mean_squared_error:均方误差函数,又称mse,最基本的损失函数
用途:神经网络计算值(预测值)与标签值的平方误差和。
mean_absolute_error
MAE 平均绝对误差
Mean Absolute Error (MAE)
目的:主要用于显著性目标检测。
显著性目标: 当你看到一副图像的时候,重点潜意识关注的对象,而通过该方法可以检测到。
值越小,模型越准确。
代码:
mean_absolute_error(y_true, y_pred)
数学公式:
mean_absolute_percentage_error
MAPE 平均绝对误差百分比
又称mape
样本中不能有0值。
当mape=0时,表示模型完美,而当mape=100时,则表示模型很差,不能使用。
代码:
mean_absolute_percentage_error(y_true, y_pred)
数学公式:
适用 : 对于补货计划来说,我们计算预测时间段
n代表n天。
Symmetric Mean Absolute Percentage Error
SMAPE 对称平均绝对百分比误差
Symmetric Mean Absolute Percentage Error
当真实值有数据等于0,而预测值也等于0时,存在分母0除问题,该公式不可用。
数学公式:
mean_squared_logarithmic_error
代码:
mean_squared_logarithmic_error(y_true, y_pred)
数学公式:
交叉熵损失函数
适合 分类问题
当使用 categorical_crossentropy 损失时,你的目标值应该是分类格式 (即,如果你有 10 个类,每个样本的目标值应该是一个 10 维的向量,这个向量除了表示类别的那个索引为 1,其他均为 0)。
categorical_crossentropy
CE
CE用于多分类
代码
categorical_crossentropy(y_true, y_pred)
数学公式:
CE是一个数值
sparse_categorical_crossentropy
sparse_categorical_crossentropy(y_true, y_pred)
binary_crossentropy
BCE
BCE适用于二分类
代码:
binary_crossentropy(y_true, y_pred)
数学公式:
BCE是一个向量
举例子:
下面是手动配置binart_crossentropy
model.compile(optimizer=optimizers.Adam(lr=args.lr),
loss=['binary_crossentropy'],
metrics=["categorical_accuracy"]
)
hinge
hinge loss
折页损失函数或者铰链损失函数,最著名的应用是作为SVM的目标函数。
代码
hinge(y_true, y_pred)
数学公式
ypred的值在 -1到1之间即可
不鼓励 |y|>1,即让某个样本能够正确分类就可
当样本与分割线的距离超过1时并不会有任何奖励,目的在于使分类器更专注于整体的分类误差。
squared_hinge
squared_hinge:平方铰链损失函数
代码
squared_hinge(y_true, y_pred)
数学公式
categorical_hinge
squared_hinge:平方铰链损失函数
categorical_hinge(y_true, y_pred)
数学公式
logcosh
logcosh(y_true, y_pred)
预测误差的双曲余弦的对数。
kullback_leibler_divergence
kullback_leibler_divergence(y_true, y_pred)
poisson
poisson(y_true, y_pred)
cosine_proximity
cosine_proximity(y_true, y_pred)
准确率
常用准确率
accuracy
weighted accuracy
SMAPE 权重 据对平方误差百分比
Yt是 t 时间步的真实值,Y 尖是[公式]时间步的预测值,N序列总长度。
不常见指标
MASE
Mean Absolute Scaled Error
m就是季节性的天数
如果是季节性,就可以看作 预测的季节 和 真实季节的差距。
通俗讲,就是之前是1天的实际数据 和 预测数据做差,
现在是 一个 季度 的 实际 和 预测数据,对比上一个季度的百分比。
import numpy as np
def naive_forecast(y:np.array, season:int=1):
"naive forecast: season-ahead step forecast, shift by season step ahead"
return y[:-season]
def mae(y:np.array, ypred:np.array):
"mean absolute error"
return np.mean(np.abs(y - ypred))
def mase(y:np.array, ypred:np.array, season:int=1):
# Mean Absolute Value
return mae(y, ypred) / mae(y[season:], naive_forecast(y, season))
RMSSE
Root Mean Square Scaled Error
h 是预测外推期,
N 是历史时间序列总长度。
通俗讲,就是 100个历史数据做预测,要预测出10个。
这10个真实值 和 预测值 做差 的平方
比上
100个历史数据 和 预测值 做差 的平方。
def mse(y:np.array, ypred:np.array):
return np.mean(np.square(y - ypred))
def rmsse(y:np.array, ypred:np.array, season: int=1):
return np.sqrt(mse(y, ypred) / mse(y[season:], naive_forecast(y, season)))
参考链接:
https://zhuanlan.zhihu.com/p/355530331
https://keras.io/zh/losses/#mean_squared_logarithmic_error
https://zhuanlan.zhihu.com/p/48078990