我尝试使用自动编码器将数据集的维数从154减少到20或30。
数据集由用户行为特征组成,如上个月的支出、上个月的活动天数等。除此之外,我还生成了一些特征,如过去3个月的累计支出、上个月支出与上个月支出之间的差异。
我使用的代码是从kaggle笔记本(https://www.kaggle.com/code/ohseokkim/dectecting-anomaly-using-autoencoder?scriptVersionId=87181418)复制的
`
class AnomalyDetector(Model):
def __init__(self):
super(AnomalyDetector, self).__init__()
self.encoder = tf.keras.Sequential([
layers.Dense(128, activation="relu"),
layers.Dense(64, activation="relu"),
layers.Dense(32, activation="relu")])
self.decoder = tf.keras.Sequential([
layers.Dense(64, activation="relu"),
layers.Dense(128, activation="relu"),
layers.Dense(154, activation="sigmoid")])
def call(self, x):
encoded = self.encoder(x)
decoded = self.decoder(encoded)
return decoded
autoencoder = AnomalyDetector()
`
我的损失很高,而且没有随着时间的推移而改善。我在这里做错了什么。
Epoch 1/20
71/71 [==============================] - 1s 9ms/step - loss: 5351.0259 - val_loss: 5342.5894
我正在尝试寻找更好的方法来消除冗余列,同时不丢失重要信息
1条答案
按热度按时间2skhul331#
根据我使用自动编码器的经验,它们往往有爆炸性的梯度,这有助于剪辑它们。