对于机器学习而言,无论使用何种算法,模型的评估都是很重要的。通过对模型的评估可以知道模型的好坏,预测结果的准确性,有利于确定模型调整的方向。模型评估根据不同的问题有不用的评估标准。这个汇总主要从回归、分类和聚类分别阐述。

一、回归

1、均方误差(Mean Squared Error)

均方误差是指参数估计值与参数真实值之差平方的期望值。

MSE可以评价数据的变化程度,MSE的值越小,说明模型精确度越高。

机器学习中 均方误差怎么计算 均方误差进行模型分析_机器学习

from sklearn.metrics import mean_squared_error
y_true = [2, 0.3, 1.4, 4, 6]
y_pre = [2.5, 0.2, 1, 5, 6]
mean_squared_error(y_true, y_pre)
# out >>> 0.252
2、平均绝对误差(Mean_Absolute_Error)

平均结对误差是绝对误差的平均值,能更好地反映预测值误差的实际情况,MAE值越小说明拟合效果越好。

机器学习中 均方误差怎么计算 均方误差进行模型分析_机器学习_02

from sklearn.metrics import mean_absolute_error
y_true = [0, 1, 0,  0]
y_pre = [0, 1, 0, 1]
mean_absolute_error(y_true, y_pre)
# out >>> 0.25
3、解释回归模型的方差(Explained_Variance_Score)

EVS取值范围是[0,1],越接近于1说明自变量越能解释因变量的方差变化,值越接近0则说明效果越差。

机器学习中 均方误差怎么计算 均方误差进行模型分析_算法_03

from sklearn.metrics import explained_variance_score
y_true = [0, 1, 0, 0, 0, 1, 2]
y_pre = [0, 1, 1, 0, 0, 0 ,0 ]
explained_variance_score(y_true, y_pre)
# out >>> -0.4615384615384617
4、R²确定系数(r2_score)

r2_score,解释回归模型的方差得分,其值取值范围是[0,1],越接近于1说明自变量越能解释因变量的方差变化,值越小则说明效果越差。

from sklearn.metrics import r2_socre
y_true = [0, 1, 0, 0, 0, 1, 2]
y_pre = [0, 1, 1, 0, 0, 0 ,0 ]
r2_socre(y_true, y_pre)
# out >>> -0.6153846153846154

二、分类

1、混淆矩阵(Confusion Matrix)

混淆矩阵是模式识别领域中一种常用的表达形式。它描绘样本数据的展真实属性与识别结果类型之间的关系,是评价分类器性能的一种常用方法。在混淆矩阵中永远是真实值在前,预测值在后

机器学习中 均方误差怎么计算 均方误差进行模型分析_机器学习中 均方误差怎么计算_04

准确度(Accuracy)

机器学习中 均方误差怎么计算 均方误差进行模型分析_机器学习_05

TP(True Positives) :表示真实值是positive,模型预测的是positive的数量
TN(True Negatives):表示真实值是negative,模型预测是negative的数量
FP(False Positives) :表示真实值是negative,模型预测是positive的数量
FN(False Negatives):表示真实值是positive,模型预测是negative的数量

精确度(Precision)

机器学习中 均方误差怎么计算 均方误差进行模型分析_概率论_06


精确度也叫查准率,表示所有模型预测为yes的样本中,真实值为yes所占的比例。精确度越高,表示我们对yes预测得越准确,反之,表示模型将真实为no预测成了yes。精确度是“将no错判后所需付出成本”的衡量,所以在一些领域中(如汽车召回),将no错判的成本非常高昂,因此常追求高的精确度。

召回率(Recall)

机器学习中 均方误差怎么计算 均方误差进行模型分析_机器学习中 均方误差怎么计算_07


召回率也叫敏感度,表示所有真实值为yes的样本中,模型预测正确的样本所占比例。召回率越高,表示模型捕捉了越多的yes,反之,表示模型没有捕捉到足够的yes。在希望不计损失也要yes的情况下(如找犯罪者),常追求高的召回率。

F1 measure

机器学习中 均方误差怎么计算 均方误差进行模型分析_机器学习中 均方误差怎么计算_08


精确度和召回率是此消彼长的,两者的平衡代表了捕捉yes的需求和尽可能不要误伤no的需求的平衡。 F1 measure就是为了同时兼顾精确度和召回率,追求高的 F1 measure,以保证精确度和召回率都很高。

假负率(False Negative Rate)

FNR = 1- Recall
从Recall中延伸出来的另一个评估指标,等于1-Recall,用于衡量所有真实值为yes的样本中国,被模型错判为no的。

特异度(Specificity)

机器学习中 均方误差怎么计算 均方误差进行模型分析_概率论_09


