问题描述
我假设我是网络分析和 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 (将#修改为@)