aimclub / aimclub/BAMT

DiscreteNode type unhashable error when whitelisting

Đang mở
#138 0 bình luận 2 reaction 2 người được giao Được @jrzkaminski nhận Xem trên GitHub
invalid
Ngôn ngữ chính
Python
Star
134
Fork
23
Chỉ số merge pull request
Không có pull request nào được merge trong 30 ngày

Mô tả

Пробовал запустить следующий сниппет, он упал с ошибкой. init_edges и white_list в params - одинаковые:

```` python
from bamt.networks import DiscreteBN
from sklearn.preprocessing import LabelEncoder as le
from pgmpy.estimators import K2

p = Preprocessor([('encoder',le())])
discretized_data, est = p.apply(tdf)
info = p.info

bn = DiscreteBN()
bn.add_nodes(info) # add nodes from info obtained from preprocessing
bn.get_info() # to make sure that the network recognizes the variables as discrete

edges= [('label',x) for x in tdf.columns[1:]]

params = {
# Defines initial nodes of the network, list of node names
'init_nodes':['label'],
# Defines initial edges of the network, list of tuples (node1, node2)
'init_edges':edges,
# Strictly set edges where algoritm must learn, list of tuples (node1, node2)
'white_list':edges,
# blacklist edges, list of tuples (node1, node2)
'bl_add': [],
# Allow algorithm to remove edges defined by user, bool
'remove_init_edges':False
}

# Structure learning using K2Score and parameters defined above
bn.add_edges(discretized_data, scoring_function=('K2', K2), params=params)
````

Также менял `params['white_list']`, ставил туда лист всех пар нодов, произошло то же самое:

```` python
def create_pairs_itertools(string_array):
return list(itertools.combinations(string_array, 2))

pos_edges = create_pairs_itertools(tdf.columns[1:])

params = {
# Defines initial nodes of the network, list of node names
'init_nodes':['label'],
# Defines initial edges of the network, list of tuples (node1, node2)
'init_edges':edges,
# Strictly set edges where algoritm must learn, list of tuples (node1, node2)
'white_list':pos_edges,
# blacklist edges, list of tuples (node1, node2)
'bl_add': [],
# Allow algorithm to remove edges defined by user, bool
'remove_init_edges':False
}

bn.add_edges(discretized_data, scoring_function=('K2', K2), params=params)
````
Текст ошибки:

```` python
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
Cell In[54], line 19
5 params = {
6 # Defines initial nodes of the network, list of node names
7 'init_nodes':['label'],
(...) 15 'remove_init_edges':False
16 }
18 # Structure learning using K2Score and parameters defined above
---> 19 bn.add_edges(discretized_data, scoring_function=('K2', K2), params=params)
21 bn.plot('foo.html') # Plot the network, save it to foo.html, NOT rendered in notebook

File ~/anaconda3/envs/jupyter_env/lib/python3.11/site-packages/bamt/networks/base.py:200, in BaseNetwork.add_edges(self, data, scoring_function, progress_bar, classifier, regressor, params, optimizer, **kwargs)
196 return None
198 self.sf_name = scoring_function[0]
--> 200 worker.build(
201 data=data,
202 params=params,
203 classifier=classifier,
204 regressor=regressor,
205 progress_bar=progress_bar,
206 **kwargs,
207 )
209 # update family
210 self.nodes = worker.skeleton["V"]

File ~/anaconda3/envs/jupyter_env/lib/python3.11/site-packages/bamt/builders/hc_builder.py:201, in HCStructureBuilder.build(self, data, progress_bar, classifier, regressor, params, **kwargs)
199 self.restrict(data, init_nodes, bl_add)
200 if self.scoring_function[0] == "K2":
--> 201 self.apply_K2(data=data, progress_bar=progress_bar, **self.params)
202 elif self.scoring_function[0] in ["MI", "LL", "BIC", "AIC"]:
203 self.apply_group1(data=data, progress_bar=progress_bar, **self.params)

File ~/anaconda3/envs/jupyter_env/lib/python3.11/site-packages/bamt/builders/hc_builder.py:60, in HillClimbDefiner.apply_K2(self, data, init_edges, progress_bar, remove_init_edges, white_list)
58 if white_list:
59 all_possible_edges = list(permutations(self.vertices, 2))
---> 60 forbidden_edges |= set(all_possible_edges) - set(white_list)
62 if not init_edges:
63 expert_knowledge = ExpertKnowledge(forbidden_edges=forbidden_edges)

TypeError: unhashable type: 'DiscreteNode'

````

Версия самая последняя, свежая.

```` bash
pip install bamt
````

Наконец, если оставить whitelist пустым - тогда всё начинает просчитываться:

```` python
params = {
# Defines initial nodes of the network, list of node names
'init_nodes':['label'],
# Defines initial edges of the network, list of tuples (node1, node2)
'init_edges':edges,
# Strictly set edges where algoritm must learn, list of tuples (node1, node2)
'white_list':None,
# blacklist edges, list of tuples (node1, node2)
'bl_add': [],
# Allow algorithm to remove edges defined by user, bool
'remove_init_edges':False
}
````

Hướng dẫn đóng góp

Chưa lập chỉ mục được hướng dẫn đóng góp cho kho mã nguồn này

Đánh giá

Issue này chưa được đánh giá.

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.