不容易产生过拟合的算法

1.SVM

        首先,SVM有个L2正则项,在目标函数中加入这个对模型的规模进行了限制。L2正则为什么能保证控制过拟合,这里面就有个哲学思想,叫做奥卡姆剃刀法则,简单来说这个想法就是“能简单说的话,不要复杂的说”。L2正则项就能代表模型的复杂度,根据奥卡姆,如果同样效果那么越简单的模型泛化效果越好。所以最优化过程中尽量追求小的L2的值就会提高泛化能力,也就抑制了过拟合的问题。其次,会通过松弛变量的方法处理掉噪音。


2.adaboost

### CNN算法导致过拟合的因素及原因分析 #### 训练集规模与模型复杂度匹配 当训练集的数据量足以支撑所使用的CNN模型复杂度时,容易发生过拟合现象。具体表现为训练集数量级远小于模型参数数目,这使得模型能够在训练集中找到特定模式并记住这些细节而非泛化能力的学习[^4]。 #### 数据分布差异 如果用于训练的样本集合与其对应的验证或测试阶段所用数据之间存在显著统计特性上的同,则可能导致模型在新数据上表现佳。这种情况下,即使是在原始训练数据上有很好的性能也能保证其具有良好的泛化效果。 #### 噪声影响 存在于输入图像或其他形式传感器读数内的随机扰动可能会被高度复杂的神经网络视为有用的信息加以利用,在实际应用环境中却无法重现此类异常情况,进而造成预测准确性下降。特别是当这类干扰因素占据了一定比例并且足够明显以至于让机器学习到了错误规律的时候更为严重。 #### 过度迭代优化 随着梯度下降过程中更新次数增加,尽管损失函数持续减小直至收敛于局部最优解附近,但如果继续执行过多轮次调整操作的话,就有可能使某些层内部连接权重变得非常大或者特别小,最终引起对于细微变化极其敏感的现象——即所谓的“过训练”。此时虽然表面上看误差已经很小甚至接近零了,但实际上已丧失了对外部未知实例做出合理判断的能力。 ```python import tensorflow as tf from tensorflow.keras import layers, models def create_cnn_model(): model = models.Sequential() # 添加卷积层和池化层... model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(64, 64, 3))) model.add(layers.MaxPooling2D((2, 2))) # ...其他层... return model # 创建一个简单的CNN架构 model = create_cnn_model() # 编译模型 model.compile(optimizer='adam', loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True), metrics=['accuracy']) # 模拟过度训练的情况 history = model.fit(train_images, train_labels, epochs=100, validation_data=(val_images, val_labels)) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值