天天看點

【求助】Python運作不出結果

最近使用pgmpy來計算條件機率,定義了61個節點(是不是太多了?)結果發現結果跑不出來比較爆記憶體,想請大神幫忙看看這是什麼情況?

from pgmpy.factors.discrete import TabularCPD
from pgmpy.inference import VariableElimination
from pgmpy.models import BayesianModel

Tree_modle = BayesianModel([("2","61"),("3","61"),("4","1"),("5","49"),("6","49"),("7","2"),("8","3"),("9","3"),("10","4"),
                            ("11","4"),("12","5"),("13","5"),("14","6"),("15","6"),("16","7"),("17","48"),("18","60"),("19","60"),("20","51"),
                            ("20","59"),("21","51"),("21","59"),("22","57"),("23","57"),("24","22"),("24","23"),("24","25"),("24","26"),
                            ("24","27"),("24","36"),("24","37"),("24","39"),("25","55"),("26","55"),("27","58"),("28","10"),("29","50"),
                            ("30","50"),("31","11"),("32","13"),("33","13"),("34","47"),("35","47"),("36","56"),("37","52"),("38","52"),
                            ("39","53"),("40","22"),("41","27"),("42","36"),("43","37"),("44","38"),("45","38"),("46","39"),("47","48"),
                            ("48","7"),("49","2"),("50","11"),("51","10"),("52","56"),("53","54"),("54","9"),("55","58"),("56","53"),("57","54"),
                            ("58","9"),("59","8"),("60","8"),("61","1")])
