【问题标题】:How to train a highly unbalanced data for link prediction using logistic regression如何使用逻辑回归训练高度不平衡的数据进行链接预测
【发布时间】:2020-07-16 09:19:17
【问题描述】:

这是我在 stackoverflow 中的第一个问题。

我是 python 新手,我正在尝试实现链接预测问题。

我有一个这样的列表:

list_pos = [('alpha', 'beta'),
         ('beta','gama')
         ('alpha','lamda')
         ('gama', 'lamda'),
         ('euphor', 'tuphor')]

而且,我能够生成以前不存在的元组对的负例,如下所示:

from itertools import combinations
elements = list(set([e for l in list_pos for e in l])) # find all unique elements

complete_list = list(combinations(elements, 2)) # generate all possible combinations

#convert to sets to negate the order

set1 = [set(l) for l in list_pos]
complete_set = [set(l) for l in complete_list]

# find sets in `complete_set` but not in `set1`
list_neg = [list(l) for l in complete_set if l not in set1]

输出在这里:

list_neg = 
[['gama', 'tuphor'],
 ['gama', 'alpha'],
 ['gama', 'euphor'],
 ['lamda', 'tuphor'],
 ['alpha', 'tuphor'],
 ['beta', 'tuphor'],
 ['euphor', 'lamda'],
 ['lamda', 'beta'],
 ['euphor', 'alpha'],
 ['euphor', 'beta']]

但是,这会导致以下结果 - 对于 5 个正例,我有 10 个负例。

随着原始列表中的项目越来越多,最终我将得到一个高度不平衡的数据集,其中包含大量负面示例,这将影响我的模型训练分数。

我的问题是 - 如何准确地训练这种不平衡的数据集。

为了生成我的最终数据集,我使用以下 -

dflp = pd.DataFrame(list_pos, columns=['user1','user2'])
dflp['link'] = 1
dfln = pd.DataFrame(list_neg, columns=['user1','user2'])
dfln['link'] = 0
df_n = pd.concat([dflp, dfln])
df_n.head()

这样我就有了一个适合应用逻辑回归的数据集

【问题讨论】:

    标签: python list dataframe training-data


    【解决方案1】:

    如果数据集足够大,应该尝试删除一些负例,以获得平衡的数据集。

    如果数据集不够大,您仍然可以删除一些负面示例,并尝试使用 Leave One Out/JackKnife 等交叉验证方法。当训练数据集较小(训练数据集

    【讨论】:

    • 感谢您的建议。我尝试删除负面示例,但输出分数非常低 - 准确地说是 0.55。我正在应用node2vec。然后使用逻辑回归得到分数。
    • 我现在将尝试您建议的方法,但是,我必须使用的最终数据集包含大约 1000 个正例和大约 30000 个负例。你能建议处理这个问题的方法吗
    • 可能预测变量和预测值之间没有关系,或者您需要更多解释性变量。你不能指望总是有好成绩...
    猜你喜欢
    • 1970-01-01
    • 2017-11-09
    • 2020-02-25
    • 2021-06-22
    • 2016-05-05
    • 2014-05-07
    • 2015-01-07
    • 2016-02-09
    • 2016-01-31
    相关资源
    最近更新 更多