zackxconti / bnmetamodel_gh

Repo for bnmetamodel lib version for Lab Mouse Grasshopper plug-in.
1 stars 2 forks source link

Adapt loops for storing predicted posteriors #39

Open kallewesterling opened 11 months ago

kallewesterling commented 11 months ago

Need to adapt this repeated loop for storing predicted posteriors for each target in the list, and eventually calc error_df for each Target (or into one DF with multiple indices).

See BayesianNetwork.crossValidate:

    for i in range (0,binnedTestingData.shape[0]):
        row = binnedTestingDict[i]
        evidence = without_keys(row, queries.keys())
        fn = TableCPDFactorization(baynet)
        result = condprobve2(fn, queries, evidence)

        # if more than 1 target was specified
        if len(queries) > 1:
            posteriors = printdist(result, baynet)
            for target in targetList:
                marginalPosterior = posteriors.groupby(target)['probability'].sum()
                marginalTargetPosteriorsDict[target].append(marginalPosterior) #might need [probability]

        # if only 1 target was specified
        else:

            posterior = printdist(result, baynet)
            posterior.sort_values([targetList[0]],inplace=True) # to make sure probabilities are listed in order of bins, sorted by first queried variable
            marginalTargetPosteriorsDict[target].append(posterior['probability'])

See BayesianNetwork.crossValidate_JT:

    for i in range(0, binnedTestingData.shape[0]):
        row = binnedTestingDict[i]
        evidence = without_keys(row, queries.keys())

        result = self.inferPD_JT_hard(evidence)

        # if more than 1 target was specified
        if len(queries) > 1:
            posteriors = printdist(result, baynet)
            for target in targetList:
                marginalPosterior = posteriors.groupby(target)['probability'].sum()
                marginalTargetPosteriorsDict[target].append(marginalPosterior)  # might need [probability]

        # if only 1 target was specified
        else:
            posterior = printdist(result, baynet)
            posterior.sort_values([targetList[0]], inplace=True)  # to make sure probabilities are listed in order of bins, sorted by first queried variable
            marginalTargetPosteriorsDict[target].append(posterior['probability'])

See BayesianNetwork.validateNew:

for i in range (0,binnedTestingData.shape[0]):
    row = binnedTestingDict[i]
    evidence = without_keys(row, queries.keys())
    fn = TableCPDFactorization(baynet)
    result = condprobve2(fn, queries, evidence)

    # if more than 1 target was specified
    if len(queries) > 1:
        posteriors = printdist(result, baynet)
        for target in targetList:
            marginalPosterior = posteriors.groupby(target)['probability'].sum()
            marginalTargetPosteriorsDict[target].append(marginalPosterior) #might need [probability]

    # if only 1 target was specified
    else:

        posterior = printdist(result, baynet)
        posterior.sort_values([targetList[0]],inplace=True) # to make sure probabilities are listed in order of bins, sorted by first queried variable
        marginalTargetPosteriorsDict[target].append(posterior['probability'])