在咱们构建完机器学习模型,常常会遇到训练获得模型没法正确预测,这以后咱们每每会采起下面的一些方案:机器学习
如果不了解模型具体的问题所在,而根据随便拿出一个方案去试错,这每每都是既费力又费心,每每个把月过去了仍然在进行模型的调试。函数
将一个数据集先按下面进行划分:学习
1.线性回归,直接使用代价函数便可,以下:测试
for i = 1:m %依次递增的数据量进行训练模型 theta = trainLinearReg(X(1:i,:), y(1:i), lambda); %train数据集的测试,使用时去除lambda error_train(i) =linearRegCostFunction(X(1:i,:), y(1:i), theta, 0); %cv数据集的测试 error_val(i) = linearRegCostFunction(Xval, yval, theta, 0); end
2.logistic回归,引出0-1错分率:
优化
欠拟合:高误差,Jcv近似于Jtrain。
过拟合:高方差,Jcv远大于Jtrain。
这2个问题是机器学习中最经典的错误状况,不少现象也是由它们一手操办的,来看看下面的3种状况:3d
根据上面偏差计算部分得来的Training set和cv set获得相应图片
调试
High bias:Jcv与Jtrain很是接近,加入过多样本,对模型的优化没做用
code
High variance:Jcv远大于Jtrain,增长样本,能够对模型进行优化
blog
多项式特征的选择的多少每每也会给咱们带来很大的麻烦,过多的多项式特征会使模型过拟合,而过少的多项式特征会使模型欠拟合。
那么咱们该如何进行多项式的选择,下面便引入解决方案:
图片
正规化的引入,就是为了防止过拟合,而lambda对拟合程度有着很大影响。如果没有lambda则会出现过拟合现象;而如果lambda过大则会出现欠拟合现象。
那怎么选择一个较好的lambda呢?
方法相似于多项式特征的选取,稍有不一样的就是本身要定义lambda集合。
测试代码段
for i = 1:length(lambda_vec) lambda = lambda_vec(i); theta = trainLinearReg(X, y, lambda); %评估时切记不可在cv set和test set中加入lambda值 error_train(i) = linearRegCostFunction(X, y, theta, 0); error_val(i) = linearRegCostFunction(Xval, yval, theta, 0); end
测试结果:
不少状况下由于特征不少,咱们每每很难将数据展示出来,而可视化的数据每每给咱们的分析带来了很大的帮助;learning curve的绘制无疑是一大助手,learning curve一般是由training set和cv set的偏差绘制出来的,中间最重要的就是将training set使用递增的方式进行训练,而cv set则是所有进行使用。如【计算模型偏差的代码部分】。