过拟合和欠拟合都是机器学习模型常见的问题。
过拟合(Overfitting):模型过于复杂,学习训练数据集的噪声和随机误差,而不能泛化到新数据。表现为训练准确率很高但测试准确率很低。
欠拟合(Underfitting):模型过于简单,不能捕捉训练数据的模式,导致训练准确率和测试准确率都很低。
常用的避免过拟合和欠拟合的方法有:
- 增加数据集量:更多数据可以学习真实的模式,减少噪声影响。
- 减少特征数量:选取与目标高度相关的特征,删除冗余特征。可以减小模型复杂度。
- 正则化:引入正则化项惩罚模型复杂度,如L1/L2正则化。 Ridge/Lasso回归使用L2正则化。
- dropout:随机忽略神经网络的一些节点和连接,减少过拟合。
- 交叉验证:使用训练数据集的子集进行验证,选择模型的最佳复杂度。
- 权重衰减:随着网络深度增加,逐渐减小权重大小,减轻过拟合。
代码示例:
python
# 增加数据集
df = pd.read_csv('more_data.csv')
# L1正则化(LASSO)
from sklearn.linear_model import Lasso
lasso = Lasso(alpha=0.1)
# 垂直dropout
model.add(layers.Dropout(0.2))
# 5折交叉验证
from sklearn.model_selection import cross_val_score
scores = cross_val_score(model, X, y, cv=5)
# 权重衰减
model.add(layers.Dense(64, activation='relu',
kernel_regularizer=tf.keras.regularizers.l2(0.01)))