证据权法是通过计算和利用各种不同证据的权重(表示相对重要性)并将多种证据结合起来,预测某个时间是否会发生的一种方法

证据权法以概率论中的贝叶斯定理为基础。设D表示要一个随机事件。用P(D)表示这一事件概率,即D发生的概率。假设P(D)事先知道,即它是先验概率。则D不发生的概率为:

定义:

    称为事件D的几率(Odd Ratio),也称优势率,它能更好的表示事件D发生的可能性大小。

用集合

表示与D有关的n个证据,并设Xj都是逻辑变量。用D|X表示"单元中存在X的情况下D发生"这一事件。用P(D|X)表示概率,也称为后验概率(后验概率是获得有关信息后对先验概率修正后的概率)。由贝叶斯定理:

可以得出优势率:

假设n个条件相互条件独立,并在两边同时去对数:

令:

于是:

事件D|X的几率为

于是后验概率为:

其中wi称为证据X的证据权,反应Xi的存在对D的重要性:

其中,各条件概率的计算:

定义:

为X的对比系数,可以用来综合评价各证据的重要性

在数据较少的情况下,采用C来选择证据,回增大结果的不确定性,定义

其中:为第i个证据后验概率的正负方差:

  1.     /// <summary>
  2. /// 计算先验似然概率
  3. /// </summary>
  4. private void GetMinePriorLikelihoodProb()
  5. {
  6.     mineral_PriorProbability = sum_EvidenceCount[0] / (double)gridNumber;
  7.     minreal_PriorLiklihoodProbablity = mineral_PriorProbability / (1 - mineral_PriorProbability);
  8. }
  9. /// <summary>
  10.        /// 计算证据权参数
  11.        /// </summary>
  12.        private void GetEvidenceStatistc()
  13.        {
  14.            for (int i = 0; i < mineral_EvidenceCount - 1; i++)
  15.            {
  16.                //证据权正定义
  17.                /* Count(BjD)/Count(D)
  18.                 * ln----------------------
  19.                 * Count(Bj~D)/Count(~D)
  20.                 */
  21.                evidence_PosWeight[i] = Math.Log((sumEvidence_MineralOccur[i] / sum_EvidenceCount[0]) /
  22.                    ((sum_EvidenceCount[i + 1] - sumEvidence_MineralOccur[i]) / (gridNumber - sum_EvidenceCount[0])));
  23.  
  24.                //证据权负定义
  25.                /* Count(~BjD)/Count(D)
  26.                 * ln-------------------------
  27.                 * Count(~Bj~D)/Count(~D)
  28.                 */
  29.                evidence_NegWeight[i] = Math.Log(((sum_EvidenceCount[0] - sumEvidence_MineralOccur[i]) / (sum_EvidenceCount[0]))
  30.                    / ((gridNumber - sum_EvidenceCount[0] - sum_EvidenceCount[i + 1] + sumEvidence_MineralOccur[i]) / (gridNumber - sum_EvidenceCount[0])));
  31.  
  32.                //证据权正方差
  33.                /* 1 1
  34.                 * -----------+--------------
  35.                 * Count(BjD) Count(Bj~D)
  36.                 */
  37.                evidence_PosVariance[i] = (1 / sumEvidence_MineralOccur[i]) +
  38.                    (1 / (sum_EvidenceCount[i + 1] - sumEvidence_MineralOccur[i]));
  39.  
  40.                //证据权负方差
  41.                /* 1 1
  42.                 * -----------+--------------
  43.                 * Count(~BjD) Count(~Bj~D)
  44.                 */
  45.                evidence_NegVariance[i] = (1 / (sum_EvidenceCount[0] - sumEvidence_MineralOccur[i])) +
  46.                    (1 / (gridNumber - sum_EvidenceCount[0] - sum_EvidenceCount[i + 1] + sumEvidence_MineralOccur[i]));
  47.  
  48.                //对比度
  49.                //Cj=weightj+ - Weightj-
  50.                evidence_ContrastRatio[i] = evidence_PosWeight[i] - evidence_NegWeight[i];
  51.  
  52.                //显著性统计量
  53.                //Stud(C)=Cj/s(c)
  54.                //s(c)=1/Sqrt(s2(weight+)+s2(weight-))
  55.                evidence_StatisticalSignficance[i] = evidence_ContrastRatio[i] /
  56.                    (Math.Sqrt(evidence_PosVariance[i] + evidence_NegVariance[i]));
  57.            }
  58.        }
  59. /// <summary>
  60.         /// 证据权合成
  61.         /// </summary>
  62.         private void SynthesisEvidence()
  63.         {
  64.             double[] evidence_PostProbLog = new double[gridNumber];
  65.  
  66.             double[,] evidence_Data = (double[,])mineralAndEvidence.Clone();
  67.             for (int i = 1; i < mineral_EvidenceCount; i++)
  68.             {
  69.                 for (int j = 0; j < mineralAndEvidence.GetLength(1); j++)
  70.                 {
  71.                     //将复制证据图层中与对调
  72.                     if (evidence_Data[i, j] == 0)
  73.                     {
  74.                         evidence_Data[i, j] = 1;
  75.                     }
  76.                     else
  77.                     {
  78.                         evidence_Data[i, j] = 0;
  79.                     }
  80.                     evidence_PostProbLog[j] += evidence_Data[i, j] * evidence_NegWeight[i - 1] +
  81.                         mineralAndEvidence[i, j] * evidence_PosWeight[i - 1];
  82.                 }//for
  83.             }//for
  84.             GetPostProb(evidence_PostProbLog);
  85.         }//Method End
  86. /// <summary>
  87.         /// 计算后验概率
  88.         /// </summary>
  89.         /// <param name="postProbLog"></param>
  90.         private void GetPostProb(double[] postProbLog)
  91.         {
  92.             evidence_PostProb = new double[gridNumber];
  93.             for (int i = 0; i < postProbLog.Length; i++)
  94.             {
  95.                 evidence_PostProb[i] = (Math.Exp(postProbLog[i] + Math.Log(minreal_PriorLiklihoodProbablity)))
  96.                     / (1 + Math.Exp(postProbLog[i] + Math.Log(minreal_PriorLiklihoodProbablity)));
  97. }//for
  98.         }