n1 = TabularCPD(
    variable="1", # 節點名稱
    variable_card=2, # 節點取值個數
    values=[[1, 1, 1, 0], # 該節點的機率表
    [0, 0, 0, 1]],
    evidence=["4", "61"], # 該節點的依賴節點
    evidence_card=[2, 2] # 依賴節點的取值個數
)
n2 = TabularCPD(
    variable="2", # 節點名稱
    variable_card=2, # 節點取值個數
    values=[[1, 1, 1, 0], # 該節點的機率表
    [0, 0, 0, 1]],
    evidence=["7", "49"], # 該節點的依賴節點
    evidence_card=[2, 2] # 依賴節點的取值個數
)
n3 = TabularCPD(
    variable="3", # 節點名稱
    variable_card=2, # 節點取值個數
    values=[[1, 1, 1, 0], # 該節點的機率表
    [0, 0, 0, 1]],
    evidence=["8", "9"], # 該節點的依賴節點
    evidence_card=[2, 2] # 依賴節點的取值個數
)
n4 = TabularCPD(
    variable="4", # 節點名稱
    variable_card=2, # 節點取值個數
    values=[[1, 1, 1, 0], # 該節點的機率表
    [0, 0, 0, 1]],
    evidence=["8", "9"], # 該節點的依賴節點
    evidence_card=[2, 2] # 依賴節點的取值個數
)
n5 = TabularCPD(
    variable="5", # 節點名稱
    variable_card=2, # 節點取值個數
    values=[[1, 1, 1, 0], # 該節點的機率表
    [0, 0, 0, 1]],
    evidence=["12", "13"], # 該節點的依賴節點
    evidence_card=[2, 2] # 依賴節點的取值個數
)
n6 = TabularCPD(
    variable="6", # 節點名稱
    variable_card=2, # 節點取值個數
    values=[[1, 1, 1, 0], # 該節點的機率表
    [0, 0, 0, 1]],
    evidence=["14", "15"], # 該節點的依賴節點
    evidence_card=[2, 2] # 依賴節點的取值個數
)
n7 = TabularCPD(
    variable="7", # 節點名稱
    variable_card=2, # 節點取值個數
    values=[[1, 1, 1, 0], # 該節點的機率表
    [0, 0, 0, 1]],
    evidence=["16", "48"], # 該節點的依賴節點
    evidence_card=[2, 2] # 依賴節點的取值個數
)
n8 = TabularCPD(
    variable="8", # 節點名稱
    variable_card=2, # 節點取值個數
    values=[[1, 1, 1, 0], # 該節點的機率表
    [0, 0, 0, 1]],
    evidence=["59", "60"], # 該節點的依賴節點
    evidence_card=[2, 2] # 依賴節點的取值個數
)
n9 = TabularCPD(
    variable="9", # 節點名稱
    variable_card=2, # 節點取值個數
    values=[[1, 1, 1, 0], # 該節點的機率表
    [0, 0, 0, 1]],
    evidence=["54", "58"], # 該節點的依賴節點
    evidence_card=[2, 2] # 依賴節點的取值個數
)
n10 = TabularCPD(
    variable="10", # 節點名稱
    variable_card=2, # 節點取值個數
    values=[[1, 1, 1, 0], # 該節點的機率表
    [0, 0, 0, 1]],
    evidence=["28", "51"], # 該節點的依賴節點
    evidence_card=[2, 2] # 依賴節點的取值個數
)
n11 = TabularCPD(
    variable="11", # 節點名稱
    variable_card=2, # 節點取值個數
    values=[[1, 1, 1, 0], # 該節點的機率表
    [0, 0, 0, 1]],
    evidence=["31", "50"], # 該節點的依賴節點
    evidence_card=[2, 2] # 依賴節點的取值個數
)
n12= TabularCPD(
            variable="12",
            variable_card=2,
            values=[[0.0008],[0.9992]]
)
n13 = TabularCPD(
    variable="13", # 節點名稱
    variable_card=2, # 節點取值個數
    values=[[1, 0, 0, 0], # 該節點的機率表
    [0, 1, 1, 1]],
    evidence=["32", "33"], # 該節點的依賴節點
    evidence_card=[2, 2] # 依賴節點的取值個數
)
n14= TabularCPD(
            variable="14",
            variable_card=2,
            values=[[0.0008], [0.9992]]
)
n15= TabularCPD(
            variable="15",
            variable_card=2,
            values=[[0.0008], [0.9992]]
)
n16= TabularCPD(
            variable="16",
            variable_card=2,
            values=[[0.0008], [0.9992]]
)
n17= TabularCPD(
            variable="17",
            variable_card=2,
            values=[[0.0008], [0.9992]]
)
n18= TabularCPD(
            variable="18",
            variable_card=2,
            values=[[0.0008], [0.9992]]
)
n19= TabularCPD(
            variable="19",
            variable_card=2,
            values=[[0.0008], [0.9992]]
)
n20= TabularCPD(
            variable="20",
            variable_card=2,
            values=[[0.0008], [0.9992]]
)
n21= TabularCPD(
            variable="21",
            variable_card=2,
            values=[[0.0008], [0.9992]]
)
n22 = TabularCPD(
    variable="22", # 節點名稱
    variable_card=2, # 節點取值個數
    values=[[1, 0, 0, 0], # 該節點的機率表
    [0, 1, 1, 1]],
    evidence=["24", "40"], # 該節點的依賴節點
    evidence_card=[2, 2] # 依賴節點的取值個數
)
n23 = TabularCPD(
    variable="23", # 節點名稱
    variable_card=2, # 節點取值個數
    values=[[1, 0], [0, 1]], # 該節點的機率表
    evidence=["24"], # 該節點的依賴節點
    evidence_card=[2] # 依賴節點的取值個數
)
n24= TabularCPD(
            variable="24",
            variable_card=2,
            values=[[0.0008], [0.9992]]
)
n25 = TabularCPD(
    variable="25", # 節點名稱
    variable_card=2, # 節點取值個數
    values=[[1, 0], [0, 1]], # 該節點的機率表
    evidence=["24"], # 該節點的依賴節點
    evidence_card=[2] # 依賴節點的取值個數
)
n26 = TabularCPD(
    variable="26", # 節點名稱
    variable_card=2, # 節點取值個數
    values=[[1, 0], [0, 1]], # 該節點的機率表
    evidence=["24"], # 該節點的依賴節點
    evidence_card=[2] # 依賴節點的取值個數
)
n27 = TabularCPD(
    variable="27", # 節點名稱
    variable_card=2, # 節點取值個數
    values=[[1, 0, 0, 0], # 該節點的機率表
    [0, 1, 1, 1]],
    evidence=["24", "41"], # 該節點的依賴節點
    evidence_card=[2, 2] # 依賴節點的取值個數
)
n28 = TabularCPD(
            variable="28",
            variable_card=2,
            values=[[0.0008], [0.9992]]
)
n29 = TabularCPD(
            variable="29",
            variable_card=2,
            values=[[0.0008], [0.9992]]
)
n30 = TabularCPD(
            variable="30",
            variable_card=2,
            values=[[0.0008], [0.9992]]
)
n31 = TabularCPD(
            variable="31",
            variable_card=2,
            values=[[0.0008], [0.9992]]
)
n32 = TabularCPD(
            variable="32",
            variable_card=2,
            values=[[0.0008], [0.9992]]
)
n33 = TabularCPD(
            variable="33",
            variable_card=2,
            values=[[0.0008], [0.9992]]
)
n34 = TabularCPD(
            variable="34",
            variable_card=2,
            values=[[0.0008], [0.9992]]
)
n35 = TabularCPD(
            variable="35",
            variable_card=2,
            values=[[0.0008], [0.9992]]
)
n36 = TabularCPD(
    variable="36", # 節點名稱
    variable_card=2, # 節點取值個數
    values=[[1, 0, 0, 0], # 該節點的機率表
    [0, 1, 1, 1]],
    evidence=["24", "42"], # 該節點的依賴節點
    evidence_card=[2, 2] # 依賴節點的取值個數
)
n37 = TabularCPD(
    variable="37", # 節點名稱
    variable_card=2, # 節點取值個數
    values=[[1, 0, 0, 0], # 該節點的機率表
    [0, 1, 1, 1]],
    evidence=["24", "40"], # 該節點的依賴節點
    evidence_card=[2, 2] # 依賴節點的取值個數
)
n38 = TabularCPD(
    variable="38", # 節點名稱
    variable_card=2, # 節點取值個數
    values=[[1, 0, 0, 0], # 該節點的機率表
    [0, 1, 1, 1]],
    evidence=["44", "45"], # 該節點的依賴節點
    evidence_card=[2, 2] # 依賴節點的取值個數
)
n39 = TabularCPD(
    variable="39", # 節點名稱
    variable_card=2, # 節點取值個數
    values=[[1, 0, 0, 0], # 該節點的機率表
    [0, 1, 1, 1]],
    evidence=["24", "46"], # 該節點的依賴節點
    evidence_card=[2, 2] # 依賴節點的取值個數
)
n40 = TabularCPD(
            variable="40",
            variable_card=2,
            values=[[0.0008], [0.9992]]
)
n41 = TabularCPD(
            variable="41",
            variable_card=2,
            values=[[0.0008], [0.9992]]
)
n42 = TabularCPD(
            variable="42",
            variable_card=2,
            values=[[0.0008], [0.9992]]
)
n43 = TabularCPD(
            variable="43",
            variable_card=2,
            values=[[0.0008], [0.9992]]
)
n44 = TabularCPD(
            variable="44",
            variable_card=2,
            values=[[0.0008], [0.9992]]
)
n45 = TabularCPD(
            variable="45",
            variable_card=2,
            values=[[0.0008], [0.9992]]
)
n46 = TabularCPD(
            variable="46",
            variable_card=2,
            values=[[0.0008], [0.9992]]
)
n47 = TabularCPD(
    variable="47", # 節點名稱
    variable_card=2, # 節點取值個數
    values=[[1, 0, 0, 0], # 該節點的機率表
    [0, 1, 1, 1]],
    evidence=["34", "35"], # 該節點的依賴節點
    evidence_card=[2, 2] # 依賴節點的取值個數
)
n48 = TabularCPD(
    variable="48", # 節點名稱
    variable_card=2, # 節點取值個數
    values=[[1, 1, 1, 0], # 該節點的機率表
    [0, 0, 0, 1]],
    evidence=["17", "47"], # 該節點的依賴節點
    evidence_card=[2, 2] # 依賴節點的取值個數
)
n49 = TabularCPD(
    variable="49", # 節點名稱
    variable_card=2, # 節點取值個數
    values=[[1, 1, 1, 0], # 該節點的機率表
    [0, 0, 0, 1]],
    evidence=["5", "6"], # 該節點的依賴節點
    evidence_card=[2, 2] # 依賴節點的取值個數
)
n50 = TabularCPD(
    variable="50", # 節點名稱
    variable_card=2, # 節點取值個數
    values=[[1, 1, 1, 0], # 該節點的機率表
    [0, 0, 0, 1]],
    evidence=["29", "30"], # 該節點的依賴節點
    evidence_card=[2, 2] # 依賴節點的取值個數
)
n51 = TabularCPD(
    variable="51", # 節點名稱
    variable_card=2, # 節點取值個數
    values=[[1, 1, 1, 0], # 該節點的機率表
    [0, 0, 0, 1]],
    evidence=["20", "21"], # 該節點的依賴節點
    evidence_card=[2, 2] # 依賴節點的取值個數
)
n52 = TabularCPD(
    variable="52", # 節點名稱
    variable_card=2, # 節點取值個數
    values=[[1, 1, 1, 0], # 該節點的機率表
    [0, 0, 0, 1]],
    evidence=["37", "38"], # 該節點的依賴節點
    evidence_card=[2, 2] # 依賴節點的取值個數
)
n53 = TabularCPD(
    variable="53", # 節點名稱
    variable_card=2, # 節點取值個數
    values=[[1, 0, 0, 0], # 該節點的機率表
    [0, 1, 1, 1]],
    evidence=["39", "56"], # 該節點的依賴節點
    evidence_card=[2, 2] # 依賴節點的取值個數
)
n54 = TabularCPD(
    variable="54", # 節點名稱
    variable_card=2, # 節點取值個數
    values=[[1, 1, 1, 0], # 該節點的機率表
    [0, 0, 0, 1]],
    evidence=["53", "57"], # 該節點的依賴節點
    evidence_card=[2, 2] # 依賴節點的取值個數
)
n55 = TabularCPD(
    variable="55", # 節點名稱
    variable_card=2, # 節點取值個數
    values=[[1, 1, 1, 0], # 該節點的機率表
    [0, 0, 0, 1]],
    evidence=["25", "26"], # 該節點的依賴節點
    evidence_card=[2, 2] # 依賴節點的取值個數
)
n56 = TabularCPD(
    variable="56", # 節點名稱
    variable_card=2, # 節點取值個數
    values=[[1, 1, 1, 0], # 該節點的機率表
    [0, 0, 0, 1]],
    evidence=["36", "52"], # 該節點的依賴節點
    evidence_card=[2, 2] # 依賴節點的取值個數
)
n57 = TabularCPD(
    variable="57", # 節點名稱
    variable_card=2, # 節點取值個數
    values=[[1, 1, 1, 0], # 該節點的機率表
    [0, 0, 0, 1]],
    evidence=["22", "23"], # 該節點的依賴節點
    evidence_card=[2, 2] # 依賴節點的取值個數
)
n58 = TabularCPD(
    variable="58", # 節點名稱
    variable_card=2, # 節點取值個數
    values=[[1, 1, 1, 0], # 該節點的機率表
    [0, 0, 0, 1]],
    evidence=["27", "55"], # 該節點的依賴節點
    evidence_card=[2, 2] # 依賴節點的取值個數
)
n59 = TabularCPD(
    variable="59", # 節點名稱
    variable_card=2, # 節點取值個數
    values=[[1, 1, 1, 0], # 該節點的機率表
    [0, 0, 0, 1]],
    evidence=["20", "21"], # 該節點的依賴節點
    evidence_card=[2, 2] # 依賴節點的取值個數
)
n60 = TabularCPD(
    variable="60", # 節點名稱
    variable_card=2, # 節點取值個數
    values=[[1, 1, 1, 0], # 該節點的機率表
    [0, 0, 0, 1]],
    evidence=["18", "19"], # 該節點的依賴節點
    evidence_card=[2, 2] # 依賴節點的取值個數
)
n61 = TabularCPD(
    variable="61", # 節點名稱
    variable_card=2, # 節點取值個數
    values=[[1, 1, 1, 0], # 該節點的機率表
    [0, 0, 0, 1]],
    evidence=["2", "3"], # 該節點的依賴節點
    evidence_card=[2, 2] # 依賴節點的取值個數
)
Tree_modle.add_cpds(n1,n2,n3,n4,n5,n6,n7,n8,n9,n10,n11,n12,n13,n14,n15,n16,n17,n18,n19,n20,n21,n22,n23,n24,n25,n26,n27,n28,n29,n30,n31,n32,n33,n34,n35,n36,n37,n38,n39,n40,n41,n42,n43,n44,n45,n46,n47,n48,n49,n50,n51,n52,n53,n54,n55,n56,n57,n58,n59,n60,n61)
Tree_modle.get_independencies()
mag = VariableElimination(Tree_modle)
p12 = mag.query(
            variables=["12"],
            evidence={"1": 0})
print(p12)