机器学习--模型的评估与选择

一. 思维导图

 二. 精度,过拟合,欠拟合

错误率:分类错误的样本数占样本总数的比例。如在m个样本中有a个分类错误的样本,则错误率为1-a/m

精度:1-a/m

误差:实际预测输出与样本真实输出之间的差异

训练误差:学习器在训练集上的误差

泛化误差:学习器在新样本上的误差

 过拟合:(把不一般的特性学到了)模型在训练数据上表现很好,但在测试数据上表现很差,不能很好地泛化到新数据。把训练样本自身的一些特点当作了所有潜在样本都会具有的一般性质。

欠拟合:(学习能力低下)模型在训练数据和测试数据上都表现不好,无法很好地捕捉数据的趋势。

                        

 三. 评估方法

测试集(S):测试学习器对新样本的判别能力

训练集(T):训练学习器

测试集与训练集应当尽可能的互斥,即测试样本尽量不出现在训练集当中,未在训练集进行使用。

在S上训练出模型,用T来评估其测试误差

当我们只有一个包含m个样例的数据集D时,既要训练,又要测试,如何做到?

对D进行适当处理,从中产生训练集S和测试集T

常见方法: 

 3.1 留出法

  • 直接将数据集D划分为两个互斥的集合,一个集合作为训练集,另一个集合作为测试集T
  • D = S ∪ T,S ∩ T = 空集
  • 训练/测试集的划分要尽可能保持数据分布的一致性,避免因数据划分过程引入额外的偏差而对最终结果产生影响。

3.2“交叉验证法”(cross validation)

先将数据集D划分为k个大小相似的互斥子集,即D=D1 U D2 U..U Dk,Di ∩Dj = ∅(i≠j).每个子集 Di都尽可能保持数据分布的一致性,即从D中通过分层采样得到。然后,每次用 k-1个子集的并集作为训练集,余下的那个子集作为测试集;这样就可获得k组训练/测试集,从而可进行k次训练和测试,最终返回的是这人个测试结果的均值.

显然,交叉验证法评估结果的稳定性和和保真性在很大程度上取决于k的取值,为强调这一点,通常把交叉验证法称为“k折交叉验证”(k-fold cross validation).k最常用的取值是10,此时称为10 折交叉验证;其他常用的k值有5、20等.

3.3 自助法 

给定包含m个样本的数据集D,我们对它进行采样产生数据集D':每次随机从D 中挑选一个样本,将其拷贝放入D’,然后再将该样本放回初始数据集D中,使得该样本在卡次采样时仍有可能被采到;这个过程重复执行m次后,我们就得到了包含m个样本的数据集D'。D'为训练集,D/D'为测试集。

 四. 查准率,查全率,F1

真正例(TP)本身为真,预测为真

假正例(FP)本身为假,预测为真

真反例(TN)本身为假,预测为假

假反例 (FN)本身为真,预测为假

TP + FP +TN +FN = 样例总数

分类结果为混淆矩阵

查准率(P)(Precision)预测为正类的样本中实际为正类的比例。

from sklearn.metrics import precision_score

y_true = [3, 0, 2, 1, 0, 0]
y_pred = [1, 0, 1, 1, 0, 1]

print(precision_score(y_true, y_pred))

运行结果:

缺少average='macro',zero_division = 1两个参数会报两个错误,添上就行了

average 参数

在 scikit-learn 中,precision_score、recall_score 和 f1_score 函数都有 average 参数,这个参数决定了如何计算多分类的指标。

'micro':全局计算,包括每个样本的 True Positives,False Positives 和 False Negatives。
'macro':对每个标签分别计算,然后取平均(不除以标签数)。
'weighted':对每个标签分别计算,然后取加权的平均值(除以每个标签的样本数)。

ValueError: Target is multiclass but average='binary'. Please choose another average setting, one of [None, 'micro', 'macro', 'weighted'].
UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.
  _warn_prf(average, modifier, msg_start, len(result))

查全率(R)(Recall)实际为正类的样本中被正确预测为正类的比例。

from sklearn.metrics import recall_score

y_true = [3, 0, 2, 1, 0, 0]
y_pred = [1, 0, 1, 1, 0, 1]

recall = recall_score(y_true, y_pred)
print(recall)

运行结果:

P-R图:查准率为纵轴,查全率为横轴

平衡点处,查准率= 查全率

F1值(F1 Score)Precision和Recall的调和平均数。

F1度量的一般形式:

运行代码;

from sklearn.metrics import f1_score

y_true = [3, 0, 2, 1, 0, 0]
y_pred = [1, 0, 1, 1, 0, 1]

print(f1_score(y_true, y_pred,average='macro'))

运行结果:

 五. ROC与AUC

根据学习器的预测结果对样例进行排序,按此顺序逐个扣样本作为正例进行预测,每次计算出两个重要量的值,分别以它们为横、纵坐标作图,就得到了“ROC 曲线”.与P-R 曲线使用查准率、查全率为纵、棱黄轴不同,ROC曲线的纵轴是“真正利率”(简称TPR).横轴是“假正例率”(简称FPR)

AUC可通过对ROC曲线下各部分的面积求和而得

六. 代价曲线 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值