1. 程式人生 > >概率分佈之間的距離度量以及python實現(三)

概率分佈之間的距離度量以及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 tf
 
fea=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.stats
 
p=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.stats
 
p=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)

相關推薦

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

概率分佈之間的距離,顧名思義,度量兩組樣本分佈之間的距離 。 1、卡方檢驗 統計學上的χ2統計量,由於它最初是由英國統計學家Karl Pearson在1900年首次提出的,因此也稱之為Pearson χ2,其計算公式為   (i=1,2,3,…,k)   其中,Ai為i水平的觀察頻數,Ei為i水平

概率分佈之間距離度量以及python實現

原文連結:https://www.cnblogs.com/wt869054461/p/7156397.html 1. 歐氏距離(Euclidean Distance)        歐氏距離是最易於理解的一種距離計算方法,源自歐氏空間中兩點間的距離公式。 (1)二維平面

概率分佈之間距離度量以及python實現(四)

1、f 散度(f-divergence) KL-divergence 的壞處在於它是無界的。事實上KL-divergence 屬於更廣泛的 f-divergence 中的一種。 如果P和Q被定義成空間中的兩個概率分佈,則f散度被定義為: 一些通用的散度,如KL-divergence, Helling

距離度量以及python實現(二)

block eight spatial related sim tar 平移 spa spl 接上一篇:http://www.cnblogs.com/denny402/p/7027954.html 7. 夾角余弦(Cosine) 也可以叫余弦相似度。

距離度量以及python實現(一)

1. 歐氏距離(Euclidean Distance)        歐氏距離是最易於理解的一種距離計算方法,源自歐氏空間中兩點間的距離公式。 (1)二維平面上兩點a(x1,y1)與b(x2,y2)間的歐氏距離: (2)三維空間兩點a(x1,y1,z1)與b(x2,y2,z2)間的歐氏距離:

距離度量python實現

1. 歐氏距離(Euclidean Distance) 歐氏距離是最易於理解的一種距離計算方法,源自歐氏空間中兩點間的距離公式。 (1)二維平面上兩點a(x1,y1)與b(x2,y2)間的歐氏距離: (2)三維空間兩點a(x1,y1,z1)與b(x2,y2,z2)間的歐氏距離: (3)兩

神經網路學習(4)————自組織特徵對映神經網路(SOM)以及python實現

一、自組織競爭學習神經網路模型(無監督學習) (一)競爭神經網路   在競爭神經網路中,一層是輸入層,一層輸出層,輸出層又稱為競爭層或者核心層。在一次輸入中,權值是隨機給定的,在競爭層每個神經元獲勝的概率相同,但是最後會有一個興奮最強的神經元。興奮最強的神經元戰勝了其他神

神經網路學習(3)————BP神經網路以及python實現

一、BP神經網路結構模型                BP演算法的基本思想是,學習過程由訊號的正向傳播和誤差的反向傳播倆個過程組成,輸入從輸入層輸入,經隱層處理以後,傳向輸出層。如果輸出層的實際輸出和期望輸出不符合

神經網路學習(2)————線性神經網路以及python實現

一、線性神經網路結構模型 在結構上與感知器非常相似,只是神經元啟用函式不同,結構如圖所示: 若網路中包含多個神經元節點,就可形成多個輸出,這種神經網路可以用一種間接的方式解決線性不可分的問題,方法是用多個線性含糊對區域進行劃分,神經結構和解決異或問題如圖所示:  &nbs

文字相似度bm25演算法的原理以及Python實現(jupyter notebook)

今天我們一起來學習一下自然語言處理中的bm25演算法,bm25演算法是常見的用來計算query和文章相關度的相似度的。其實這個演算法的原理很簡單,就是將需要計算的query分詞成w1,w2,…,wn,然後求出每一個詞和文章的相關度,最後將這些相關度進行累加,最終就可以的得到文字相似度計算

