贝叶斯网络可视化

来源:互联网 发布:淘宝上哪家药店是真的 编辑:程序博客网 时间:2024/05/23 17:31

使用F-AI artificial intelligence for F#/.NET 可视化自己的贝叶斯网络。

# -*- coding: utf-8 -*-"""Created on Wed Nov 15 22:11:38 2017@author: Beyond"""import pandas as pdimport itertoolsclass Node(object):    def __init__(self, name, name2, labels, parents, correct_order = None):        self.name = name        self.name2 = name2        self.labels = labels        self.load_excel()        self.parents = parents        self.correct_order = correct_order    def load_excel(self):        self.distributionSet_raw = pd.read_excel('概率矩阵.xlsx', sheetname = self.name2, header=None)        self.discrete = [x+1 for x in list(self.distributionSet_raw.index)]def create_dot_bn(node):    result = {}    result["name"] = node.name    result["space"] = {"discrete":node.discrete, "labels":node.labels}    if len(node.parents) == 0:        set_dict = {}        set_dict["key"] = {}        distribution_list = []        for value, mass in zip(node.discrete, list(node.distributionSet_raw[0])):            distribution_list.append({"value": value,"mass": mass})        set_dict["distribution"] = distribution_list        result["distributionSet"] = [set_dict]        result["parents"] = []    if len(node.parents) == 1:        wrap_set_dict = []        for parent_value in node.parents[0].discrete:            set_dict = {}            set_dict["key"] = {node.parents[0].name: parent_value}            distribution_list = []            for value, mass in zip(node.discrete, list(node.distributionSet_raw[int(parent_value-1)])):                distribution_list.append({"value": value,"mass": mass})            set_dict["distribution"] = distribution_list            wrap_set_dict.append(set_dict)        result["distributionSet"] = wrap_set_dict        result["parents"] = [node.parents[0].name]    if len(node.parents) == 2:        wrap_set_dict = []        for item in itertools.product(node.parents[0].discrete, node.parents[1].discrete):            set_dict = {}            set_dict["key"] = {node.parents[0].name: item[0], node.parents[1].name: item[1]}            distribution_list = []            for value, mass in zip(node.discrete, list(node.distributionSet_raw[int(item[1]-1+(item[0]-1)*len(node.parents[1].discrete))])):                distribution_list.append({"value": value,"mass": mass})            set_dict["distribution"] = distribution_list            wrap_set_dict.append(set_dict)        result["distributionSet"] = wrap_set_dict        result["parents"] = [parent.name for parent in node.parents]    if len(node.parents) > 2:        raise NotImplementedError("Node with more than 2 parents has not been tested")    return resultdef write_dot_bn(out_list, file):    out_dict = {}    out_dict["name"] = "bnt"    out_dict["variables"] = out_list    final_dict = str(out_dict).replace('\'','"')    for spaces in ['{',',','[',']','}']:        final_dict = final_dict.replace(spaces,spaces+'\n')    final_dict = final_dict.replace(']\n,','\n],')    final_dict = final_dict.replace(']\n}\n','\n]\n}')    final_dict = final_dict.replace('{\n}\n','{}')    final_dict = final_dict.replace('}\n','\n}')    final_dict = final_dict.replace('\n}],','}\n],')    final_dict = final_dict.replace('\n\n]',']')    final_dict = final_dict.replace('\n}]\n}','}\n]\n}')    with open(file, 'w') as file:     file.write(final_dict)node2 = Node("C", "Class", ["none","none","none","none","none","none","none",                            "none","none","none","none","none","none","none",                            "none","none"], [], correct_order = correct_order)node1 = Node("L", "Location", ["none","none","none"], [node2])node3 = Node("O","Object", ["none","none","none","none","none","none"],[node2])node4 = Node("S","Scenario", ["none","none","none","none"], [node3])node5 = Node("R","Relationship", ["none","none","none","none","none","none","none"], [node2])node6 = Node("Or","Organization",["none","none"],[node2])node7 = Node("N","People(N)",["none","none"],[node5])node8 = Node("V","Violence",["none","none","none"],[node6,node4])node9 = Node("Pn","Pn",["none","none","none"],[node7])node10 = Node("Ps","policestrategy(Ps)",["none","none","none"],[node8,node9])node11 = Node("D","D",["none","none","none"],[node6,node9])node12 = Node("Ca","Ca",["none","none","none"],[node8,node7])out_list = [            create_dot_bn(node2), create_dot_bn(node1),             create_dot_bn(node3), create_dot_bn(node4),             create_dot_bn(node5),create_dot_bn(node6),             create_dot_bn(node7),create_dot_bn(node8),             create_dot_bn(node9),create_dot_bn(node10),             create_dot_bn(node11),create_dot_bn(node12),             ]write_dot_bn(out_list, "bnt_random.bn")
原创粉丝点击