大侠幸会,在下全网同名[算法金] 0 基础转 AI 上岸,多个算法赛 Top [日更万日,让更多人享受智能乐趣]
构建机器学习模型的关键步骤是检查其性能,这是通过使用验证指标来完成的。 选择正确的验证指标就像选择一副水晶球:它使我们能够以清晰的视野看到模型的性能。 在本指南中,我们将探讨分类和回归的基本指标和有效评估模型的知识。 学习何时使用每个指标、优点和缺点以及如何在 Python 中实现它们。
简单来说,真正例和真反例,就像是模型正确识别出了正类与反类,而假正例和假反例。
概括:
这是一种在 Python 中计算准确度得分的方法。我们可以使用以下代码将模型预测的值 ( y_pred ) 与真实值 ( y_test ) 进行比较:
from sklearn.metrics import precision_score
# 计算模型的精确度得分
model_precision = precision_score(y_test, y_pred)
print("Precision:", model_precision)
混淆矩阵是一个表格,总结了分类模型的表现,通过比较预测值和实际值。它为我们提供了一个模型表现的直观表示,帮助识别模型的错误之处。它显示了我们的所有四个分类结果。混淆矩阵提供了模型性能的直观表示,并有助于识别模型在哪里犯了错误。
概括:
在 Python 中绘制混淆矩阵的一种简单方法是:
from sklearn.metrics import confusion_matrix, ConfusionMatrixDisplay
# 计算混淆矩阵
conf_matrix = confusion_matrix(y_test, y_pred)
# 展示混淆矩阵
disp = ConfusionMatrixDisplay(confusion_matrix=conf_matrix, display_labels=model.classes_)
disp.plot()
这个指标,特别在那些把假阳性看得比较重的场景下格外重要,比如说过滤垃圾邮件或者是医学上的诊断。但光有精确度还不够,因为它没办法告诉我们假阴性的情况,所以一般会跟召回率一起搭配使用。 概括:
在那些错过真阳性的代价极其重大的场合——比如癌症筛查或者防范信用诈骗,或是在那种正类相对较少的数据集里——召回率的重要性不言而喻。正如召回率需要和精确率一样的搭档一样,为了达到一种评估的平衡,召回率也需要和其他指标一并参考。 概括:
当误报和漏报同样重要并且您寻求精确率和召回率之间的平衡时,F1 分数非常有用。 概括:
一次性获得准确率、召回率和 F1 分数的最简单方法是使用 scikit-learn 的分类报告:
from sklearn.metrics import classification_report # 修正导入语句,应该在import和classification_report之间加上空格
# 生成分类报告
# 该报告包括了精确度、召回率、F1分数等关键指标
class_report = classification_report(y_test, y_pred)
# 打印分类报告
print(class_report)
这为我们提供了两个类别的准确率、召回率和 F1 分数。
AUC衡量的是在不同的判定门槛下,模型识别正类的能力与误将负类判为正类的风险之间的平衡。AUC值满分为1,代表模型预测能力无懈可击,而得分为0.5则意味着模型的预测不过是碰运气。在评估和比较多个模型的表现时,AUC尤其有价值,但为了深入掌握每个模型在各个方面的优劣,最好还是将它与其他性能指标一并参考。
概括:
我们可以使用以下代码计算 AUC 分数并绘制 ROC 曲线:
# 从sklearn.metrics模块导入roc_auc_score和roc_curve函数用于计算AUC分数和绘制ROC曲线,同时导入matplotlib.pyplot用于绘图
from sklearn.metrics import roc_auc_score, roc_curve
import matplotlib.pyplot as plt
# 使用模型对测试集X_test进行概率预测,取正类预测概率为真阳性率的依据
y_pred_proba = my_model.predict_proba(X_test)[:, 1]
# 利用真实标签y_test和预测概率y_pred_proba计算AUC分数,评估模型的整体性能
auc_score = roc_auc_score(y_test, y_pred_proba)
# 基于真实标签和预测概率,计算ROC曲线的假阳性率(fpr)和真阳性率(tpr),及不同阈值
fpr, tpr, Thresholds = roc_curve(y_test, y_pred_proba)
# 使用matplotlib绘制ROC曲线,展示模型的性能。曲线下的面积(AUC)越大,模型性能越好
plt.plot(fpr, tpr, label='My Model (AUC = %0.2f)' % auc_score)
# 绘制对角线,表示随机猜测的性能水平,作为性能的基准线
plt.plot([0, 1], [0, 1], 'k--')
# 设定图像的x轴和y轴的显示范围
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
# 设置x轴标签为“误报率”和y轴标签为“真阳性率”,即ROC曲线的标准轴标签
plt.xlabel('误报率')
plt.ylabel('真阳性率')
# 设置图表标题为“接收器操作特征”,即ROC曲线的常见名称
plt.title('接收器操作特征')
# 添加图例,位于图的右下角,展示模型及其AUC分数
plt.legend(loc="lower right")
# 显示绘制的图像
plt.show()
1.7 对数损失(交叉熵损失) 对数损失用来评估模型预测准确性的一种方法,它对每次预测的正确与否进行奖惩。 这种度量方式通过惩罚错误的预测同时奖励正确的预测来工作。如果对数损失的值越低,意味着模型的性能越好,而当这个值达到0时,就代表这个模型能够完美地进行分类。
当你需要对模型的概率预测进行评估时,比如在应用逻辑回归或者神经网络模型的情况下,对数损失就显得尤为重要了。 为了能更深入地掌握模型在各个分类上的表现,最好是将对数损失与其他评估指标一起考虑使用。 概括:
平均绝对误差(MAE)是用来计算预测值和实际值之间差距绝对值的平均量。简单来说,MAE的计算公式如下:
概括
在 Python 中,使用 scikit-learn:
from sklearn.metrics import mean_absolute_error # 修正函数名称,应为小写的 'mean_absolute_error'
# 计算真实值与预测值之间的平均绝对误差 (MAE)
mae = mean_absolute_error(y_true, y_pred) # 计算MAE
# 打印MAE值,以评估模型预测的准确性
print("MAE:", mae)
MSE特别对离群值敏感,这是因为它对于较大的误差施加了更重的惩罚,远超过小误差。这一特性根据具体的应用场景,既可能是一个优势也可能是一个劣势。 概括:
RMSE同样对离群值敏感,和MSE一样,对较大的误差给予较重的惩罚。不过,RMSE的一个显著优势在于它的单位和目标变量保持一致,这使得RMSE更加易于理解和解释。 概括:
在 Python 中,使用 scikit-learn:
from sklearn.metrics import mean_squared_error # 注意修正导入函数名的大小写
# 利用模型对数据集X进行预测,得到预测值y_pred
y_pred = model.predict(X)
# 计算实际值y和预测值y_pred之间的均方误差(MSE)
mse = mean_squared_error(y, y_pred) # 注意修正函数名的大小写
# 通过对MSE取平方根,计算均方根误差(RMSE),这一步使得误差单位与目标变量单位一致
rmse = np.sqrt(mse)
# 输出均方根误差(RMSE),以评估模型预测的准确性
print('Root Mean Squared Error:', rmse)
平均绝对百分比误差(MAPE)是一个衡量预测准确性的指标,它通过计算预测值与实际值之间差异的百分比,然后取这些百分比差异的平均值来实现。MAPE的计算方式可以这样表达:
在对比不同模型性能或判断误差的重要程度时,MAPE展现了其独到的价值。 但是,当涉及到接近零的数值时,MAPE的应用就会遇到挑战,因为这时的百分比误差可能会激增,变得异常巨大。
概括:
Scikit learn 没有 MAPE 函数,但我们可以使用以下方法自己计算:
# 定义一个函数来计算平均绝对百分比误差(MAPE)
def mape(y_true, y_pred):
# 计算真实值与预测值之间的绝对差异,然后除以真实值,最后乘以100转换为百分比
return np.mean(np.abs((y_true - y_pred) / y_true)) * 100
# 使用定义好的MAPE函数,传入真实值y_true和预测值y_pred,计算MAPE
mape_value = mape(y_true, y_pred) # 修正变量名以避免与函数名相同
# 打印MAPE值,评估模型预测的平均误差百分比
print("MAPE:", mape_value) # 修正语法错误
2.5 R 平方(决定系数) R平方衡量了模型预测值与实际值之间的一致性,通过计算模型能解释的目标变量方差的比例来评估。具体来说,R平方的计算公式如下:
R平方的取值介于0到1之间,其中值越接近1意味着模型的预测能力越强。但是,R平方也存在一定的限制,比如说,即使加入了与目标变量无关的特征,其值也有可能上升。 概括:
在 Python 中,使用 scikit-learn:
from sklearn.metrics import r2_score
# 使用r2_score函数计算真实值y_true和预测值y_pred之间的R平方值
r_squared = r2_score(y_true, y_pred)
# 输出R平方值,以评估模型解释目标变量方差的能力
print("R-squared:", r_squared)
2.6 调整后的 R 平方(Adjusted R-Squared)
Adjusted R-Squared 是对R平方( R-Squared)的改良,它在计算过程中考虑到了模型中包含的特征数量,从而对模型复杂度进行了调整。调整R平方的计算公式是这样的:
调整后的 R-Squared 可以通过惩罚具有过多特征的模型来帮助防止过度拟合。 概括:
在 Python 中,我们可以根据 R 平方分数来计算它:
from sklearn.metrics import r2_score
# 计算模型的R平方值,即模型的解释能力
r_squared = r2_score(y, y_pred)
# 为了更准确地评估模型性能,计算调整后的R平方值
heroes_count = len(y) # 观测值数量,类比为武林中的英雄人数
techniques_count = X.shape[1] # 特征数量,类比为模型中的武学技巧数
# 调整后的R平方值的计算考虑了模型中的特征数量
adj_r_squared = 1 - (((1 - r_squared) * (heroes_count - 1)) / (heroes_count - techniques_count - 1))
# 输出调整后的R平方值
print("调整后的R平方:", adj_r_squared)
选择合适的评估指标对于确保项目成功至关重要。这一选择应基于具体问题背景、采用的模型类型,以及希望达成的项目目标。以下内容将引导您如何根据这些因素做出明智的决策。
在选择指标之前,了解项目背景至关重要。考虑以下因素:
模型旨在解决的具体问题同样影响着指标的选择:
为了获得模型性能的全面视图,建议同时考虑多个指标。这样不仅可以揭示模型的长处和短板,还能为模型的优化提供方向。例如:
我们探讨了如何选择适合评估机器学习模型性能的指标,强调了指标选择的重要性,并提供了一系列指导原则来帮助你做出明智的选择。以下是各个关键部分的简要回顾:
具体到每个指标,我们讨论了:
通过选择正确的验证指标,可以清晰地评估和优化模型性能,确保机器学习项目的成功。希望本指南能够为你的机器学习之旅提供实用的见解和支持。