決策樹(ID3 C4,5 減枝 CART演算法)以及Python實現

演算法簡述 在《統計學習方法》中,作者的if-then的描述,簡單一下子讓人理解了決策樹的基本概念。 決策樹,就是一個if-then的過程。 本文主要學習自《統計學習方法》一書,並努力通過書中數學推導來

PCA演算法的數學原理以及Python實現

部落格中的筆記: 降維當然意味著資訊的丟失,不過鑑於實際資料本身常常存在的相關性,我們可以想辦法在降維的同時將資訊的損失儘量降低。 根據相關性來講資訊的損失量降到最低 更正式的說,向量(x,y)實際上表示線性組合: x(1,0)?+y(0,1)? 不難證明所有二

SVM引數引數介紹以及python實現GA對SVM引數的優化

  最近開始玩起了機器學習,以前都是用matlab做一些機器學習的東西,畢竟要真正放到工程上應用還是python用起來比較好,所以今天就開始學習下使用SVM進行迴歸(分類)預測。 SVM 使用的一般步驟是: 1)準備資料集,轉化為 SVM支援的資料格式 : [label] [ind

RC4原理以及python實現

簡介 RC4(來自Rivest Cipher 4的縮寫)是一種流加密演算法,金鑰長度可變。它加解密使用相同的金鑰,一個位元組一個位元組地加密。因此也屬於對稱加密演算法。突出優點是在軟體裡面很容易實現。 加密流程 包含兩個處理過程:一是祕鑰排程演算法(KSA),用於之亂S盒的初

分類——樸素貝葉斯分類器以及Python實現

核心思想: 根據訓練資料獲取模型的後驗概率,對應後驗概率越大的類即預測類。 演算法簡介: 模型: 先驗概率:p(y=Ck)p(y=Ck) 條件概率:p(X=x|y=Ck)p(X=x|y=Ck) 後驗概率:p(y=Ck|X=x)p(y=Ck|X=

NG機器學習總結-(四)邏輯迴歸以及python實現

在第一篇部落格NG機器學習總結一中,我們提到了監督學習通常一般可以分為兩類:迴歸和分類。線性迴歸屬於迴歸問題,例如房價的預測問題。而判斷一封郵件是否是垃圾郵件、腫瘤的判斷(良性還是惡性)、線上交易是否欺詐都是分類問題,當然這些都是二分類的問題。 Email:Spam /

機器學習演算法 之邏輯迴歸以及python實現

下面分為兩個部分: 1. 邏輯迴歸的相關原理說明 2. 通過python程式碼來實現一個梯度下降求解邏輯迴歸過程 邏輯迴歸(Logistic Regression) 首先需要說明,邏輯迴歸屬於分類演算法。分類問題和迴歸問題的區別在於,分類問題的輸出是離散

NG機器學習總結-()線性迴歸以及python實現

在前面已經簡單介紹了迴歸問題(預測房價),其實在統計學中,線性迴歸(Linear Regression)是利用被稱為線性迴歸方程的最小平方函式(Cost Function)對一個或多個自變數和因變數之間關係進行建模的一種迴歸分析。這種函式式一個或多個被稱為迴歸係數的模型引數的

聚類——譜聚類演算法以及Python實現

譜聚類(spectral cluster)可以視為一種改進的Kmeans的聚類演算法。常用來進行影象分割。缺點是需要指定簇的個數,難以構建合適的相似度矩陣。優點是簡單易實現。相比Kmeans而言,處理高維資料更合適。 核心思想 構建樣本點的相似度矩陣(圖

聚類——MeanShift演算法以及Python實現

均值漂移演算法(MeanShift)是一種旨在發現團(blobs)的聚類演算法 核心思想 尋找核密度極值點並作為簇的質心,然後根據最近鄰原則將樣本點賦予質心 演算法簡介 核密度估計 根據樣本分佈估計在樣本空間的每一點的密度。估計某點的密度時,核密度估計方法會考慮