概率分布之間的距離度量以及python實現(三)

?

概率分布之間的距離,顧名思義,度量兩組樣本分布之間的距離 。

1、卡方檢驗

統計學上的χ2統計量,由于它最初是由英國統計學家Karl Pearson在1900年首次提出的,因此也稱之為Pearson χ2,其計算公式為

\chi^2=\sum \frac{(A-E)^2}{E}=\sum_{i=1}^k \frac{(A_i-E_i)^2}{E_i}=\sum_{i=1}^k \frac{(A_i-np_i)^2}{np_i}  (i=1,2,3,…,k)

  其中,Ai為i水平的觀察頻數,Ei為i水平的期望頻數,n為總頻數,pi為i水平的期望頻率。i水平的期望頻數Ei等于總頻數n×i水平的期望概率pi。當n比較大時,χ2統計量近似服從k-1(計算Ei時用到的參數個數)個自由度的卡方分布。

?????? 卡方檢驗經常用來檢驗某一種觀測分布是不是符合某一類典型的理論分布(如二項分布,正態分布等)。觀察頻數與期望頻數越接近,兩者之間的差異越小,χ2值越小;如果兩個分布完全一致,χ2值為0;反之,觀察頻數與期望頻數差別越大,兩者之間的差異越大,χ2值越大。換言之,大的χ2值表明觀察頻數遠離期望頻數,即表明遠離假設。小的χ2值表明觀察頻數接近期望頻數,接近假設。因此,χ2是觀察頻數與期望頻數之間距離的一種度量指標,也是假設成立與否的度量指標。如果χ2值“小”,研究者就傾向于不拒絕H0;如果χ2值大,就傾向于拒絕H0。至于χ2在每個具體研究中究竟要大到什么程度才能拒絕H0,則要借助于卡方分布求出所對應的P值來確定(通常取p=0.05)。

在python中的實現:

# -*- coding: utf-8 -*-
'''
卡方公式(o-e)^2 / e
期望值和收集到數據不能低于5,o(observed)觀察到的數據,e(expected)表示期望的數據
(o-e)平方,最后除以期望的數據e
'''import numpy as np
from scipy.stats import chisquare        
list_observe=np.array([30,14,34,45,57,20])
list_expect=np.array([20,20,30,40,60,30])#方法一:根據公式求解(最后根據c1的值去查表判斷)
c1=np.sum(np.square(list_observe-list_expect)/list_expect)#方法二:使用scipy庫來求解
c2,p=chisquare(f_obs=list_observe, f_exp=list_expect)
'''
返回NAN,無窮小
''' 
if p>0.05 or p=="nan":print("H0 win,there is no difference")
else:print("H1 win,there is difference")

?

2、交叉熵

通常,一個信源發送出什么符號是不確定的,衡量它的不確定性可以根據其出現的概率來度量。概率大,出現機會多,不確定性小;反之就大。

不確定性函數f必須滿足兩個條件:

?? 1)是概率P的單調遞降函數;

?? 2)兩個獨立符號所產生的不確定性應等于各自不確定性之和,即f(P1,P2)=f(P1)+f(P2),這稱為可加性。

同時滿足這兩個條件的函數f是對數函數,即

在信源中,考慮的不是某一單個符號發生的不確定性,而是要考慮這個信源所有可能發生情況的平均不確定性。若信源符號有n種取值:U1…Ui…Un,對應概率為:P1…Pi…Pn,且各種符號的出現彼此獨立。這時,信源的平均不確定性應當為單個符號不確定性-logPi的統計平均值(E),可稱為信息熵,即

假設現在有一個樣本集中兩個概率分布p,q,其中p為真實分布,q為非真實分布。假如,按照真實分布p來衡量識別一個樣本所需要的編碼長度的期望為:
H(p)=
但是,如果采用錯誤的分布q來表示來自真實分布p的平均編碼長度,則應該是:
H(p,q)=

?我們稱H(p)為信息熵,稱H(p,q)為交叉熵。

交叉熵在CNN分類中經常用到,用來作為預測值和真實標簽值的距離度量。經過卷積操作后,最后一層出來的特征經過softmax函數后會變成一個概率向量,我們可以看作為是概率分布q, 而真實標簽我們可以看作是概率分布p, 因此真實分布p和預測分布q的交叉熵就是我們要求的loss損失值,即

在python中的實現:

