Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/296.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 图形分类_Python_Machine Learning_Graph - Fatal编程技术网

Python 图形分类

Python 图形分类,python,machine-learning,graph,Python,Machine Learning,Graph,我进行图形分类,读取edgelist文件,拆分以进行训练,并使用networkx测试和检查训练集是否为连接图形: import networkx as nx trainGraph = nx.read_edgelist('trainEdgelist.txt', create_using=nx.Graph(), nodetype=int) nx.is_connected(trainGraph) 如果我想使用10倍交叉验证,并使用类似于: from sklearn.model_selection i

我进行图形分类,读取edgelist文件,拆分以进行训练,并使用networkx测试和检查训练集是否为连接图形:

import networkx as nx
trainGraph = nx.read_edgelist('trainEdgelist.txt', create_using=nx.Graph(), nodetype=int)
nx.is_connected(trainGraph)
如果我想使用10倍交叉验证,并使用类似于:

from sklearn.model_selection import KFold
KFold(n_splits=10, random_state=None, shuffle=False)
如何确保每个折叠的序列集都是连通图


我怎样才能添加这样一个条件呢?

我仍然不完全理解您的目标,我会尽我所能回答您的问题

基本上`返回数据集的索引分割,它的输入是一个类似于数组的对象,这是一个“愚蠢”的函数,它只是拆分一个数组,没有进一步的逻辑

您需要创建具有以下结构的数据集:

类似于数组的对象,其中每个项都是一个连接图(如果适用于您的情况,则为其标签
y
创建另一个数组)

拥有此对象后,可以使用
KFold()
创建多个测试和训练集

为了创建一组连通图,您可以选择多种方法,如:

  • 删除X条随机边并检查图形是否连接(执行N次)
  • 按注释中所述的增量方式添加边和节点,按顺序添加边,并检查图形是否与每个添加连接
问题是它们都很耗时而且可能不会收敛,高度依赖于它们的输入(随机状态和边的顺序)


我的建议是找到图的MST,这是基连通图,要创建它的变体,只需随机添加任何属于/不属于MST的边

您到底想实现什么?通过拆分数据进行k折叠交叉验证,以使每个折叠的序列集都是一个连接图。k折叠来自传统数据,您可以将数据集拆分为更小的独立记录,你不能用graph做这件事,因为它不能被拆分,所以它会保留它的属性,也许你可以模仿k折叠操作,但我需要知道你的用例是什么…@shahaf谢谢你的回答。在创建图形之前,数据保存在edgelists中,如.txt文件。我意识到,当还有时间维度时(就像我的例子),经典的k折叠就不能执行了。在这种情况下,我可以实现前向k折叠,比如:-折叠1:训练[1],测试[2],-折叠2:训练[12],测试[3],-折叠3:训练[1 2 3],测试[4],-折叠4:训练[1 2 3 4],测试[5],-折叠5:训练[1 2 3 4 5],测试[6]