当前位置: 首页 > news >正文

广东企业微信网站开发菜鸟教程网站开发

广东企业微信网站开发,菜鸟教程网站开发,资源网站优化排名网站,建设银行网站为什么进不去KL散度 直观理解#xff1a;KL散度是一种衡量两个分布之间匹配程度的方法。通常在概率和统计中#xff0c;我们会用更简单的近似分布来代替观察到的数据或复杂的分布#xff0c;KL散度帮我们衡量在选择近似值时损失了多少信息。 在信息论或概率论中#xff0c;KL散度#…KL散度 直观理解KL散度是一种衡量两个分布之间匹配程度的方法。通常在概率和统计中我们会用更简单的近似分布来代替观察到的数据或复杂的分布KL散度帮我们衡量在选择近似值时损失了多少信息。 在信息论或概率论中KL散度Kullback–Leibler divergence又称为相对熵relative entropy是一种描述两个概率分布P和Q差异的一种方法。它是非对称的这意味着D(P||Q)≠D(Q||P)。特别的在信息论中D(P||Q)表示当用概率分布Q来拟合真实分布P时产生的信息损耗其中Q表示真实分布Q表示P的拟合分布。 对一个离散随机变量或连续随机变量的两个概率分布P和Q来说KL散度的定义分别如下所示 $D(P||Q) ∑ i ∈ X P ( i ) ∗ [ l o g ( P ( i ) Q ( i ) ) ] \sum_{i\in{X}}P(i) * [log(\frac {P(i)}{Q(i)})] ∑i∈X​P(i)∗[log(Q(i)P(i)​)] $D(P||Q) ∫ x P ( x ) ∗ [ l o g ( P ( i ) Q ( i ) ) ] d x \int_{x}P(x) * [log(\frac {P(i)}{Q(i)})]dx ∫x​P(x)∗[log(Q(i)P(i)​)]dx 但似乎还是有点难以理解为什么KL散度就可以衡量两个分布之间的匹配程度了下面举例说明。 举例探索 假设我们是一组正在广袤无垠的太空中进行研究的科学家。我们发现了一些太空蠕虫这些太空蠕虫的牙齿数量各不相同在收集和许多样本后我们得出了蠕虫牙齿数量的经验概率分布用数组表示true_data[0.02, 0.03, 0.05, 0.14, 0.16, 0.15, 0.12, 0.08, 0.1, 0.08, 0.07]。现在我们需要将这些信息发回地球。但从太空向地球发送信息的成本很高所以我们需要用尽量少的数据表达这些信息。我们有个好方法我们不发送单个数值而是绘制一张图表。这样就将数据转化为分布。 可视化如下 true_data[0.02, 0.03, 0.05, 0.14, 0.16, 0.15, 0.12, 0.08, 0.1, 0.08, 0.07] assert sum(true_data)1.0pylab.bar(np.arange(len(true_data)), true_data) pylab.xlabel(Different Teeth Bins, fontsize18) pylab.title(Probability Distribution of Space Worm Teenth, fontsize18) pylab.ylabel(probability, fontsize18) pylab.xticks(np.arange(len(true_data))) pylab.show()简化尝试均匀分布Uniform distribution 这些数据很好但是我们想更加简化这些数据第一个选择是均匀分布。上面的概率数据转化为均匀分布。一共11个样本所以每一个牙齿数量的概率都是1/11。 def get_unif_probability(n):return 1.0/nunif_data [get_unif_probability(11) for _ in range(11)] width0.3pylab.bar(np.arange(len(true_data)),true_data,widthwidth,labelTrue) pylab.bar(np.arange(len(true_data))width,unif_data,widthwidth,labelUniform) pylab.xlabel(Different Teeth Bins,fontsize18) pylab.title(Probability Distribution of Space Worm Teeth,fontsize18) pylab.ylabel(Probability,fontsize18) pylab.xticks(np.arange(len(true_data))) pylab.legend() pylab.show()简化尝试二项分布binomial distribution 显然我们的数据不是均匀分布的现在尝试另一种二项分布对数据进行建模。我们需要计算二项分布的概率参数p本例中n10E(X)5.7由E(X)np得到p0.57。则对于每一类牙齿个数的概率可以使用以下公式计算 P ( X i ) C n k p k ( 1 − p ) ( n − k ) P(Xi)C_n^kp^k(1-p)^{(n-k)} P(Xi)Cnk​pk(1−p)(n−k) i(1,2,…) def get_bino_probability(mean,k,n):return (factorial(n)/(factorial(k)*factorial(n-k)))*(mean**k)*((1.0-mean)**(n-k))def get_bino_success(true_data,n):return np.sum(np.array(true_data)*np.arange(len(true_data)))/10.0n_trials 10 succ get_bino_success(true_data,n_trials) print(Success probability: ,succ)bino_data [get_bino_probability(succ,k,n_trials) for k in range(11)]width0.3pylab.bar(np.arange(len(true_data)),true_data,widthwidth,labelTrue) pylab.bar(np.arange(len(true_data))width,bino_data,widthwidth,labelBinomial) pylab.xlabel(Different Teeth Bins,fontsize18) pylab.title(Probability Distribution of Space Worm Teeth,fontsize18) pylab.ylabel(Probability,fontsize18) pylab.xticks(np.arange(len(true_data))) pylab.legend() pylab.show()汇总分析 现在我们使用了两个分布去近似我们原始的概率分布将它们绘制在同一个图中进行比较如下图所示 pylab.bar(np.arange(len(true_data))-width,true_data,widthwidth,labelTrue) pylab.bar(np.arange(len(true_data)),unif_data,widthwidth,labelUniform) pylab.bar(np.arange(len(true_data))width,bino_data,widthwidth,labelBinomial) pylab.xlabel(Different Teeth Bins,fontsize18) pylab.title(Probability Distribution of Space Worm Teeth,fontsize18) pylab.ylabel(Probability,fontsize18) pylab.xticks(np.arange(len(true_data))) pylab.legend() pylab.show()可以看到这两个分布都没有很好的近似我们的原始数据但是我们需要衡量一下哪个更好。 我们最开始关注的就是如何使发送的信息最少两个方法都减少了参数量我们可以看哪个携带了更多的信息这就是KL散度的作用。 熵 KL起源于信息论信息论的主要目标是量化数据中有多少信息。某个信息 x i x_i xi​出现的不确定的大小定义为 x i x_i xi​所携带的信息量用 I ( x i ) I(x_i) I(xi​)表示 I ( x i ) I(x_i) I(xi​)与信息 x i x_i xi​出现的概率 p ( x i ) p(x_i) p(xi​)之间的关系为 I ( x i ) l o g 1 p ( x i ) − l o g p ( x i ) I(x_i) log\frac{1}{p(x_i)} -logp(x_i) I(xi​)logp(xi​)1​−logp(xi​) 信息论中最重要的指标称为熵通常表示为H。概率分布的熵的定义时 H − ∑ i 1 N p ( x i ) l o g p ( x i ) H - \sum_{i1}^Np(x_i)logp(x_i) H−∑i1N​p(xi​)logp(xi​) 如果我们在计算中使用2为底的对数我们可以将熵解释为“编码所需的最小比特数”。在这种情况下信息是指根据我们的经验分布给出的每个牙齿计数观察。根据我们观察到的数据我们的概率分布的熵为3.12比特。比特数告诉我们在平均情况下我们需要多少比特来编码我们在单个情况下观察到的牙齿数量的下限。 但是熵并不能告诉我们最佳的编码方案以帮助我们实现这种压缩。最优编码是一个非常有趣的话题但对于理解KL散度并不是必要的。熵的关键是仅仅知道我们需要的比特数的理论下限我们有一种方法来准确量化数据中包含的信息量。 现在我们可以量化这一点我们想要量化的是当我们用参数化的近似替代我们观察到的分布时丢失了多少信息。 使用KL散度测量丢失的信息 Kullback-Leibler散度只是对我们的熵公式的略微修改。不仅仅是有我们的概率分布p还有上近似分布q。然后我们查看每个log值的差异 $D(p||q) ∑ i ∈ X p ( i ) ∗ [ l o g ( p ( i ) q ( i ) ) ] \sum_{i\in{X}}p(i) * [log(\frac {p(i)}{q(i)})] ∑i∈X​p(i)∗[log(q(i)p(i)​)] 利用KL散度我们可以精确地计算出当我们近似一个分布与另一个分布时损失了多少信息。让我们回到我们的数据看看结果如何。 比较我们的近似分布 def get_klpq_div(p_probs, q_probs):kl_div 0.0for pi, qi in zip(p_probs, q_probs):kl_div pi*np.log(pi/qi)return kl_divdef get_klqp_div(p_probs, q_probs):kl_div 0.0for pi, qi in zip(p_probs, q_probs):kl_div qi*np.log(qi/pi)print(KL(True||Uniform): ,get_klpq_div(true_data,unif_data)) print(KL(True||Binomial): ,get_klpq_div(true_data,bino_data)) 从计算的KL结果来看使用二项分布损失的信息大于使用均匀分布损失的信息所以我们最后如果从中选择一个还是会选择均匀分布。 参考文章 Kullback-Leibler(KL)散度介绍 KL散度代码地址
http://wiki.neutronadmin.com/news/205699/

