模型评价
在机器学习中,我们会遇到模型过拟合和欠拟合的问题,过拟合是模型对训练数据预测很准确,但是对非训练数据(测试数据)的预测不准确。欠拟合是只模型对训练数据和测试数据的预测数据都不准确。如何评估一个模型的好坏呢?
|-----|------|------|
| | 训练数据 | 预测数据 |
| 欠拟合 | 不准确 | 不准确 |
| 过拟合 | 准确 | 不准确 |
| 好模型 | 准确 | 准确 |
造成模型过拟合的原因:
- 使用过多的属性或者干扰信息来训练模型
- 模型结构在选择时过于复杂(选择的维度过高,比如本来可以使用线性回归的2维函数来训练模型,但是使用5维函数来训练模型,造成对训练数据的预测准确率很高,但是对于测试数据的预测准确率不高)
解决过拟合问题的方法:
- 简化模型结构(使用地阶模型,比如线性模型)
- 删除训练模型中训练数据的干扰信息,对训练数据进行降维和预处理,保留主成分信息(数据PCA处理)
- 在训练模型时,增加正则化项(regularization)
训练模型的过程和步骤:
- 数据分离,分离为测试数据和训练数据;
- 数据可视化和预处理;
- 模型创建;
- 训练数据训练模式;
- 模型预测测试数据并通过准确率来评估模型;
以测试数据预测结果的准确率来评估模型是否存在局限性?比如在分类任务中,模型预测的准确率是否能真实反映各个分类的预测准确度。

该样本中实际结果有900个1,100个0。
模型1:预测850个1,150个0,预测结果的准确率为90%
模型2:预测结果都是1,预测结的准确率为90%
从这个例子中可以看出仅仅通过模型预测准确率的局限性体现在哪?--无法衡量和反映预测结果的细节。
- 无预测结果分布的比例占比
- 无错误预测结果的细节
可以看出仅仅通过预测结果的准确率这个指标是无法评估模型的优势,有概率会造成我们对模型空准确率的误判。混淆矩阵(又名误差矩阵)可以减少上述概率的发生。
混淆矩阵是衡量分类算法中的准确程度。

TN:预测结果准确,实际为负样本的数量
FP: 预测结果不准确,实际为负样本的数量
FN:预测结果不准确,实际为正样本的数量
TP:预测结果准确,实际为正样本的数量
模型评估指标:

上述衡量指标中哪个更关键呢?-----根据应用场景来决定,看应用场景中哪个指标最重要。
模型优化
在机器学习中我们会常常遇到如下问题:
问题1:在机器学习中选择哪种模型?
问题2:我们选中了具体的模型后,具体模型的算法核心结构或参数如何选择?如knn算法中的核心参数n_neighbors取多少?或逻辑回归边界函数是用线性,2次函数,3次函数?
问题3:已选中模型,但是模型的表现不佳,怎么办?(如,训练数据准确率太低,测试数据准确率下降明显,混淆矩阵的其他指标低)
根据上述的问题,我们如何优化模型?
数据的质量决定模型表现的上限
检查数据的质量从如下方法考虑:
- 数据属性的意义,是否为无关数据等;---解决办法,删除无关数据和没有必要的数据属性,PCA数据维度减少
- 不同属性的数据的数量级差异性是否很大;----解决办法,数据预处理,数据数量级的归一化和标准化
- 是否有异常数据;----解决办法,使用数据的异常处理算法剔除和过滤异常数据。
- 采集数据的方法是否合理,采集到的数据是否具有代表性;
- 对于标签结果,其判定规则是否具有一致性或统一标准;
尝试选择不同的模型来训练并优化
从下面三方面来进行模型的优化:
- 数据
- 扩大数据样本
- 增加或减少数据属性
- 对数据进行降维处理
- 模型核心参数
- 遍历核心参数组合,评估对应模型表现(比如,逻辑回归边界函数考虑多项式,knn尝试不同的n_neighbors值)
- 通过可视化来对比各个参数训练模型时,训练数据集和测试数据集预测数据的准确率的对比。一般训练数据集会随着模型复杂度高而提升,而测试数据集会随着模型过于简单或过于复杂的情况下下降
- 正则化
- 对模型进行正则化处理,调整正则项的数值