人工智能主观贝叶斯分析实验
人工智能实验报告
西安交大
(1) 学习了解java 编程语言,掌握基本的算法实现;
(2) 深入理解贝叶斯理论和不确定性推理理论;
(3) 学习运用主观贝叶斯公式进行不确定推理的原理和过程
二、实验题目
用java 语言实现运用主观贝叶斯公式进行不确定性推理的过程:根据初始证据E 的概率P(E)及LS 、LN 的值,把H 的先验概率P(H)更新为后验概率P(H/E)或者P(H/﹁E ) 。要求如下:
(1) 充分考虑各种证据情况:证据肯定存在、证据肯定不存在、观察与证据
无关、其他情况;
(2) 考虑EH 公式和CP 公式两种计算后验概率的方法;
(3) 给出EH 公式的分段线性插值图;
三、实验原理
1、知识的不确定性
在主观贝叶斯方法中,只是是如下形式的产生式规则表示:
IF E THEN (LS,LN) H (P(H))
LS 是充分性度量。其定义为:
LS=P(E|H)/P(E|¬H)。
LN 是必要性度量,其定义为:
LN=P(¬E|H)/P(¬E|¬H)=(1-P(E|H))/(1-P(E|¬H))。
2、证据不确定时的计算公式
P (H ) -P (H /⌝E ) ⎧P (H /⌝E ) +*P (E /S ) 当0≤P (E /S )
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Scanner;
import javax.swing.*;
public class bayes extends JFrame implements ActionListener{
static double t_ph; static double t_pe; static double t_ln; static double t_ls; static double ph_e; //P(E/S)=0 时 PHS static double phe ; //P(E/S)=1 时 PHS public bayes() { } public static void main(String [] args) { bayes a=new bayes(); setLayout(new BorderLayout()); panel .setLayout(new FlowLayout()); panel .add(ph ); panel .add(PH ); panel .add(pe ); panel .add(PE ); panel .add(ln ); panel .add(LN ); panel .add(ls ); panel .add(LS ); this .add(panel ); compute .addActionListener(this ); this .add(compute ,BorderLayout. SOUTH ); JPanel panel =new JPanel(); JLabel ph =new JLabel("P(H)"); JTextField PH =new JTextField("" ,3); JLabel pe =new JLabel("P(E)"); JTextField PE =new JTextField("" ,3); JLabel ls =new JLabel("LS" ); JTextField LS =new JTextField("" ,3); JLabel ln =new JLabel("LN" ); JTextField LN =new JTextField("" ,3); Button compute =new Button("COMPUTE" );
} } a.setSize(400,250); a.setVisible(true ); a.setDefaultCloseOperation(EXIT_ON_CLOSE); @Override public void actionPerformed(ActionEvent arg0) { } // TODO Auto-generated method stub t_ph=new Double(PH .getText()); t_pe=new Double(PE .getText()); t_ls=new Double(LS .getText()); t_ln=new Double(LN .getText()); ph_e=t_ln*t_ph/((t_ln-1)*t_ph+1); phe =t_ls*t_ph/((t_ls-1)*t_ph+1); display c=new display();
class draw extends JPanel{
}
class display extends JFrame{
} public display() { } draw b=new draw(); this .add(b); this .setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this .setVisible(true ); this .setSize(400,400); g.drawLine(50+(int )(bayes.t_pe*300),350-(int )(bayes.t_ph*300),350} ,350-(int )(bayes.phe *300)); public void paint(Graphics g) { super .paint(g); g.drawLine(50, 350, 350, 350); g.drawLine(50, 50, 50, 350 ); g.drawLine(50, 350-(int )(bayes.ph_e*300), 50+(int )(bayes.t_pe*300),350-(int )(bayes.t_ph*300));
五、实验结果
输入初始值:
图像结果显示:
六、实验总结
由于本次实验是第一次使用java 语言进行编程,在领略到java 语言的方便与强大功能的同时,也有有很多不尽如人意的地方。编写程序时遇到种种困难,对于java 编程的不适应,最终经过努力还是完成了实验。收获很大。