tadpole / DHNE

the Implementation of "Structural Deep Embedding for Hyper-Networks"(AAA20I8)
http://nrl.thumedialab.com/Structural-Deep-Embedding-for-Hyper-Networks
44 stars 14 forks source link

学长你好,我改了下代码中负采样的数目,实验结果因这个参数改变很大 #3

Closed Daya-Jin closed 5 years ago

Daya-Jin commented 5 years ago

如题,代码中默认的负采样比例是1:5,如果改成1:1,跑出来的AUC也只在0.6左右浮动,ACC表现也不太好

WangHexie commented 5 years ago

你题目结果改变大和你下面的写的似乎有些不符啊
不过我跑出来结果也不是很好,甚至不如随机向量,也在尝试处理这个问题

Daya-Jin commented 5 years ago

我题目的意思是代码实验结果基本就是根据负采样的比例在浮动了,正负比例越低AUC越高,我个人理解这个实验结果的数据应该是由负样本堆出来的

Daya-Jin commented 5 years ago

另,补充的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)]))
WangHexie commented 5 years ago

负采样的个数确实要有一定要求的,像word2vec这个需要负采样的算法,小数据集的话负采样个数得在五到二十个这样,大数据集可以降到三到五个。 最终参数怎么选择还是得看具体实验吧

Daya-Jin commented 5 years ago

了解了,感谢