机器学习中常用的metrics

0.关于TP、TN、FP、FN

TP:预测结果为positive,实际也为positive

TN:预测为negative,实际也为negative

FP:预测结果为positive,实际为negative

FN:预测结果为negative,实际positive

1.分类问题

1.1Accuracy

分类正确的数量除以总数。最简单最直观的metric,可用于均衡数据集的二分类问题。但是对于非均衡比例极端的二分类数据集,则毫无意义。

另一种计算方式:
A c c u r a c y S c o r e = ( T P + T N ) / ( T P + T N + F P + F N ) Accuracy Score = (TP+TN)/(TP+TN+FP+FN) AccuracyScore=(TP+TN)/(TP+TN+FP+FN)

1.2Precision(P)

1.2.1二分类中的precision

所有预测结果为positive中真实值也是positive所占的比例

P r e c i s i o n = T P / ( T P + F P ) Precision = TP/(TP+FP) Precision=TP/(TP+FP)

1.2.2Precision at k (P@k):多分类中的precision

宏平均精确度(Macro averaged precision)、微平均精确度(Micro averaged precision)和加权精确度(Weighted precision)。

  • 宏平均精确度:对所有类别分别计算精确度,然后对它们求平均。

  • 微平均精确度:计算每个类别的真阳性和假阳性,然后使用它们来计算总体精确度。

  • 加权精确度:与宏平均精确度相同,但在这种情况下,它是根据每个类别中的项目数量进行加权平均的。

1.2.3Multi-Label Classfication
  • Precision at k
def pk(y_true,y_pred,k):
    if k == 0:
        return 0
    y_pred = y_pred[:k]
    pred_set = set(y_pred)
    true_set = set(y_true)
    common_values = pred_set.intersection(true_set)#求交集
    return len(common_values)/len(y_pred[:k])

  • Average Precision at k
def apk(y_true,y_pred,k):
    pk_values = []
    for i in range(1,k+1):
        pk_values.append(pk(y_true,y_pred,i))
    if len(pk_values) == 0:
        return 0
    return sum(pk_values)/len(pk_values)
  • Mean average precision at k
def mapk(y_true,y_pred,k):
    apk_values =[]
    for i in range(len(y_true)):
        apk_values.append(apk(y_true[i],y_pred[i],k=k))
    return sum(apk_values)/len(apk_values)## 标题

1.3Recall ®

所有真实类别为positive中被正确预测到的比例

R e c a l l = T P / ( T P + F N ) Recall = TP/(TP+FN) Recall=TP/(TP+FN)

1.4F1 score (F1)

1.4.1二分类中的F1

当遇到非均衡数据集时,采用acc作为评价指标显然不是一种好的选择,此时就可以采用f1分数。

将精度(precision)和召回率(recall)联系起来,定义为精度和召回率的加权平均值:

F 1 = 2 P R / ( P + R ) F1 = 2PR/(P+R) F1=2PR/(P+R)

或者

F 1 = 2 T P / ( 2 T P + F P + F N ) F1 = 2TP/(2TP+FP+FN) F1=2TP/(2TP+FP+FN)

1.4.2多分类中的F1:weighted_f1:

对每个类别分别求F1,最后加权平均。

1.5Area under the ROC (Receiver Operating Characteristic) curve or simply AUC (AUC)

1.5.1ROC

ROC曲线是一条概率曲线,它展示了分类模型在不同阈值下的真阳性率(TPR)和假阳性率(FPR)之间的关系。其中:

T P R = T P / ( T P + F N ) TPR = TP/(TP+FN) TPR=TP/(TP+FN)

F P R = F P / ( T N + F P ) FPR = FP/(TN+FP) FPR=FP/(TN+FP)

提高阈值会降低假阳性率(FPR),但同时也会降低真阳性率(TPR),降低阈值则相反。因此ROC曲线可以用来根据实际情况选取最佳阈值。通常来说,在ROC曲线的左上方的点(y轴是TPR),会是最佳阈值点。

1.5.2AUC

AUC则是ROC曲线下方的面积,它衡量了分类模型对正负样本区分能力的一个指标。AUC的取值范围在0.5和1之间,值越大表示模型越能够区分正负样本
在这里插入图片描述

ROC和AUC经常用于非均衡二分类数据。

关于AUC的具体解释:

假设AUC为0.8,从数据集中随机选择一个正样本和一个负样本,那么正样本将以0.8的概率排名高于负样本。"排名高于"指的是分类模型为每个样本分配一个概率得分,表示该样本属于正类的概率。如果一个样本的得分高于另一个样本,那么可以说这个样本在模型中的排名高于另一个样本。在这个例子中,如果有正样本以0.8的概率排名高于负样本,这意味着正样本在模型中被分配了更高的概率得分,即模型认为它更可能属于正类。

1.6Log loss

1.6.1二分类或多分类

