对于我的硕士论文,我必须为人工神经网络建模,以预测消费者对连锁生产中的过程中参数的抱怨程度。不幸的是,该公司给了我不受监管的收集数据,并且有很多缺失的数据。大约一年的数据按开放日分组,所以我有260天的17列物理值。为了推断丢失的值,我尝试对去噪自动编码器建模,但效果不佳。为了训练模型,我只有113天的完整数据。这些值是实值,具有不同的单位和范围(有些在(100,150)范围内,有些在(90.03,90.35)范围内。)
要模拟噪声并像缺少动态效果一样,根本不是随机的,我在这种情况下修改了一个值(Random.random()
def DAE(train,l1,l2,num_layer):
input_size = train.shape[1]
#num_layer = 2
theta = 1 #int(input_size/num_layer)
code_size = input_size-theta*(num_layer+1)
epochss=1000
lrr=0.01
autoencoder = Sequential()
autoencoder.add(Dense(input_size, input_shape=(input_size,), kernel_regularizer=regularizers.l2(0.01),
activity_regularizer=regularizers.l1(0.01)))
for index in range(num_layer):
layer_size=input_size-(index+1)*theta
autoencoder.add(Dense(layer_size,input_shape=(input_size,),activation='linear'))
print(layer_size)
autoencoder.add(Dense(code_size,activation='linear'))
print(code_size)
for index in range(num_layer):
layer_size=input_size-(num_layer-index)*theta
autoencoder.add(Dense(layer_size,input_shape=(input_size,),activation='linear'))
print(layer_size)
autoencoder.add(Dense(input_size,activation='linear'))
autoencoder.compile(Adam(lr=lrr), loss='mean_squared_error', metrics=['accuracy'])
return autoencoder
autoencoder = DAE(AE_train,l1,l2,3)
history = autoencoder.fit(AE_train,AE_target,epochs=1000,validation_split=0.2)
在火车和测试损失图上,它确实快速收敛,但是经过一定时期后,它出现了一个很大的峰值,并随即出现了对数衰减。我不明白为什么会上升。
当我尝试预测缺失值时,我通过列均值来更改nan。该预测始终超出特定物理值的最大最小值范围。
这是我的问题,如何处理一小部分值中的缺失数据?在这里,我有不同类型的值(单位),我应该标准化这些值吗?但是,如果这样做的话,应该如何重构它们,因为我想推断出真正的价值。是否有比ML系列技术中的自动编码器更好的丢失数据插补解决方案?
感谢您阅读我的问题,甚至还给我带来了答案。