概率分布之间的距离度量以及python实现(三)
?
概率分布之間的距離,顧名思義,度量?jī)山M樣本分布之間的距離 。
1、卡方檢驗(yàn)
統(tǒng)計(jì)學(xué)上的χ2統(tǒng)計(jì)量,由于它最初是由英國(guó)統(tǒng)計(jì)學(xué)家Karl Pearson在1900年首次提出的,因此也稱(chēng)之為Pearson χ2,其計(jì)算公式為
(i=1,2,3,…,k)其中,Ai為i水平的觀察頻數(shù),Ei為i水平的期望頻數(shù),n為總頻數(shù),pi為i水平的期望頻率。i水平的期望頻數(shù)Ei等于總頻數(shù)n×i水平的期望概率pi。當(dāng)n比較大時(shí),χ2統(tǒng)計(jì)量近似服從k-1(計(jì)算Ei時(shí)用到的參數(shù)個(gè)數(shù))個(gè)自由度的卡方分布。
?????? 卡方檢驗(yàn)經(jīng)常用來(lái)檢驗(yàn)?zāi)骋环N觀測(cè)分布是不是符合某一類(lèi)典型的理論分布(如二項(xiàng)分布,正態(tài)分布等)。觀察頻數(shù)與期望頻數(shù)越接近,兩者之間的差異越小,χ2值越小;如果兩個(gè)分布完全一致,χ2值為0;反之,觀察頻數(shù)與期望頻數(shù)差別越大,兩者之間的差異越大,χ2值越大。換言之,大的χ2值表明觀察頻數(shù)遠(yuǎn)離期望頻數(shù),即表明遠(yuǎn)離假設(shè)。小的χ2值表明觀察頻數(shù)接近期望頻數(shù),接近假設(shè)。因此,χ2是觀察頻數(shù)與期望頻數(shù)之間距離的一種度量指標(biāo),也是假設(shè)成立與否的度量指標(biāo)。如果χ2值“小”,研究者就傾向于不拒絕H0;如果χ2值大,就傾向于拒絕H0。至于χ2在每個(gè)具體研究中究竟要大到什么程度才能拒絕H0,則要借助于卡方分布求出所對(duì)應(yīng)的P值來(lái)確定(通常取p=0.05)。
在python中的實(shí)現(xiàn):
# -*- coding: utf-8 -*- ''' 卡方公式(o-e)^2 / e 期望值和收集到數(shù)據(jù)不能低于5,o(observed)觀察到的數(shù)據(jù),e(expected)表示期望的數(shù)據(jù) (o-e)平方,最后除以期望的數(shù)據(jù)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])#方法一:根據(jù)公式求解(最后根據(jù)c1的值去查表判斷) c1=np.sum(np.square(list_observe-list_expect)/list_expect)#方法二:使用scipy庫(kù)來(lái)求解 c2,p=chisquare(f_obs=list_observe, f_exp=list_expect) ''' 返回NAN,無(wú)窮小 ''' if p>0.05 or p=="nan":print("H0 win,there is no difference") else:print("H1 win,there is difference")?
2、交叉熵
通常,一個(gè)信源發(fā)送出什么符號(hào)是不確定的,衡量它的不確定性可以根據(jù)其出現(xiàn)的概率來(lái)度量。概率大,出現(xiàn)機(jī)會(huì)多,不確定性小;反之就大。
不確定性函數(shù)f必須滿足兩個(gè)條件:
?? 1)是概率P的單調(diào)遞降函數(shù);
?? 2)兩個(gè)獨(dú)立符號(hào)所產(chǎn)生的不確定性應(yīng)等于各自不確定性之和,即f(P1,P2)=f(P1)+f(P2),這稱(chēng)為可加性。
同時(shí)滿足這兩個(gè)條件的函數(shù)f是對(duì)數(shù)函數(shù),即
在信源中,考慮的不是某一單個(gè)符號(hào)發(fā)生的不確定性,而是要考慮這個(gè)信源所有可能發(fā)生情況的平均不確定性。若信源符號(hào)有n種取值:U1…Ui…Un,對(duì)應(yīng)概率為:P1…Pi…Pn,且各種符號(hào)的出現(xiàn)彼此獨(dú)立。這時(shí),信源的平均不確定性應(yīng)當(dāng)為單個(gè)符號(hào)不確定性-logPi的統(tǒng)計(jì)平均值(E),可稱(chēng)為信息熵,即
假設(shè)現(xiàn)在有一個(gè)樣本集中兩個(gè)概率分布p,q,其中p為真實(shí)分布,q為非真實(shí)分布。假如,按照真實(shí)分布p來(lái)衡量識(shí)別一個(gè)樣本所需要的編碼長(zhǎng)度的期望為: H(p)= 但是,如果采用錯(cuò)誤的分布q來(lái)表示來(lái)自真實(shí)分布p的平均編碼長(zhǎng)度,則應(yīng)該是: H(p,q)=?我們稱(chēng)H(p)為信息熵,稱(chēng)H(p,q)為交叉熵。
交叉熵在CNN分類(lèi)中經(jīng)常用到,用來(lái)作為預(yù)測(cè)值和真實(shí)標(biāo)簽值的距離度量。經(jīng)過(guò)卷積操作后,最后一層出來(lái)的特征經(jīng)過(guò)softmax函數(shù)后會(huì)變成一個(gè)概率向量,我們可以看作為是概率分布q, 而真實(shí)標(biāo)簽我們可以看作是概率分布p, 因此真實(shí)分布p和預(yù)測(cè)分布q的交叉熵就是我們要求的loss損失值,即
在python中的實(shí)現(xiàn):
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])#方法一:根據(jù)公式求解 def softmax(x):return np.exp(x)/np.sum(np.exp(x),axis=0) loss1=-np.sum(label*np.log(softmax(fea)))#方法二:調(diào)用tensorflow深度學(xué)習(xí)框架求解 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、相對(duì)熵(relative entropy)
又稱(chēng)為KL散度(Kullback–Leibler divergence,簡(jiǎn)稱(chēng)KLD),信息散度(information divergence),信息增益(information gain)。
相對(duì)熵是交叉熵與信息熵的差值。即
相對(duì)熵=交叉熵-信息熵?
KL(p||q)=H(p,q)-H(p)
表示用分布q模擬真實(shí)分布p相比用p模擬p,所需的額外信息。
相對(duì)熵(KL散度)有兩個(gè)主要的性質(zhì)。如下
(1)盡管 KL 散度從直觀上是個(gè)度量或距離函數(shù),但它并不是一個(gè)真正的度量或者距離,因?yàn)樗?strong>不具有對(duì)稱(chēng)性,即
(2)相對(duì)熵具有非負(fù)性
總結(jié)一下:
信息熵公式:
?
交叉熵公式:
?
?
相對(duì)熵公式:
三者的關(guān)系:
在python中的實(shí)現(xiàn):
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])#方法一:根據(jù)公式求解 kl1=np.sum(p*np.log(p/q))#方法二:調(diào)用scipy包求解 kl2=scipy.stats.entropy(p, q)?
4、js散度(Jensen-Shannon)
因?yàn)閗l散度不具對(duì)稱(chēng)性,因此js散度在kl散度的基礎(chǔ)上進(jìn)行了改進(jìn):
現(xiàn)有兩個(gè)分布p1和p2,其JS散度公式為:
?
在python中的實(shí)現(xiàn):
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#方法一:根據(jù)公式求解 js1=0.5*np.sum(p*np.log(p/M))+0.5*np.sum(q*np.log(q/M))#方法二:調(diào)用scipy包求解 js2=0.5*scipy.stats.entropy(p, M)+0.5*scipy.stats.entropy(q, M)?
轉(zhuǎn)載于:https://www.cnblogs.com/denny402/p/7050779.html
總結(jié)
以上是生活随笔為你收集整理的概率分布之间的距离度量以及python实现(三)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 信用卡不要了怎么注销?不想影响信用就得这
- 下一篇: 赛码网算法: 上台阶 ( python3