文章目录
- 分类常用指标
-
- 基于混淆矩阵的评价指标
- AUC
- 回归模型常用评价指标
-
- 均误差方(MSE)
- 平均绝对误差(MAE)
- 平均绝对比例误差(MAPE)
- R方
分类常用指标 基于混淆矩阵的评价指标 以二分类为例,由于模型预测存在误差,真实值和预测值之间存在差异,于是有以下四种情况:
- 真实值是positive,模型预测为positive(True Positive=TP)
- 真实值是positive,模型预测为negative(False Negative=FN)
- 真实值是negative,模型预测为positive(False Positive=FP)
- 真实值是negative,模型预测为negative(True Negative=TN)
文章图片
要保证一个模型的效果好,也就是希望混淆矩阵第二、四象限对应的位置的数值越多越好。
基于混淆矩阵,引出以下三种评价指标
名称 | 公式 | 意义 |
---|---|---|
准确率 | Accurancy =T P + T N T P + T N + F P + F N \frac{TP+TN}{TP+TN+FP+FN} TP+TN+FP+FNTP+TN? | 模型所有的正确预测结果占总数的比例 |
精确率 | precision= T P T P + F P \frac{TP}{TP+FP} TP+FPTP? | 精确率是针对我们预测结果而言的,它表示的是预测为正的样本中有多少是真正的正样本。精确率低说明存在大量的假正例(FP)。 |
召回率 | Recall= T P T P + F N \frac{TP}{TP+FN} TP+FNTP? | 召回率是针对我们原来的样本而言的,表示的是样本中的正例有多少被预测正确了。 |
F 1 S c o r e = 2 P R P + R F1 \quad Score = \frac{2PR}{P+R} F1Score=P+R2PR?
其中,P代表Precision,R代表Recall。
F1-Score指标综合了Precision与Recall的产出的结果。F1-Score的取值范围从0到1的,1代表模型的输出最好,0代表模型的输出结果最差。
举例子分析,在sklearn中可以使用classification_report生成评价指标报告:
from sklearn.metrics import classification_report
print(classification_report(pred_y,y))
文章图片
从上述结果看出:
- 正例样本的精确率为0.83,说明预测为正例的样本中只要83%是正真的正例,说明预测结果存在17%假正例(将0误分类为1)。
- 召回率0.97,说明训练样本数据中的正例有97%被预测对了。只有3%的正样本被预测为负类。
基于以上,我们应该思考为什么模型会将0误分类为1。
在上述的混淆矩阵,引入两个概念:
- True Positive Rate(TPR,真阳率),所有真实类别为1的样本中,预测类别为1的比例,计算公式如下:
T P R = T P T P + F N TPR = \frac{TP}{TP+FN} TPR=TP+FNTP?
- False Positive Rate(FPR, 伪阳率),所有真实类别为0的样本中,预测类别为1的比例,计算公式如下:
F P R = F P T P + T N FPR = \frac{FP}{TP+TN} FPR=TP+TNFP?
(1)对于二分类问题,对于预测结果(概率)进行从大到小排序:
文章图片
(2)分别以从小到大的预测概率作为阈值,进行分类,如以0.2作为阈值,则21,18号样本为负例,其余样本均为正例。取不同的阈值得到不同的混淆矩阵。得到不同的(TPR,FPR)。
文章图片
(3)将这些(TPR,FPR)在坐标中画出来。
文章图片
将这些点平滑的画出,得到ROC曲线。AUC就是ROC曲线下面的面积。
最后说说AUC的优势,AUC的计算方法同时考虑了分类器对于正例和负例的分类能力,在样本不平衡的情况下,依然能够对分类器作出合理的评价。
sklearn相关函数
import numpy as np
from sklearn import metrics
y = np.array([1, 1, 2, 2])
scores = np.array([0.1, 0.4, 0.35, 0.8])
fpr, tpr, thresholds = metrics.roc_curve(y, scores, pos_label=2)
print(fpr,'\n',tpr,'\n',thresholds)
print(metrics.auc(fpr,tpr))
在这里插入图片描述
回归模型常用评价指标 均误差方(MSE) 所有样本的样本误差的平方的均值
M S E = 1 m ∑ ( y i ? y ^ i ) 2 MSE = \frac{1}{m} \sum(y_i -\hat y_i)^2 MSE=m1?∑(yi??y^?i?)2
sklearn 相关函数:
from sklearn.metrics import mean_squared_error
平均绝对误差(MAE) 所有样本的样本误差的绝对值的均值
M A E = 1 m ∑ ∣ y i ? y ^ i ∣ MAE = \frac{1}{m} \sum|y_i - \hat y_i| MAE=m1?∑∣yi??y^?i?∣
sklearn 相关函数:
from sklearn.metrics import mean_absolute_error
平均绝对比例误差(MAPE) 所有样本的样本误差的绝对值占实际值的比例,mape越接近0,模型越准确。
M A P E = 100 % n ∑ ∣ y i ? y ^ i y i ∣ MAPE = \frac{100 \%}{n} \sum |\frac{y_i - \hat y_i}{y_i}| MAPE=n100%?∑∣yi?yi??y^?i??∣
R方 因变量的方差能被自变量解释的程度,R方越接近1,则代表自变量对因变量的解释度越高。
R 2 = 1 ? M S E ( y , y ^ ) V a r ( y ) R^2 = 1- \frac{MSE(y,\hat y)}{Var(y)} R2=1?Var(y)MSE(y,y^?)?
sklearn 相关函数:
from sklearn.metrics import r2_score
推荐阅读
- 机器学习与深度学习算法|浅析神经网络为什么能够无限逼近任意连续函数()
- Android | 教你如何快速集成机器学习能力
- 机器学习实战基础(十八)(sklearn中的数据预处理和特征工程特征选择 之 Wrapper包装法)
- python|Python数据可视化大杀器之地阶技法(matplotlib(含详细代码))
- python|python机器学习从入门到高级(超参数调整(含详细代码))
- ECE9047/9407问题
- PyTorch预测和线性分类使用图解
- 机器学习实战----信息增益、信息增益率和基尼指数
- Spark|实战8.Spark MLlib(上)--机器学习及SparkMLlib简介