均方差损失函数(Mean Squared Error,MSE)是衡量预测值与真实值之间差异的损失函数,常用于回归任务中。MSE的计算公式如下:
MSE = (1/n) * Σ(i - yi)^2
其中,MSE表示均方差损失函数,n表示样本数量,i表示第i个样本预测值,yi表示真实值,(i - yi)^2表示预测值与真实值之间的平方差。
具体计算步骤如下:
二、平均绝对误差
平均绝对误差(Mean Absolute Error,MAE)衡量预测值与真实值之间差异的指标,用于评估回归模型的性能。计算MAE的公式如下:
MAE = (1/n) * Σ|i - yi|
其中,MAE表示平均绝对误差,n表示样本数量,i表示第i个样本预测值,yi表示真实值,|i - yi|表示预测值与真实值之间的绝对差异。
具体计算步骤是:
三、均方根误差
均方根误差(Root Mean Squared Error,RMSE)衡量预测值与真实值之间差异的指标,常用于回归任务中。RMSE是MSE的平方根。
RMSE的计算公式如下:
RMSE = sqrt((1/n) * Σ(i - yi)^2)
其中,RMSE表示均方根误差,n表示样本数量,i表示第i个样本预测值,yi表示真实值,(i - yi)^2表示预测值与真实值之间的平方差。
具体计算步骤如下:
四、二分类交叉熵
二分类交叉熵(Binary Cross-Entropy)通常用于二分类任务中,用于衡量预测值与真实值之间的差异。
对于二分类问题,假设有两个类别,通常用0和1来表示。对于每个样本,真实值(标签)可以是0或1,而预测值通常是一个介于0和1之间的概率值,表示模型对样本属于正类(1)的置信度。
二分类交叉熵的计算公式如下:
Binary Cross-Entropy = -[y * log(p) + (1 - y) * log(1 - p)]
其中,y表示真实值(标签),p表示预测值(模型输出的概率值),log表示自然对数。
具体计算步骤如下:
五、 多分类交叉熵
交叉熵(Cross-Entropy)用于分类问题中,包括多分类和二分类任务。
对于多分类问题,假设有C个类别,每个样本的真实标签可以表示为一个C维的向量,其中只有一个元素为1,其余元素为0,表示该样本属于对应的类别。而预测值通常是一个C维的概率向量,表示模型对样本属于各个类别的概率分布。
交叉熵的计算公式如下:
Cross-Entropy = -Σ(y * log(p))
其中,y表示真实标签向量,p表示预测概率向量,log表示自然对数,Σ表示对所有类别的求和。
具体计算步骤如下:
六、合页损失
合页损失(Hinge Loss)通常用于支持向量机(Support Vector Machine,SVM)等机器学习算法中。它主要用于处理二分类问题,并鼓励模型在正确分类的情况下使得预测值与真实值之间的差异尽可能大。
合页损失的计算公式如下:
Hinge Loss = max(0, 1 - y * f(x))
其中,y表示真实标签(可以取值为-1或1),f(x)表示模型的预测值(通常为样本x的线性函数输出,也称为决策函数)。
具体计算步骤如下:
如果预测值与真实值之间的乘积大于等于1,合页损失为0,表示模型对该样本分类正确,不会产生损失。如果乘积小于1,合页损失为非零值,表示模型对该样本分类错误,损失会随着乘积的距离逐渐增加。
七、KL散度
KL散度(Kullback-Leibler Divergence),也称为相对熵(Relative Entropy),是一种用于衡量两个概率分布之间差异的指标。KL散度常被用于比较两个概率分布之间的相似性或者衡量模型预测分布与真实分布之间的差异。
假设有两个离散概率分布P和Q,KL散度的计算公式如下:
KL(P || Q) = Σ P(i) * log(P(i)/Q(i))
其中,P(i)和Q(i)分别表示P和Q在第i个事件上的概率。
具体计算步骤如下:
KL散度的值越大,表示两个概率分布之间的差异越大,而KL散度为0表示两个概率分布完全相同。
#所有预测值和真实值之差的平方和,再取平均(MSE)
import numpy as np
def mean_square_error(y_true,y_pred):
square_error=(y_true-y_pred)**2
total_loss=np.sum(suqare_error)
return total_loss/2*y_true.size(0)
#平均绝对误差(MAE)所有样本预测值和真实值之差的绝对值,再取平均
#相对于mse,可以应对离群点,mse取平方会将损失放大
def MAE(y_true,y_pred):
error=abs(y_true,y_pred)
total_loss=np.sum(error)
return total_loss/y_true.size(0)
#均方根误差,相对于均方误差,该方式可以不惩罚更大的错误
def rmse(y_true,y_pred):
error=(y_true-y_pred)**2
total_loss=np.sum(error)/y_true.size(0)
return np.sqrt(total_loss)
#二元交叉熵
def bce(y_true,y_pred):
ce_loss=y_true*np.log(y_pred)+(1-y_true)*np.log(1-y_pred)
total_loss=np.sum(ce_loss)
return -total_loss/y_true.size(0)
#交叉熵
def ce(y_true,y_pred):
ce_loss=y_true*np.log(y_pred)
total_loss=np.sum(ce_loss)
return -total_loss/y_true.size(0)
#Hinge Loss 合页损失
#惩罚分类错误和分类不自信的样本(y_true为1/-1)
def hinge_loss(y_true,y_pred):
error=np.sum(np.max(0,1-y_true*y_pred))
return error/y_true.size(0)
#kl散度
def kl(y,y_pred):
error=np.sum(y*np.log(y/y_pred))
return error