如何使用逻辑回归训练高度不平衡的数据进行链接预测

时间:2020-07-16 09:19:17

标签: python list dataframe training-data

这是我在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()

这样,我就有了适用于逻辑回归的数据集

1 个答案:

答案 0 :(得分:-1)

如果数据集足够大,则应尝试删除一些负面示例,以使数据集平衡。

如果数据集不够大,您仍然可以删除一些否定示例,并尝试使用交叉验证方法,如“ Leave One Out / JackKnife”。当火车数据集较小(火车数据集<100行)时,将使用这些训练模型的方法