相关文章:

  • 网站建设周期规划有服务器了怎么做网站
  • 做网站内嵌地图时事新闻热点素材
  • 怎样把域名和做的网站连接不上上海企业网站的建设
  • 响应式网站做mip做游戏网站的需求分析
  • 西安制作网站四川重庆是哪个省
  • 正版宝安网站推广兼职 网站 小程序 建设
  • 中国建设银行官网站信用卡管理南海建设网站
  • 公司网站制作仿站如何建网站教程视频
  • 交流网站建设项目背景小程序科技有限公司
  • php网站开发实例教程实验报告网站页面设计的特色
  • 网站开发php程序员下载爱南宁app下载
  • 成都网站建设 Vr功能 卓 公司进一步加强网站建设
  • 虚拟电脑可以做网站吗菏泽做网站设计
  • 网络公司做的网站东莞公司注册地址
  • 陕西建设厅证件查询网站网页设计制作教程
  • 做视频网站赚钱嘛广西南宁建设银行招聘网站
  • 镇平微网站建设建设网站的基本流程是什么
  • 医院网站站内文章收录量多少短视频获客系统
  • 济南网站备案流程wordpress的排版
  • 旅游网站项目计划书软件定制开发服务
  • vs2010网站开发 SQL论文格式样板模板
  • 微信开发网站建设常德城乡和住房建设局网站
  • 网站名称需要用注册吗网站设计及建设合同
  • 云空间的网站品牌策划公司怎么找客户
  • 城阳做网站的做网站需要审批不
  • 爱站seo工具包官网网络营销的方式有哪些?举例说明
  • 如何建立免费的网站网站制作相关知识
  • 合肥仿站定制模板建站网站建设责任分工
  • 汇川区住房和城乡建设厅网站如何制作微信小程序店铺
  • vps被攻击网站打不开ping值高下载中国最新军事新闻