证据权模型(C#版)的更多相关文章

  1. Reactor模型-单线程版

    Reactor模型是典型的事件驱动模型.在网络编程中,所谓的事件当然就是read.write.bind.connect.close等这些动作了.Reactor模型的实现有很多种,下面介绍最基本的三种: ...

  2. 网络IO模型-异步选择模型(Delphi版)

    其实关于这个模型,网络上也有一个案例说明 老陈使用了微软公司的新式信箱.这种信箱非常先进,一旦信箱里有新的信件,盖茨就会给老陈打电话:喂,大爷,你有新的信件了!从此,老陈再也不必频繁上下楼检查信箱了, ...

  3. Linux提权(2)-高级版

    当你在攻击受害者的电脑时即使你拥有了一个shell,依然可能会有一些拒绝执行指令的限制.为了获得目标主机的完整控制权限,你需要在未授权的地方绕过权限控制.这些权限可以删除文件,浏览私人信息,或者安装并 ...

  4. Linux提权(1)-基础版~

    利用Linux内核漏洞提权 VulnOS version 2是VulHub上的一个Linux提权练习,当打开虚拟机后,可以看到 获取到低权限SHELL后我们通常做下面几件事 1.检测操作系统的发行版本 ...

  5. IO模型-java版

    描述IO,我们需要从两个层面: 编程语言 实现原理 底层基础 从编程语言层面 BIO | NIO | AIO 以Java的角度,理解,linux c里也有AIO的概念(库),本文只从Java角度入手. ...

  6. java 高性能Server —— Reactor模型单线程版

    NIO模型 NIO模型示例如下: Acceptor注册Selector,监听accept事件 当客户端连接后,触发accept事件 服务器构建对应的Channel,并在其上注册Selector,监听读 ...

  7. NLP学习(2)----文本分类模型

    实战:https://github.com/jiangxinyang227/NLP-Project 一.简介: 1.传统的文本分类方法:[人工特征工程+浅层分类模型] (1)文本预处理: ①(中文) ...

  8. 模型(Model)– ASP.NET MVC 4 系列

           为 MVC Music Store 建模        在 Models 目录中为专辑.艺术家.流派建模: public class Album { public virtual int ...

  9. 《ASP.NET MVC 5 高级编程(第5版)》

    第1章.入门 本章主要内容: ASP.NET MVC 5概述 其应用程序的创建方法 其应用程序的及结构 概述:将MVC设计模式应用于ASP.NET框架 ASP.NET 1.0支持两层抽象: Syste ...

随机推荐

  1. sql 将datetime类型转化为指定格式的字符串

    ), ) -- 输出: 05 16 2006 10:57AM ), ) -- 输出: 05/16/06 ), ) -- 输出: 06.05.16 ), ) -- 输出: 16/05/06 ), ) - ...

  2. 加密算法 MD5/SHA1

    近来想学习函数式编程. 但是一直不知道怎么展开这个学习过程,目前的研究进度也不深入,想讲解一些原理也无从下手. 先简单的上一些算法,逐步分析语法和思想.虽然程度不深,但至少能记录这个过程. 本例子用F ...

  3. C语言中的内存对齐

    最近看了好多,也编了好多C语言的浩强哥书后的题,总觉的很不爽,真的真的好怀念linux驱动的代码,好怀念那下划线,那结构体,虽然自己还很菜. 同时看了一遍陈正冲老师的C语言深度剖析,收益很多,又把唐老 ...

  4. 取得ASKII码值和汉语拼音

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAXMAAACmCAIAAACnXPjtAAAgAElEQVR4nO2de3wb1YHv56+7e/fe/e ...

  5. 通过Func 委托理解委托和匿名方法及Lambda 表达式

    Func<T, TResult> 委托 封装一个具有一个参数并返回 TResult 参数指定的类型值的方法. 命名空间: System 程序集: mscorlib(在 mscorlib.d ...

  6. [转]Hacking the iOS Spotlight

    原文:http://theiostream.tumblr.com/post/36905860826/hacking-the-ios-spotlight 原文:http://theiostream.tu ...

  7. C#奇葩关键字

    C#奇葩关键字——忐忑 那就认识认识吧,可是又太多,所以也只能是想到哪里是哪里,我们这就让思绪自由飞翔一会吧! 1.@ 这个东东看似和邮件有关啊,但是在C#的世界里,可跟邮件没有一毛钱关系,它是str ...

  8. jQuery Validation让验证变得如此容易(二)

    上一个例子我们是统一引用jquery.validate.js这样所有必填字段的提示信息都将是This field is required. 现在要改成动态提示,比如姓名如果为空则提示姓名不能为空,密码 ...

  9. in和exists哪个效率高本人测试证明

    in和exists哪个效率高本人测试证明 SQLSERVR语句 in和exists哪个效率高自己测试本人测试证明 最近很多人讨论in和exists哪个效率高,今天就自己测试一下 我使用的是客户的数据库 ...

  10. Singleton模式C++实现

    Singleton模式C++实现 Singleton是设计模式中比较简单的一个.园中的朋友们应该都很熟悉了.前段时间参加xxx外企的面试,和面试官讨论C++的时候正好写了一个.当时由于在有些地方考虑不 ...