Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何利用logistic回归训练用于链路预测的高度不平衡数据_Python_List_Dataframe_Training Data - Fatal编程技术网

Python 如何利用logistic回归训练用于链路预测的高度不平衡数据

Python 如何利用logistic回归训练用于链路预测的高度不平衡数据,python,list,dataframe,training-data,Python,List,Dataframe,Training Data,这是我在stackoverflow的第一个问题 我是python新手,我正在尝试实现链接预测问题 我有这样一份清单: list_pos = [('alpha', 'beta'), ('beta','gama') ('alpha','lamda') ('gama', 'lamda'), ('euphor', 'tuphor')] 并且,我能够生成以前不存在的元组对的否定示例,如下所示: from itertools impo

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

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

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


如果数据集不够大,您仍然可以删除一些负面示例,并尝试交叉验证方法,如遗漏一个/JackKnife。当列车数据集为小于100行的小型列车数据集时,将使用这些方法来训练模型,谢谢您的建议。我尝试过删除负面示例,但输出分数非常低,精确地说是0.55。我正在申请node2vec。然后使用逻辑回归获得分数。我现在将尝试您建议的方法,但是,我必须使用的最终数据集包含大约1000个正面示例和大约30000个负面示例。你能建议一些处理方法吗?也许预测值和预测值之间没有关系,或者你需要更多的解释变量。你不能期望总是有一个好成绩。。。