对数损失衡量了模型预测概率与真实标签之间的差异。对于数据集中的多个样本,所有样本的对数损失就是所有单个对数损失的平均值。

需要注意的是,对数损失对于错误预测或预测偏差较大的情况会给予较高的惩罚。也就是说,如果模型对某个样本的预测非常确定,但预测结果却非常错误,那么对数损失会给予较大的惩罚。

L o g L o s s = − 1.0 ∗ ( t a r g e t ∗ l o g ( p r e d i c t i o n ) + ( 1 − t a r g e t ) ∗ l o g ( 1 − p r e d i c t i o n ) ) Log Loss = -1.0*(target*log(prediction)+(1-target)*log(1-prediction)) LogLoss=1.0(targetlog(prediction)+(1target)log(1prediction))

其中target是0 or 1,prediction是计算出来的probability。

1.6.2Multi-Label Classfication

将真实标签转换为二进制格式,每一列代表一个标签。然后,我们对每一列分别计算对数损失。

1.7Quadratic Weighted Kappa(QWK)

二次加权kappa(Quadratic Weighted Kappa,QWK)是一种高级的度量方法,也被称为Cohen’s kappa。它用于衡量两个“评分”之间的“一致性”。这些评分可以是0到N之间的任意实数,预测值也在同一范围内。一致性可以定义为这些评分彼此接近的程度。因此,它适用于具有N个不同类别/类的分类问题。如果一致性高,则得分接近1.0。如果一致性低,则得分接近0。

1.8Matthew’s Correlation Coefficient (MCC)

M C C = T P ∗ T N − F P ∗ F N [ ( T P + F P ) ∗ ( F N + T N ) ∗ ( F P + T N ) ∗ ( T P + F N ) ] ( 0.5 ) MCC =\frac{TP*TN-FP*FN}{[(TP+FP)*(FN+TN)*(FP+TN)*(TP+FN)]^(0.5)} MCC=[(TP+FP)(FN+TN)(FP+TN)(TP+FN)](0.5)TPTNFPFN

MCC的取值范围为-1到1。当MCC为1时,表示分类完全正确;当MCC为-1时,表示分类完全错误;当MCC为0时,表示分类效果与随机分类相同。

2.回归问题

2.1Mean absolute error MAE

  • Error = True Value - Predicted Value
  • Absolute Error = Abs(True Value - Predicted Value)
  • MAE:Mean Absolute Error
def MAE(y_true,y_pred):
    error = 0
    for yt,yp in zip(y_true,y_pred):
        error += np.abs(yt-yp)
    return error/len(y_true)

2.2Mean squared error (MSE)

S q u a r e d E r r o r = ( T r u e V a l u e − P r e d i c t e d V a l u e ) 2 Squared Error = (True Value - Predicted Value)^2 SquaredError=(TrueValuePredictedValue)2

def MSE(y_true,y_pred):
    error = 0
    for yt,yp in zip(y_true,y_pred):
        error += (yt-yp)**2
    return error/len(y_true)

2.3Root mean squared error (RMSE)

R M S E = S Q R T ( M S E ) RMSE = SQRT(MSE) RMSE=SQRT(MSE)

2.4Mean squared logarithmic error (MSLE)

def MSLE(y_true,y_pred):
    error = 0
    for yt,yp in zip(y_true,y_pred):
        error += (np.log(1+yt)-np.log(1+yp))**2
    return error/len(y_true)

2.5Root mean squared logarithmic error (RMSLE)

2.6Mean percentage error (MPE)

P e r c e n t a g e E r r o r = ( ( T r u e V a l u e − P r e d i c t e d V a l u e ) / T r u e V a l u e ) ∗ 100 Percentage Error = ((True Value - Predicted Value)/True Value)*100 PercentageError=((TrueValuePredictedValue)/TrueValue)100

def MPE(y_true,y_pred):
    error = 0
    for yt,yp in zip(y_true,y_pred):
        error += (yt-yp)/yt
    return error/len(y_true)

2.7Mean absolute percentage error (MAPE)

def MAPE(y_true,y_pred):
    error = 0
    for yt,yp in zip(y_true,y_pred):
        error += np.abs(yt-yp)/yt
    return error/len(y_true)

2.8R^2

R 2 = 1 − ∑ i = 1 N ( y t i − y p i ) 2 ∑ i = 1 N ( y t i − y t m e a n ) R^2 = 1 - \frac{\sum_{i=1}^{N}(y_{t_{i}}-y_{p_{i}})^2}{\sum_{i=1}^{N}(y_{t_{i}}-y_{t_{mean}})} R2=1i=1N(ytiytmean)i=1N(ytiypi)2

def r2(y_true,y_pred):
    mean_true_value = np.mean(y_true)
    numerator = 0
    denominator = 0
    for yt,yp in zip(y_true,y_pred):
        numerator += (yt-yp)**2
        denominator += (yt-mean_true_value)**2
    ratio = numerator/denominator
    return 1-ratio
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值