Closed Daya-Jin closed 5 years ago
你题目结果改变大和你下面的写的似乎有些不符啊
不过我跑出来结果也不是很好,甚至不如随机向量,也在尝试处理这个问题
我题目的意思是代码实验结果基本就是根据负采样的比例在浮动了,正负比例越低AUC越高,我个人理解这个实验结果的数据应该是由负样本堆出来的
另,补充的AUC代码如下
from sklearn.metrics import roc_auc_score
import tensorflow as tf
...
def auc(self,y_true,y_pred):
score = tf.py_func( lambda y_true, y_pred : roc_auc_score( y_true, y_pred, average='macro', sample_weight=None).astype('float32'),
[y_true, y_pred],
'float32',
stateful=False,
name='sklearnAUC' )
return score
...
self.model.compile(optimizer=optimizers.SGD(lr=self.options.learning_rate),
loss=[self.sparse_autoencoder_error]*3+['binary_crossentropy'],
loss_weights=[self.options.alpha]*3+[1.0],
metrics=dict([('classify_layer', 'accuracy'),('classify_layer', self.auc)]))
负采样的个数确实要有一定要求的,像word2vec这个需要负采样的算法,小数据集的话负采样个数得在五到二十个这样,大数据集可以降到三到五个。 最终参数怎么选择还是得看具体实验吧
了解了,感谢
如题,代码中默认的负采样比例是1:5,如果改成1:1,跑出来的AUC也只在0.6左右浮动,ACC表现也不太好