我在使用H2O自编码器进行异常检测以找出模型中的异常数据,但问题是自编码器只接受数值预测变量。我的需求是基于卡号或商户号来找出异常数据。卡号是12位数字(例如342178901244),且大多是唯一的,因此属于名义数据,我们不能使用独热编码,因为这会根据唯一的卡号创建许多新字段。所以请建议有什么方法可以包含分类数据,同时仍然可以运行自编码器。
model=H2OAutoEncoderEstimator(activation="Tanh", hidden=[70], ignore_const_cols=False, epochs=40)model.train(x=predictors,training_frame=train.hex)#Get anomalous valuestest_rec_error=model.anomaly(test.hex,per_feature=True)train_rec_error=model.anomaly(train.hex,per_feature=True)recon_error_df['outlier'] = np.where(recon_error_df['Reconstruction.MSE'] > top_whisker, 'outlier', 'no_outlier')
回答:
你不能将几乎唯一的分类特征放入预测变量(无论是自编码器还是其他任何模型)并期望它能正常工作。
相反,你需要从中提取有意义的特征,这取决于你想要解决的问题。例如,如果是信用卡号,你可以添加一个特征来编码卡的发行机构(如VISA、万事达、美国运通等)。限制只有你的想象力和对领域的了解。