机器学习中过拟合问题出现的数据原因
创作时间:
作者:
@小白创作中心
机器学习中过拟合问题出现的数据原因
引用
CSDN
1.
https://m.blog.csdn.net/weixin_65259109/article/details/145698527
过拟合是机器学习中常见的问题,它会导致模型在训练数据上表现很好,但在新数据上泛化能力差。本文将探讨导致过拟合的数据原因,并通过实证研究验证这些因素的影响。
1 嘈杂的训练数据
- 某些样本的输入本身没有任何的实际意义。例如,在MNIST数据集中输入一张全黑的图片,其不能代表任何数字。
- 输入是有效的,但是标签是错误的。这样的输入会极大的影响训练过程。
2 模糊特征
- 问题没有一个明确的界限,即标签没有办法清晰的界定。例如,如果单从图像来看,是没有办法清晰地区分苹果是未成熟的、成熟的还是腐烂的。
- 问题是没有办法解决的,其随机性较大。造成如此的原因大概是没有收集到足够多的数据,或者没有将问题进行更详细地拆分。例如,即使是相同的前一天的气温气压输入,也没有办法确定下一天的温度。也就是说,会出现前一天相同的气温气压输入但是下一天出现不同的温度。
3 罕见特征
- 机器学习的是数据整体的数据分布情况。如果机器学习模型在包含罕见特征的数据集上进行训练,那么模型很容易出现过拟合。你可以把过拟合理解为模型只是记住了训练样本的种种细节,而不是数据整体的分布。罕见样本的出现本就不在探究目的内,但是其出现会诱导模型更容易记住训练样本的具体形状,从而导致过拟合。
4 虚假的相关性
- 虚假的相关性侧重于描述样本到标签的映射。一些样本的某部分的特征可能会由于抽样方法的偏差而使得模型训练出不合理的模型。例如,假设在100个样本中(每个样本是一段文本),词表中有一个单词,这个单词在100个样本中均出现,对于标签来说,这100个样本中有60个是正面标签,40个是反面标签。这样模型在训练的过程中就会训练出这样的模型,一旦这个单词出现,那么模型就会更倾向将这句话分配到正面标签中,即使这个单词与正面还是反面标签无关!
5 如何去证明上述数据问题会对模型的训练产生影响?
上述4个方面的数据问题可以抽象为噪声数据对模型训练以何种方式产生影响。那么,我们假设噪声数据为白噪声,利用对比实验来证明噪声数据对模型训练确实有影响。
我们的基本流程是在mnist的每个样本的特征后加入白噪声通道。例如一个样本有784个特征,那么我再增加784个随机特征来进行干扰,最终形成1568个特征用于表示一个样本,从而去测噪声数据对模型训练的影响。为了更科学的进行对比实验,我们同样引入784个没有意义的全零特征用于保持数据在训练时的输入形状的一致。
from tensorflow.keras.datasets import mnist
import numpy as np
(train_images,train_labels),_=mnist.load_data()
发现其是一个三维张量,并且每个数字的取值范围是0-255,所以要对张量的形状进行改变并且要对里面的数值进行归一化处理从而辅助模型训练。
train_images = train_images.reshape(60000,28*28)
train_images = train_images.astype('float32')/255
接下来进行输入数据的构建。
train_images_with_noise_channels = np.concatenate(
[train_images,np.random.random((len(train_images),784))],
axis=1
)
train_images_with_zeros_channels = np.concatenate(
[train_images,np.zeros((len(train_images),784))],
axis=1
)
接下来构建模型。
from tensorflow import keras
from tensorflow.keras import layers
def get_model():
model = keras.Sequential(
[
layers.Dense(512,activation='relu'),
layers.Dense(10,activation='softmax')
]
)
model.compile(
optimizer='rmsprop',
loss="sparse_categorical_crossentropy",
metrics=['accuracy']
)
return model
分别训练两个模型。
model = get_model()
history_noise=model.fit(
train_images_with_noise_channels,train_labels,
epochs=10,
batch_size=128,
validation_split=0.2
)
model = get_model()
history_zeros=model.fit(
train_images_with_zeros_channels,train_labels,
epochs=10,
batch_size=128,
validation_split=0.2
)
进行数据可视化。
val_acc_noise = history_noise.history['val_accuracy']
val_acc_zeros = history_zeros.history['val_accuracy']
epochs = range(1,11)
plt.plot(epochs,
val_acc_noise,
'b-',
label="val_acc_noise"
)
plt.plot(epochs,
val_acc_zeros,
'b--',
label="val_acc_zeros"
)
plt.title('Effect of noise channels on validation accuracy')
plt.xlabel('epochs')
plt.ylabel('accuracy')
plt.legend()
可以看到,添加了噪声的数据在训练时在验证集产生的表现要普遍低于没有添加噪声的数据。
为此,可以使用特征选择的方法确定哪些特征是有用的哪些特征是无用的。有用性分数是衡量特征对于任务来说所包含信息量的大小,可以用来进行特征选择。
热门推荐
n+1的1是基本工资还是平均工资?赔偿你都算对了吗
去云南西南方向旅游攻略
深宫曲应钟攻略:剧情内容详解与关键事件解析
韩愈《原毁》文言知识梳理
拖延并不一定是懒惰!也许是孩子的一种求助方式
劳动法全文如何查询具体条款?
赛事分析:阿森纳曾经赢得过欧冠冠军吗?阿森纳欧冠历史战绩一览
说说胃肠镜检查那些事儿
水泥企业超低排放改造:政策、标准与解决方案详解
湿热体质的患者应该吃什么比较好
致炫的方向盘如何进行调节?调节后对驾驶有何影响?
晶振参数全攻略:电子专业小伙伴的知识武器,一文带你看懂!
罗斯威尔“飞碟”事件揭秘:外星人真的存在吗?
罗斯威尔“飞碟”事件揭秘:外星人真的存在吗?
泪沟的危害:从眼部不适到心理压力
泪沟全面解析:成因、种类及改善方法
科技创新生态孕育未来产业新星 破解“杭州六小龙”腾飞密码
蛙泳技术图解:7种科学训练方法助你掌握完美泳姿
如何理解美股对A股的影响?这些影响对投资策略有何指导?
10种简单又惊艳的摆盘技巧,让每一餐都成为视觉与味觉的双重享受
Excel批注字太小?三种方法轻松统一设置
鼻涕和痰是连着的吗?一文读懂它们的关系与健康建议
发生高原反应代表身体好还是不好?去高原前你需要知道这些
厨房煤气管道改造的三个注意事项
绿豆的功效与应用
中国凹耳蛙天下奇
MySQL中的并发控制,读写锁,和锁的粒度
梅西连续7场制造进球,但未能阻止球队在冠军杯八强赛中出局
甲钴胺迈之灵对于腰疼和腿部麻木有效吗
没有固定工资也能退税?别让退税款 “悄悄溜走”