其他分享
首页 > 其他分享> > 人工智能-Project 4: Inference in Bayes Nets(2)

人工智能-Project 4: Inference in Bayes Nets(2)

作者:互联网

官网项目介绍
源码框架下载
这次实习是继续上一次Inference in Bayes Nets剩下的问题进行完善

1、实习介绍

前面已经介绍过了,就不再重复了

2、问题编码

1、Question 4-Eliminate

		# 需要用到的参数
		Factor.getAllPossibleAssignmentDicts
        Factor.getProbability
        Factor.setProbability
        Factor.unconditionedVariables
        Factor.conditionedVariables
        Factor.variableDomainsDict
"*** YOUR CODE HERE ***"
        # marker
        # 从原始因子中获取无条件/条件变量
        unconditioned_variables = list(factor.unconditionedVariables())
        conditioned_variables = list(factor.conditionedVariables())
        variablesDomainDict = factor.variableDomainsDict()

        # 产生我们的新Facter
        retFactor = Factor([i for i in unconditioned_variables if i != eliminationVariable], \
                           conditioned_variables, variablesDomainDict)

        # 获取和计算概率
        assignments = retFactor.getAllPossibleAssignmentDicts()
        print("assignments:", assignments)
        print("variablesDomainDict:", variablesDomainDict)
        print("eliminationVariable:", eliminationVariable)
        print("eliminated_values:", variablesDomainDict[eliminationVariable])
        print("variablesDomainDict[eliminationVariable]:", variablesDomainDict[eliminationVariable])
        for assignment in assignments:
            probability = 0
            for eliminated_values in variablesDomainDict[eliminationVariable]:
                prev_assignment = assignment.copy()
                prev_assignment[eliminationVariable] = eliminated_values
                probability += factor.getProbability(prev_assignment)

            retFactor.setProbability(assignment, probability)

        return retFactor

    "*** END YOUR CODE HERE ***"

2、Question 5-Normalize

# 用到的参数
	Factor.getAllPossibleAssignmentDicts
    Factor.getProbability
    Factor.setProbability
    Factor.unconditionedVariables
    Factor.conditionedVariables
    Factor.variableDomainsDict
"*** YOUR CODE HERE ***"
    unconditioned_variables = list(factor.unconditionedVariables())
    conditioned_variables = list(factor.conditionedVariables())
    variablesDomainDict = factor.variableDomainsDict()

    # 一般是我们的因素
    retFactor_conditioned_varaibles = conditioned_variables \
                                      + [i for i in unconditioned_variables if len(variableDomainsDict[i]) == 1]
    retFactor_unconditioned_varaibles = [i for i in unconditioned_variables if i not in retFactor_conditioned_varaibles]
    retFactor = Factor(retFactor_unconditioned_varaibles, retFactor_conditioned_varaibles, variablesDomainDict)

    #计算用于规范化目的的总概率
    total_probablity = 0
    for assignment_dict in factor.getAllPossibleAssignmentDicts():
        # print("Probability of", assignment_dict, "is", factor.getProbability(assignment_dict))
        total_probablity += factor.getProbability(assignment_dict)

    # 为我们的retFactor生成概率
    for assignment in retFactor.getAllPossibleAssignmentDicts():
        probability = factor.getProbability(assignment)
        retFactor.setProbability(assignment, probability / total_probablity)

    return retFactor
    "*** END YOUR CODE HERE ***"

3、Question 6-Variable Elimination

此函数应执行概率推断查询,该查询返回系数:P(queryVariables | evidenceDict)
bayesNet:   我们正在进行查询的贝叶斯网。queryVariables:无条件变量的列表在推理查询中。
evidenceDict:    指定的赋值dict{variable:value}作为证据呈现的变量(条件)在推理查询中。
eliminationOrder: 消除中变量的顺序。
Hint: BayesNet.getAllCPTsWithEvidence
将返回所有条件概率表
即使传入一个空的dict(或无)作为证据ICT。
在这种情况下,它不会专门化CPT中的任何变量域。
"*** YOUR CODE HERE ***"
        # print("eliminationOrder:", eliminationOrder)
        all_factors = bayesNet.getAllCPTsWithEvidence(evidenceDict)

        for elimination_variable in eliminationOrder:
            unjoined_factors, joined_factors = joinFactorsByVariable(all_factors, elimination_variable)
            all_factors = unjoined_factors

            if len(joined_factors.unconditionedVariables()) != 1:
                all_factors.append(eliminate(joined_factors, elimination_variable))

        return normalize(joinFactors(all_factors))

        "*** END YOUR CODE HERE ***"

3、运行结果

1、Question 4-Eliminate

运行指令:
python autograder.py -q q4

在这里插入图片描述

在调试期间运行特定测试可能很有用,以查看仅打印出一组因素。例如,要仅运行第一个测试,请运行:
python autograder.py -t test_cases/q4/1-simple-eliminate

在这里插入图片描述

2、Question 5-Normalize

运行指令:
python autograder.py -q q5

在这里插入图片描述

在调试期间运行特定测试可能很有用,以查看仅打印出一组因素。例如,要仅运行第一个测试,请运行:
python autograder.py -t test_cases/q5/1-preNormalized

在这里插入图片描述

3、Question 6-Variable Elimination

运行指令:
python autograder.py -q q6

在这里插入图片描述

在调试期间运行特定测试可能很有用,以查看仅打印出一组因素。例如,要仅运行第一个测试,请运行:
python autograder.py -t test_cases/q6/1-disconnected-eliminate

在这里插入图片描述

标签:retFactor,Inference,变量,factors,assignment,factor,Project,Bayes,Factor
来源: https://blog.csdn.net/xiten/article/details/120890770