机器学习理论基础
包括算法模型性能评估的指标和评估方法
- 模型过拟合和欠拟合
- 模型的成本及成本函数的含义
- 评价一个模型好坏的标准
- 学习曲线,以及用学习曲线来对模型进行诊断
- 通用的模型优化方法
其他模型评价标准
过拟合和欠拟合
过拟合(高方差)是指模型能很好地拟合训练样本,但对新数据的预测准确性很差。
欠拟合(高偏差)是指模型不能很好地拟合训练样本,且对新数据的预测准确性也不好 。
代码实例:https://github.com/DyerLee/scikit-learn-Machine_Learning/blob/master/ch03.01.ipynb成本函数
- 成本是针对所有的训练样本,模型拟合出来的值与训练样本的真实值的误差平均值。成本函数\(J(\theta)\)就是成本与模型参数的函数关系。模型训练的过程,就是找出合适的模型参数,使得成本函数的值最小。
- 一个数据集可能有多个模型可以用来拟合它,而一个模型有无穷多个模型参数,针对特定的数据集和特定的模型,只有一个模型参数能最好地拟合这个数据集,这就是模型和模型参数的关系。
针对一个数据集,我们可以选择很多个模型来拟合数据,一旦选定了某个模型,就需要从这个模型的无穷多个参数里找出一个最优的参数,使得成本函数的值最小。
模型准确性
测试数据集的成本,即\(J_{test}(\theta)\)是评估模型准确性的最直观的指标,\(J_{test}(\theta)\)值越小说明模型预测出来的值与实际值差异越小,对新数据的预测准确性就越好。
模型性能的不同表述方式
在scikit-leam里,不使用成本函数来表达模型的性能,而使用分数来表达,这个分数总是在[0,1]之间,数值越大说明模型的准确性越好。当模型训练完成后,调用模型的score(X_test, y _test)即可算出模型的分数值,其中X_test和y_test是测试数据集样本。
模型分数(准确性)与成本成反比。即分数越大,准确性越高,误差越小,成本越低;反之,分数越小,准确性越低,误差越大,成本越高。交叉验证数据集
测试数据集的最主要功能是测试模型的准确性,需要确保模型“没见过”这些数据。把数据分成3部分,随机选择60%的数据作为训练数据集,其成本记为\(J_{train}(\theta)\),随机选择20%的数据作为交叉验证数据集(Cross Validation),其成本记为\(J_{cv}(\theta)\),剩下的20%作为测试数据集,其成本记为\(J_{test}(\theta)\)。
在模型选择时,我们使用训练数据集来训练算法参数,用交叉验证数据集来验证参数。选择交叉验证数据集的成本\(J_{cv}(\theta)\)最小的多项式来作为数据拟合模型,最后再用测试数据集来测试选择出来的模型针对测试数据集的准确性 。学习曲线
- 将\(J_{train}(\theta)\)和\(J_{cv}(\theta)\)作为纵坐标,画出与训练数据集\(m\)的大小关系,这就是学习曲线。通过学习曲线,可以直观地观察到模型的准确性与训练数据集大小的关系。
如果数据集的大小为\(m\),则通过下面的流程即可画出学习曲线:- 把数据集分成训练数据集和交叉验证数据集。
- 取训练数据集的20%作为训练样本,训练出模型参数。
- 使用交叉验证数据集来计算训练出来的模型的准确性。
- 以训练数据集的准确性,交叉验证的准确性作为纵坐标,训练数据集个数作为横坐标,在坐标轴上画出上述步骤计算出来的模型准确性。
- 训练数据集增加10%,跳到步骤3继续执行,直到训练数据集大小为100%为止。
学习曲线要表达的内容是,当训练数据集增加时,模型对训练数据集拟合的准确性以及对交叉验证数据集预测的准确性的变化规律。
代码实例:https://github.com/DyerLee/scikit-learn-Machine_Learning/blob/master/ch03.02.ipynb过拟合和欠拟合的特征
- 过拟合:模型对训练数据集的准确性比较高,其成本\(J_{train}(\theta)\)比较低,对交叉验证数据集的准确性比较低,其成本\(J_{cv}(\theta)\)比较高。
欠拟合:模型对训练数据集的准确性比较低,其成本\(J_{train}(\theta)\)比较高,对交叉验证数据集的准确性也比较低,其成本\(J_{cv}(\theta)\)也比较高。
算法模型性能优化
- 过拟合可以采取的措施:
- 获取更多的训练数据
- 减小输入的特征数量
- 欠拟合说明模型太简单了,需要增加模型的复杂度:
- 增加有价值的特征
增加多项式特征
查准率和召回率
- 模型准确性并不能评价一个算法的好坏。因此引入另外两个概念,精确率(Precision,\(P\))和召回率(Recall,\(R\))。具体定义如下:
- 以关注的类为正类,其他类为负类,分类器在测试集上的预测或正确或不正确,四种情况出现的总数分别记作:
- \(TP\)——将正类预测为正类数
- \(FN\)——将正类预测为负类数
- \(FP\)——将负类预测为正类数
\(TN\)——将负类预测为负类数
精确率定义为\[P=\frac{TP}{TP+FP}\]
召回率定义为\[P=\frac{TP}{TP+FN}\]F1 Score
\[F_1Score=2\frac{PR}{P+R}\]
引入此概念后,就可以用一个数值直接判断哪个算法性能更好。