模型评估与选择

一、模型评估

经过前面一系列的操作,我们得到了一个模型,但是如何评价这个模型好还是不好呢?

很简单,用数据测试一下。==>引发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型,这样求最高点。

正如前文所讲述的,越往前,欠拟合。越往后,过拟合。最低点、最高点才是最优解。

模型评估与选择