networkx 决策树分类器网络

问题描述

我假设我是网络分析和 networkx 的新手。我有一个包含 300 个我不知道类型(小世界、常规等)的火车网络和 48 个存储为 .edgelist 的测试网络的列表。 我要做的是构建一个用训练网络和训练标签训练的决策树分类器,并根据测试网络和测试标签测试模型的结果,所以这是监督学习中的分类问题:但我收到错误关于我如何将实体传递给模型,甚至在我将网络转换为 numpy 数组之前。

训练和测试网络具有此边缘列表的形式:

0 52 {}
0 95 {}
0 377 {}
0 470 {}
1 27 {}
..

所以所有的权重都不存在。 训练和测试标签数组具有以下形式:

[0 0 0 1 1 0 0 0 2 0 0 0 0 0 0 1 2 0 0 0 0 0 0 2 0 0 2 0 0 0 2 1 1 0 0 0
 0 0 0 0 0 ...]

我正在使用这个创建一系列网络:

# pick up one just to set the type of the array's content
train_network = nx.read_edgelist("path/train_0.edgelist")

train_s = 300

train_networks = np.zeros(train_s,dtype=type(train_network))

for i in range(0,train_s):
    train_networks[i] = nx.read_edgelist("path/train_{i}.edgelist".format(i=i),create_using=nx.DiGraph)

我使用了 create_using=nx.DiGraph、MultiDiGraph 和认的一个 Graph 请记住,图形也可能断开连接。

在将网络传递给决策树之前,我将网络转换为 numpy 数组,但在那里我遇到了以下错误

_train_networks = np.zeros(train_s)
for i in range(0,train_s):
  _train_networks[i] = nx.to_numpy_array(train_networks[i]._adj)

甚至将邻接列表传递给我收到此错误方法,表示图中没有属性“is_directed”。

AttributeError                            Traceback (most recent call last)
<ipython-input-11-2c4e025e0332> in <module>()
      3   print(i)
      4   print(train_networks[i].__dict__)
----> 5   _train_networks[i] = nx.to_numpy_array(train_networks[i]._adj)
      6 
      7 _test_networks = np.zeros(train_s)

/usr/local/lib/python3.7/dist-packages/networkx/convert_matrix.py in to_numpy_array(G,nodelist,dtype,order,multigraph_weight,weight,nonedge)
   1201 
   1202     nlen = len(nodelist)
-> 1203     undirected = not G.is_directed()
   1204     index = dict(zip(nodelist,range(nlen)))
   1205 

AttributeError: 'dict' object has no attribute 'is_directed'

如何有效地转换 numpy 数组中的网络,然后将其传递给模型?或转换为适合 DecisionTreeClassifier 的另一种类型?

from sklearn.tree import DecisionTreeClassifier

names = ["Decision Tree"]
classifiers = [DecisionTreeClassifier(max_depth=5)]

for name,clf in zip(names,classifiers):
  clf.fit(train_networks,train_labels)
  score = clf.score(test_networks,test_labels)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)