gpt4 book ai didi

java - Weka API : How to obtain a joint probability, 例如,Pr(A=x, B=y),来自 BayesNet 对象?

转载 作者:行者123 更新时间:2023-11-30 09:45:13 24 4
gpt4 key购买 nike

我正在使用 Weka Java API。我在未指定类(标签)的实例对象(数据集)上训练了贝叶斯网络。

/**
* Initialization
*/
Instances data = ...;
BayesNet bn = new EditableBayesNet(data);
SearchAlgorithm learner = new TAN();
SimpleEstimator estimator = new SimpleEstimator();
/**
* Training
*/
bn.initStructure();
learner.buildStructure(bn, data);
estimator.estimateCPTs(bn);

假设 Instances 对象 data 具有 A、B、C 三个属性,发现的依赖关系为 B->A、C->B。

训练好的贝叶斯网络对象bn不是用来分类的(我没有为data指定类属性),只是想计算Pr(的联合概率) A=x,B=y)。如何从 bn 获得这个概率?

据我所知,BayesNetdistributionForInstance 函数可能是最接近使用的。它返回给定实例的概率分布(在我们的例子中,实例为 (A=x, B=y))。要使用它,我可以创建一个新的 Instance 对象 testDataInstance 并设置值 A=xB=y ,并使用 testDataInstance 调用 distributionForInstance

/**
* Obtain Pr(A="x", B="y")
*/
Instance testDataInstance = new SparseInstance(3);
Instances testDataSet = new Instances(
bn.m_Instances);
testDataSet.clear();
testDataInstance.setValue(testDataSet.attribute("A"), "x");
testDataInstance.setValue(testDataSet.attribute("B"), "y");
testDataSet.add(testDataInstance);
bn.distributionForInstance(testDataSet.firstInstance());

但是,据我所知,概率分布表示贝叶斯网络中类属性的所有可能值的概率。由于我没有为 data 指定类属性,因此我不清楚返回的概率分布意味着什么。

最佳答案

distributionForInstance 的 javadoc 页面表示它计算类成员概率:http://weka.sourceforge.net/doc.dev/weka/classifiers/bayes/BayesNet.html#distributionForInstance-weka.core.Instance-

所以,这可能不是您想要的。我认为您可以使用 getDistribution(int nTargetNode)getDistribution(java.lang.String sName) 来实现您的答案。

P(A=x, B=y) 可计算如下,

P(A=x|B=y) = P(A=x, B=y)/P(B=y), which implies,

P(A=x, B=y) = P(A=x|B=y)*P(B=y)

这是一个伪代码,说明了我的方法,

double[][] AP = bn.getDistribution("A"); // gives P(A|B) table
double[][] BP = bn.getDistribution("B"); // gives P(B|C) table
double BPy = 0;

// I am assuming x,y to be ints, but if they are not,
// there should be some way of calculating BP[0][y] or AP[y][x]
// BP[0][y] represents P(B=y) and AP[y][x] represents P(A=x|B=y)
for(int i=0;i<BP.length;i++){
BPy+=BP[0][y];
}
//BPy now contains probability of P(B=y)
System.out.println(AP[y][x]*BPy)

关于java - Weka API : How to obtain a joint probability, 例如,Pr(A=x, B=y),来自 BayesNet 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53402674/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com