防止过拟合方法

一、防止过拟合的方法有哪些?

过拟合是指模型参数拟合过程中的问题。由于训练集数据包含抽样误差,复杂模型在进行拟合过程中,也很好的拟合了抽样误差。具体表现就是最终模型在训练集数据上拟合效果很好,而在测试集数据上拟合效果差。最终导致模型泛化能力弱。

为了防止过拟合,可以采用以下几种方法解决:

  • 模型参数:减少特征、权值衰减、Early stopping

  • 数据集:数据集扩增、验证数据

  • 增加罚项:正则化方法、Dropout

1、模型参数

减少特征:人工选择特征,或利用算法选取较好特征。

Early stopping:对模型进行训练时既是对模型参数进行学习更新的过程,这过程中往往会用到例如梯度下降之类的学习算法。Early stopping是在训练数据集迭代收敛之前停止迭代来防止过拟合。一般的做法为,连续10次最佳accuracy不再提高时,就可以停止迭代。

2、数据集

扩增数据集:扩增数据集是最有效的解决过拟合问题的办法。让模型“看见”更多的“例外情况”,模型才会不断修正自己,从而得到更好的结果。一般来说,可以从数据源头采集更多数据;进行重采样;复制原有数据并加上随机噪声等。

例如,在物体分类问题中,如果没有更多图片,可根据一定规则进行数据增强(data argumentation),通过对图像的平移、翻转、切割、缩放等方式将数据集进行成倍扩充。

image

3、增加惩罚项

L1正则化:L1正则基于L1范数,即在目标函数后面加上参数的L1范数和项。n是样本的个数,λ为正则项系数。相比L2,L1 正则化的解具有稀疏性。

`

L=Ein+λ∑j | wj |

`

L2正则化:L2正则基于L2范数,即在目标函数后面加上参数的L2范数和项

`

L=Ein+λ∑j w2j

`

其中,若 λ 近似为 0,正则化失效,容易造成过拟合。相反,若 λ 很大,圆形区域很小,w 离 Ein 最优解的位置较远。w 被限制在一个很小的区域内变化,w 普遍较小且接近 0,起到了正则化的效果。

dropout(随机失活):Dropout方法通过修改人工神经网络中隐藏层的神经元的个数(随机删除一些神经元,下次迭代可不同)来防止人工神经网络的过拟合。例如,在训练时,每次随机(如 50% 概率)忽略隐层的某些节点。

二、鸢尾花数据预测

使用逻辑回归(Logistic Regression)对鸢尾花数据(多分类问题)进行预测,可以直接使用sklearn中的LR方法,并尝试使用不同的参数,包括正则化的方法,正则项系数,求解优化器,以及将二分类模型转化为多分类模型的方法。

获取鸢尾花数据的方法:

from sklearn.datasets import load_iris

X, y = load_iris(return_X_y=True)

代码:


    from sklearn.datasets import load_iris

    from sklearn.model_selection importtrain_test_split

    from sklearn.linear_model importLogisticRegression

    from sklearn.metrics importaccuracy_score


    X, y = load_iris(return_X_y=True)

    X_train, X_test, y_train, y_test =train_test_split(X, y, test_size=0.5, random_state=42)


clf = LogisticRegression(random_state=0, penalty='l2', C=0.1, solver='lbfgs', multi_class='multinomial')

clf.fit(X_train, y_train)


y_pred = clf.predict(X_test)

print(accuracy_score(y_test, y_pred))

你可能感兴趣的:(防止过拟合方法)