特异度表示所有真实值为no的样本中,被正确预测为no的样本所占比例,即模型将no判断正确的能力。

假正率(False PositiveRate)

FPR = 1 - Specificity
表示所有真实值为no的样本中,被预测为yes的样本所占的比例,即模型将no判断错误的能力。

y_train_pre = model.predict(x_train)              #训练集的预测值
from sklearn.metrics import confusion_matrix      # 导入混淆矩阵库
cm = confusion_matrix(y_train, y_trian_pre) 
import seaborn as sns                             # seaborn可视化库
sns.heatmap(cm, annot = True, fmt = 'd', cmap = plt.cm.Blues)   # 生成混淆矩阵
plt.show()                                        # 显示混淆矩阵
2、ROC曲线

受试者工作特征(Receiver Operating Characteristic)曲线是一种非常有效的模型评价方法,可以选定临界值给出定量提示。ROC曲线图的横轴是假正率或特异性,纵轴是灵敏度。ROC曲线下的面积(AUC)大小与每种方法优劣密切相关,反映分类器正确分类的统计概率,其值越接近于1说明该算法效果越好,即面积越大算法效果越好。

from sklearn.metrics import roc_curve
from sklearn.metrics import roc_auc_score
y_score = model.predict_proba(x_test) 
fpr, tpr,thr = roc_curve(y_test, y_score[:,-1])
plt.plot(fpr,tpr)
plt.show()
print('auc面积为:',roc_auc_score(y_test, y_score[:,-1]))
3、P-R曲线

在数据不平衡时,数据两极分化严重,所以大多使用P-R曲线。

from sklearn.metrics import precision_recall_curve
y_score = model.predict_proba(X_test)
precision, recall, thr = precision_recall_curve(y_test, y_score[:,-1])
plt.plot(recall,precision,label="model的PR曲线")
plt.xlabel( 'recall')
plt.ylabel( 'precision')
plt.legend()
plt.show()

三、聚类

1、外部度量

外度度量的数据集需要有标签,即数据的真实类别。

  • 均一性:每个簇内都是一类别的样本
from sklearn.metrics import homogeneity_score
y_label = [0, 1, 0, 0, 0, 1, 2]
y_pre = [0, 1, 1, 0, 0, 0, 0]
homogeneity_score(y_label, y_pre)
# out >>> 0.08255014924324922
  • 完整性:用来衡量同类别样本被归类到相同的簇中的比例,即每个簇中正确分类的样本数占该类型的总类型样本比例的和,类似召回率,灵敏度,指同一个样本的全部数据是否都被归到一个簇内。
from sklearn.metrics import completeness_score
y_label = [0, 1, 0, 0, 0, 1, 2]
y_pre = [0, 1, 1, 0, 0, 0, 0]
completeness_score(y_label, y_pre)
# out >>> 0.13186892689908797
  • V-measure: 综合均一性和完整型, 即均一性和完整性的加权平均。
from sklearn.metrics import v_measure_score
y_label = [0, 1, 0, 0, 0, 1, 2]
y_pre = [0, 1, 1, 0, 0, 0, 0]
v_measure_score(y_label, y_pre)
# out >>> 0.10153760376096896
  • 兰德系数(Rand Index): 取值在0–1之间,越大分类效果越好,与真实情况越吻合;越小分类越差
  • 调整兰德系数(Adjusted Rnd Index):取值在 -1–1 之间,越大分类越好;越小分类越差
from sklearn.metrics import adjusted_rand_score
y_label = [0, 1, 0, 0, 0, 1, 2]
y_pre = [0, 1, 1, 0, 0, 0, 0]
adjusted_rand_score(y_label, y_pre)
# out >>> -0.1249999999996
2、内部度量

不需要外部标签。在真实的分群label不知道的情况下,对聚类结果进行评价。

  • 簇内不相似度:计算样本i到同簇内其它样本的平均距离为ai,ai越小,表示样本i越应该被聚归类到该簇,簇中的所有样本的ai的均值被称为簇的簇内不相似度。簇内不相似度越小,簇内越相似,簇内样本距离越小。
  • 簇间不相似度:计算样本i到其它簇Cj的所有样本的平均距离bij,bi=min{bi1,bi2,…,bik};bi越大,表示样本i越不属于其它簇。
  • 轮廓系数:si值越接近1表示样本i聚类越合理,越接近-1,表示样本i应该分类到另外的簇中,近似为0,表示样本i应该在边界上;所有样本的si的均值被成为聚类结果的轮廓系数。簇间距离大于簇内距离表示分类越好;簇间距离小于簇内距离表示分类越差
  • 机器学习中 均方误差怎么计算 均方误差进行模型分析_概率论_10