欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

相对熵(relative entropy或 Kullback-Leibler divergence,KL距离)的java实现(三)

发布时间:2024/1/17 编程问答 46 豆豆
生活随笔 收集整理的这篇文章主要介绍了 相对熵(relative entropy或 Kullback-Leibler divergence,KL距离)的java实现(三) 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

 

 

 

 

代码下载

http://files.cnblogs.com/finallyliuyu/KL.rar

主函数代码

主函数代码 public static void main(String[] args) throws  FileNotFoundException,IOException
    {
        
        
        
// TODO Auto-generated method stub;
        ArrayList<Entity> enList1=new ArrayList<Entity>();
        enList1
=CalcuP("C:/Users/liuyu/workspace/KL/KL/zhangailing.txt");
        ArrayList
<Entity> enList2=new ArrayList<Entity>();
        enList2
=CalcuP("C:/Users/liuyu/workspace/KL/KL/zhangailing2.txt");
        ArrayList
<Entity>enList3=new ArrayList<Entity>();
        enList3
=CalcuP("C:/Users/liuyu/workspace/KL/KL/maozedong.txt");      double f1=CalKL(enList1,enList2);
        double f2=CalKL(enList2,enList1);
        double f3=CalKL(enList1,enList3);
    
    double f4=CalKL(enList3,enList1);
        
double f5=CalKL(enList2,enList3);
        
double f6=CalKL(enList3,enList2);
        System.out.println(
"《《小团圆》究竟泄了张爱玲什么“秘密”?》与《《小团圆》:张爱玲的一个梦》的KL距离: "+f1);
        System.out.println(
"《《小团圆》:张爱玲的一个梦》与《《小团圆》究竟泄了张爱玲什么“秘密”?》的KL距离"+f2);
        System.out.println(
"《《小团圆》究竟泄了张爱玲什么“秘密”?》与《1945年毛和蒋介石在重庆谈判前的秘密情报战》的KL距离 "+f3);
        System.out.println(
"《1945年毛和蒋介石在重庆谈判前的秘密情报战》与《《小团圆》究竟泄了张爱玲什么“秘密”?》的KL距离 "+f4);
        System.out.println(
"《“小团圆”张爱玲的一个梦》与《1945年毛和蒋介石在重庆谈判前的秘密情报战》的KL距离"+f5);
        System.out.println(
"《1945年毛和蒋介石在重庆谈判前的秘密情报战》与《“小团圆”张爱玲的一个梦》的KL距离"+f6);

 

a.以字符为单位的计算结果如下:

《《小团圆》究竟泄了张爱玲什么“秘密”?》与《《小团圆》:张爱玲的一个梦》的KL距离: 2.269998592E9
《《小团圆》:张爱玲的一个梦》与《《小团圆》究竟泄了张爱玲什么“秘密”?》的KL距离4.099975168E9
《《小团圆》究竟泄了张爱玲什么“秘密”?》与《1945年毛和蒋介石在重庆谈判前的秘密情报战》的KL距离 3.029988864E9
《1945年毛和蒋介石在重庆谈判前的秘密情报战》与《《小团圆》究竟泄了张爱玲什么“秘密”?》的KL距离 4.289972736E9
《“小团圆”张爱玲的一个梦》与《1945年毛和蒋介石在重庆谈判前的秘密情报战》的KL距离4.10997504E9
《1945年东和蒋介石在重庆谈判前的秘密情报战》与《“小团圆”张爱玲的一个梦》的KL距离3.539982336E9

b.以词为单位计算结果如下

《《小团圆》究竟泄了张爱玲什么“秘密”?》与《《小团圆》:张爱玲的一个梦》的KL距离: 5.629955584E9
《《小团圆》:张爱玲的一个梦》与《《小团圆》究竟泄了张爱玲什么“秘密”?》的KL距离8.62991872E9
《《小团圆》究竟泄了张爱玲什么“秘密”?》与《1945年毛和蒋介石在重庆谈判前的秘密情报战》的KL距离 6.50994432E9
《1945年毛和蒋介石在重庆谈判前的秘密情报战》与《《小团圆》究竟泄了张爱玲什么“秘密”?》的KL距离 8.029924864E9
《“小团圆”张爱玲的一个梦》与《1945年毛和蒋介石在重庆谈判前的秘密情报战》的KL距离9.219941376E9
《1945年毛和蒋介石在重庆谈判前的秘密情报战》与《“小团圆”张爱玲的一个梦》的KL距离7.739928576E9

从上面结果可以看出:《张秘密》与《张梦》之间距离最近,《毛》与《张梦》直接的概率分布距离近于《毛》与《张秘密》之间的概率分布。

另外补充一点java传参的方式:对于简单类型采用值传递的方法;对于复杂类型采用的是引用传递的机制。这有点类似于matlab.所以,

 double f1=CalKL(enList1,enList2);
  double f2=CalKL(enList2,enList1);
  double f3=CalKL(enList1,enList3);

CalKL函数中如果改变了enlist1,enlist2的值就会使结果不正确。

 

转载于:https://www.cnblogs.com/finallyliuyu/archive/2010/03/12/1684043.html

创作挑战赛新人创作奖励来咯,坚持创作打卡瓜分现金大奖

总结

以上是生活随笔为你收集整理的相对熵(relative entropy或 Kullback-Leibler divergence,KL距离)的java实现(三)的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。