算法面试必备-----贝壳算法面试准备
算法面试必备-----贝壳算法面试准备
机器学习基础
1、过拟合和欠拟合的学习曲线怎么画,横纵坐标轴分别代表什么?实际应用当中,如何区分你是过拟合还是前拟合?
学习曲线是什么?
学习曲线就是通过画出不同训练集大小时训练集和交叉验证的准确率,可以看到模型在新数据上的表现,进而来判断模型是否方差偏高或偏差过高,以及增大训练集是否可以减小过拟合。
学习曲线与交叉验证的关系
由于一次学习的数据不够准确,因此,使用交叉验证,设置多次(组)数据,获得多组train_scores, test_scores, 返回给learning_curve API。
怎么画?
在画学习曲线时,横轴为训练样本的数量,纵轴为准确率。
sklearn中sklearn.model_selection.learning_curve函数说明:
通过cv设置交叉验证,取几次(组)数据,通过train_sizes设置每一次取值,在不同训练集大小上计算得分。
train_sizes,train_scores,test_score = learning_curve ( estimator, X, y, groups=None, train_sizes=array([0.1, 0.33, 0.55, 0.78, 1. ]), cv=’warn’, scoring=None)
estimator:估计器,用什么模型进行学习;
cv:交叉验证生成器,确定交叉验证拆分策略;
画训练集的曲线时,横轴为train_sizes, 纵轴为train_scores_mean; train_scores为二维数组,行代表train_sizes不同时的得分,列表示取cv组数据。
画测试集的曲线时:横轴为train_sizes, 纵轴为test_scores_mean; test_scores为二维数组
learning_curve为什么运行时间那么长:模型要进行train_sizes * cv次运行
如何判断?
欠拟合情况:随着训练样本数增大,训练集得分和验证集得分收敛,并且两者的收敛值很接近。
过拟合情况:随着训练样本数增大,训练集得分和验证集得分相差还是很大。
欠拟合
当训练集和测试集的误差收敛但却很高时,为高偏差。
左上角的偏差很高,训练集和验证集的准确率都很低,很可能是欠拟合。
我们可以增加模型参数,比如,构建更多的特征,减小正则项。
此时通过增加数据量是不起作用的。
过拟合
当训练集和测试集的误差之间有大的差距时,为高方差。
当训练集的准确率比其他独立数据集上的测试结果的准确率要高时,一般都是过拟合。
右上角方差很高,训练集和验证集的准确率相差太多,应该是过拟合。
我们可以增大训练集,降低模型复杂度,增大正则项,或者通过特征选择减少特征数。
理想情况
理想情况是是找到偏差和方差都很小的情况,即收敛且误差较小。