关于模型调优,结合业务的精细化特征工程工作比模型调参更能改善模型表现。建模调优与特征工程之间本身是个交互性的过程,在实际工作中我们可以一边进行调参,一边进行特征设计,交替进行,相互促进,共同改善模型表现。在调优过程中同时包括对模型的评估,即调优的模型是否更优秀。评估的指标主要有准确率、召回率、精确率、F1值、混淆矩阵、ROC曲线、ROC曲线下的面积等,如表1-1所示。
表1-1 评估指标
准确率是指分类正确的样本占总样本个数的比例,计算公式为:
准确率=提取出的正确样本数/总样本数
准确率具有局限性。准确率是分类问题中最简单也是最直观的评价指标,但存在明显的缺陷,当不同种类的样本比例非常不均衡时,占比大的类别往往成为影响准确率的最主要因素。例如:当负样本占99%时,即使分类器把所有样本都预测为负样本,也可以得到99%的准确率,换句话说,总体准确率高,并不代表类别比例小的准确率也高。
召回率是指正确分类的正样本个数占真正的正样本数的比例。精确率是指正确分类的正样本个数占分类器判定为正样本的样本个数的比例。
召回率=正确的正例样本数/样本中的正例样本数
精确率=正确的正例样本数/预测为正例的样本数
召回率和精确率是既矛盾又统一的两个指标,为了提高精确率的值,分类器需要尽量在“更有把握”时才把样本预测为正样本,但此时往往会因为过于保守而漏掉很多“没有把握”的正样本,导致召回率值降低。
F值是精确率和召回率的谐波平均值,正常的平均值会平等对待所有的值,而谐波平均值会给予较低的值更高的权重。因此,只有当召回率和精确率都很高时,分类器才能得到较高的F值。
F值=精确率×召回率×2/(精确率+召回率)
这个公式即表示F值为精确率和召回率的调和平均值。F值对那些具有相近的精确率和召回率的分类器更为有利。但这并不一定能符合我们的期望,在某些情况下,我们更关心的是精确率,而另一些情况下,我们可能真正关心的是召回率。精确率与召回率的权衡将是很值得思考的问题。
真实值与预测值的关系如表1-2所示。
表1-2 真实值与预测值
表中A和D预测正确,B和C预测错误,测试计算结果为(其中#表示样本个数,如#(A)表示真正例个数):
二值分类器是机器学习领域中最常见也是应用最广泛的分类器。评价二值分类器的指标很多,例如精确率、召回率、F1值、P-R曲线等,但这些指标或多或少只能反映模型在某一方面的性能。相比而言,ROC曲线则有很多优点,经常作为评估二值分类器最重要的指标之一。ROC曲线是Receiver Operating Characteristic Curve的简称,中文名为受试者工作特征曲线。
ROC曲线的横坐标为假阳率FPR,纵坐标为真阳率TPR,FPR和TPR的计算方法分别为:
P 是真实的正样本数量, N 是真实的负样本数量, TP 是 P 个正样本中被分类器预测为正样本的个数, FP 为 N 个负样本中被预测为正样本的个数。
下面来演示ROC曲线的绘制。首先,创建数据集:
【程序1.1】roc_data.py
然后,绘制ROC曲线:
【程序1.2】roc_plt.py
代码运行结果如图1-3所示。
图1-3 ROC曲线
AUC指ROC曲线下的面积大小,该值能够量化地反映基于ROC曲线衡量出的模型性能。AUC越大,说明分类器越可能把真正的正样本排在前面,分类性能越好。
ROC曲线相比P-R曲线来说,当正负样本的分布发生变化时,ROC曲线的形状能够基本保持不变,而P-R曲线的形状一般会发生激烈的变化。这个特点让ROC曲线能够尽量降低不同测试集带来的干扰,更加客观地衡量模型本身的性能。