import numpy as np
import tensorflow as tffea=np.asarray([6.5,4.2,7.4,3.5],np.float32)
label=np.array([1,0,0,0])#方法一:根據公式求解
def softmax(x):return np.exp(x)/np.sum(np.exp(x),axis=0)
loss1=-np.sum(label*np.log(softmax(fea)))#方法二:調用tensorflow深度學習框架求解
sess=tf.Session()
logits=tf.Variable(fea)
labels=tf.Variable(label)
sess.run(tf.global_variables_initializer())
loss2=sess.run(tf.losses.softmax_cross_entropy(labels,logits))
sess.close()

?

3、相對熵(relative entropy)

又稱為KL散度Kullback–Leibler divergence,簡稱KLD),信息散度(information divergence),信息增益(information gain)。

相對熵是交叉熵與信息熵的差值。即

相對熵=交叉熵-信息熵?

KL(p||q)=H(p,q)-H(p)

表示用分布q模擬真實分布p相比用p模擬p,所需的額外信息。

相對熵(KL散度)有兩個主要的性質。如下

(1)盡管 KL 散度從直觀上是個度量或距離函數,但它并不是一個真正的度量或者距離,因為它不具有對稱性,即

(2)相對熵具有非負性

總結一下:

信息熵公式:

?

交叉熵公式:

?

?

相對熵公式:

三者的關系:

在python中的實現:

import numpy as np
import scipy.statsp=np.asarray([0.65,0.25,0.07,0.03])
q=np.array([0.6,0.25,0.1,0.05])#方法一:根據公式求解
kl1=np.sum(p*np.log(p/q))#方法二:調用scipy包求解
kl2=scipy.stats.entropy(p, q) 

?

4、js散度(Jensen-Shannon)

因為kl散度不具對稱性,因此js散度在kl散度的基礎上進行了改進:

現有兩個分布p1和p2,其JS散度公式為:

?

在python中的實現:

import numpy as np
import scipy.statsp=np.asarray([0.65,0.25,0.07,0.03])
q=np.array([0.6,0.25,0.1,0.05])M=(p+q)/2#方法一:根據公式求解
js1=0.5*np.sum(p*np.log(p/M))+0.5*np.sum(q*np.log(q/M))#方法二:調用scipy包求解
js2=0.5*scipy.stats.entropy(p, M)+0.5*scipy.stats.entropy(q, M)

?

轉載于:https://www.cnblogs.com/denny402/p/7050779.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/252478.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/252478.shtml
英文地址,請注明出處:http://en.pswp.cn/news/252478.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Windows vs Linux:\r\n 與 \r

Linux 下文本文件的換行符為 \nWindows 下文本文件的換行符為 \r\n,占兩個字節: \r:歸位鍵(CR),ascii 碼為 13\n:換行鍵(LF),ascii 碼位 10也即單行無換行文本…

C++求職題

文章大部分內容轉載https://www.cnblogs.com/lanxuezaipiao/p/4127904.html 1.冒泡排序法: 如果有N個數字需要排序,那么需要進行(N-1)趟循環,第i趟循環需要對比的次數為(N-i)。所以可以用雙重循環,外層循環用于控制循環的趟數&a…

Python-爬蟲-requests

簡介 #介紹:使用requests可以模擬瀏覽器的請求,比起之前用到的urllib,requests模塊的api更加便捷(本質就是封裝了urllib3)#注意:requests庫發送請求將網頁內容下載下來以后,并不會執行js代碼&am…

JS如何監聽動畫結束

場景描述 在使用JS控制動畫時一般需要在動畫結束后執行回調去進行DOM的相關操作,所以需要監聽動畫結束進行回調。JS提供了以下事件用于監聽動畫的結束,簡單總結學習下。 CSS3動畫監聽事件 transitionEnd事件 transitionEnd事件會在CSS transition動畫結束…

封裝一個ViewPager真正的實現圖片無限循環滾動帶導航點

效果圖: 大家在寫項目的過程中常常會碰到須要實現Viewpager里面載入幾張圖片來循環自己主動輪播的效果,假設不封裝一下的話代碼分散在activity里面會顯得非常亂。并且也不利于我們下次復用,所以這里我把viewpager的相關代碼抽取出來放在了一個…

畢業論文頁眉頁腳頁碼插入

用word這么多年,第一次完整的操作了一遍頁眉頁腳頁碼的插入過程,其實三者都要要求奇偶頁不同 1.頁面布局-》右下角箭頭-》版式-》奇偶頁不同 因為文章不同的部分需要插入不同的頁眉頁腳頁碼,所以要在不同的部分插入分解符斷開它們的連接 2、…

巴黎市中心降下2019年第一場雪

當地時間1月22日,法國巴黎市中心降下2019年第一場雪,氣溫也隨之下降,街上的行人和車輛均有所減少。中新社記者 李洋 攝一對情侶在埃菲爾鐵塔前合影留念。無家可歸者在長椅上睡覺。游客在盧浮宮前拍照。

