模型评估与选择
一、模型评估
经过前面一系列的操作,我们得到了一个模型,但是如何评价这个模型好还是不好呢?
很简单,用数据测试一下。==>引发2个问题:数据从何而来?评价指标是什么?
【1】测试数据:测试集、校验集
(1)误差越小,模型越好。
(2)在校验集中,数据量不是很大时,会采用k折交叉验证。每折都会计算出一个超参数,最后超参数取平均值。
(3)sklearn中,交叉验证和网格搜索合并为一个参数:sklearn.model_selection.GridSearchCV。
只不过在线性模型中,留一交叉验证效果更好。在sklearn中,RidgeCV(岭回归)、LassoCV都是留一交叉验证。
(4)sklearn 还提供一个与LassoCV类似的LARS(最小角回归算法),二者仅仅是优化方法不同,目标函数相同。当数据集 特征维数多,且存在多重共线性时,LassoCV更合适。参考 Lasso、岭回归
【2】评价指标:
(1)连续数据:R2 Score
它一个相对值。既考虑了预测值与真实值之间的差异,也考虑了问题本身的变化程度。它是sklearn 线性回归模型的缺省评价准则。
完美的预测,R2 Score=1,当模型不好时,可能为负数。
(2)离散数据:accuracy_score(准确率)
不能用在连续的数据上,会报错:continuous is not supported。
(3)判断残差是否符合正态分布。
(4)打印 预测值与真实值的散点图、判断相关系数,越高越好。
【3】问答
问1:训练集、测试集、校验集之间的联系?
答:满足独立同分布。
问2:什么是校验集?
答:通常用校验集来评估模型。
当训练数据足够多时,训练数据拆分为2份,一份用来做训练集,另一部分做校验集。但是这么做也有弊端:只进行了一次划分,数据结果具有偶然性,如果在某次划分中,训练集里全是容易学习的数据,测试集里全是复杂的数据,这样就会导致最终的结果不尽如意;反之,亦是如此。
解决方案:采用 重采样的技术来模拟校验集。
问3:重采样实现方式?
答:通常有两种实现方式,交叉验证和bootstrap
交叉验证可以看做是bootstrap的简化版本,更好实现,所以通常情况下我们都是用交叉验证技术。
问4:简述交叉验证?
答:分为k折校验验证、留一交叉验证、Hold Out验证等。下面简述下k折交叉验证(k-fold cross validation):
将训练数据分成容量大致相等(有时候不能整除,就会取前面k-1份相等,最后一份大点或者小点)的K份。
通常k取5或者10。如1000条数据,分为10份。每份100条数据。
例如:当k=10。超参数取平均值。
但还有点问题:例如,5折交叉验证,4:1方式,刚巧1折里面全部都是一种类型,没有出现在4中,就会造成没有学习到 测试数据的特点,测试效果一般。
解决方案:分层交叉验证(Stratified k-fold cross validation)
每一折不会只有一种类型。而是包含各种类别,且按照原始数据中比例划分。
问5:训练集有什么特点?
答:训练集一定要丰富,各种场景都要包含在内。如果在测试集上发现一些没有训练过的情况,那么测试的误差将会很大。
二、模型选择
下图,横轴代表模型复杂度,纵轴代表预测误差。
通常,随着模型复杂度从低到高,训练误差,会越来越低,在某个点,达到0.
而测试误差,会是一个U型曲线,最好的点,就U的最低点。
如果纵轴是正确率,会是一个倒着的U型,这样求最高点。
正如前文所讲述的,越往前,欠拟合。越往后,过拟合。最低点、最高点才是最优解。