Echarts實現隱藏x軸,y軸,刻度線,網格

"yAxis": [{//就是一月份這個顯示為一個線段,而不是數軸那種一個點點"show" : true,"boundaryGap": true,"type": "category","name": "時間","data": ["1月", "2…

Ubuntu16.04 + Matlab2018+ desktop creation

https://blog.csdn.net/m0_37601622/article/details/82731879 https://blog.csdn.net/l18092482025/article/details/78906436 The second blog teaches you how to download a matlab.png when there is no matlab.png in /usr/share/applications/.

Atom插件主題推薦

注意事項 主題和插件這方面,比 Sublime Text 人性化多了..一些比較用心的作者增加了二度設置功能。 何為二度設置,就是不用手寫代碼修改配置文件,點點鼠標,填填輸入框就能生效,主題以 isotope-ui 這個做例子介紹,看圖: 進入二度設…

印尼發生洪災和山體滑坡 致多人死亡數千人撤離

當地時間1月23日,印尼南蘇拉威西省望加錫居民受洪水影像,用竹筏運送摩托車。近日,印尼南蘇拉威西省暴雨連連,造成洪災和山體滑坡。目前,暴雨引發的洪災和山體滑坡至少已造成8人死亡,數千人被迫撤離家園。。…

Django學習筆記第三篇--關于響應返回

一、返回簡單類型: 1 #1、返回簡單字符串 2 #from django.http import HttpResponse 3 return HttpResponse("return string") 4 #2、返回json 5 return HttpResponse(json.dumps(response_data),content_type"application/json") 二、返回文…

HTTP響應狀態碼

1XX:代表提示信息 2XX:代表成功信息 3XX:代表重定向 4XX:代表客戶端錯誤信息 5XX:代表服務器錯誤 信息 500:500 錯誤是服務器內部錯誤 ,而且是程序上錯誤 為多,可能是你的用戶權限的問題導致,或者是數據庫連接出現了錯誤. 501:服務器501服務器501錯誤是服務器是否具有請求功能.…

pycharm中無法import已經安裝的ros中的庫

使用pycharm寫python程序,無法import 已經安裝的ros包,并提示ImportError: No module named sensor_msgs.msg 解決方法如下 1. pycharm->file->settings->project:csvfile->project interpreter-> 點擊右側下三角選擇 show all 2. 在彈…

tcp/ip知識點的總結

知識點搜集于網絡,在加上自己的總結,還有很多不全,希望大家多提意見,共享學習! 一、TCP/IP是什么? TCP/IP是一個協議族,而不是單獨的協議。包括arp、ip、icmp、tcp、udp、http、ftp等協議 二、T…

搜索引擎ElasticSearchV5.4.2系列一之ES介紹

相關博文: 搜索引擎ElasticSearchV5.4.2系列一之ES介紹 搜索引擎ElasticSearchV5.4.2系列二之ElasticSearchV5.4.2kibanaV5.4.2x-packV5.4.2安裝 搜索引擎ElasticSearchV5.4.2系列三之ES使用 Elasticsearch 是一個開源的搜索引擎,建立在一個全文搜索引擎…

[譯] 前端組件設計原則

原文地址:Front end component design principles 原文作者:Andrew Dinihan 文中示例代碼:傳送門 限于個人能力,如有錯漏之處,煩請不吝賜教。 前言 我在最近的工作中開始使用 Vue 進行開發,但是我在上一家公…

imu_utils標定imu問題解決

在編譯過程中遇到的一些問題可以參照這個女生的文章 https://blog.csdn.net/fang794735225/article/details/92804030 下面是imu_utils的主頁,可以下載代碼,也有使用步驟 https://github.com/gaowenliang/imu_utils 我下載了imu_utils主頁最后面提供…

術語-服務:PaaS

ylbtech-術語-服務:PaaSPaaS是Platform-as-a-Service的縮寫,意思是平臺即服務。 把服務器平臺作為一種服務提供的商業模式。通過網絡進行程序提供的服務稱之為SaaS(Software as a Service),而云計算時代相應的服務器平臺或者開發環境作為服務…

PostgreSQL安裝和簡單配置

PostgreSQL安裝與使用 目錄 依賴包的安裝源碼編譯和安裝初始化數據庫集簇簡單配置依賴包安裝 PostgreSQL源碼安裝依賴以下四個軟件包 readline zlib flex bison 在Ubuntu中可是應用以下命令直接進行安裝: sudo apt-get install libreadline6 libreadline6-dev zlib1…