溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

卡方的原理及python代碼實現(xiàn)

發(fā)布時間:2021-09-01 12:39:26 來源:億速云 閱讀:242 作者:chen 欄目:大數(shù)據(jù)

本篇內(nèi)容主要講解“卡方的原理及python代碼實現(xiàn)”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學(xué)習(xí)“卡方的原理及python代碼實現(xiàn)”吧!

卡方檢驗的原理:
      卡方檢驗就是統(tǒng)計樣本的實際觀測值與理論推斷值之間的偏離程度,實際觀測值與理論推斷值之間的偏離程度就決定卡方值的大小,如果卡方值越大,二者偏差程度越大;反之,二者偏差越?。蝗魞蓚€值完全相等時,卡方值就為0,表明理論值完全符合,也就是不相關(guān)。也就是:偏離越大,相關(guān)性越大。

注意:卡方檢驗針對分類變量。
檢驗方法(獨立樣本四格表):

假設(shè)有兩個分類變量X和Y,它們的值域分別為{x1, x2}和{y1, y2},其樣本頻數(shù)列聯(lián)表為

卡方的原理及python代碼實現(xiàn)


若要推斷的論述為H1:“X與Y有關(guān)系”,可以利用獨立性檢驗來考察兩個變量是否有關(guān)系,并且能較精確地給出這種判斷的可靠程度。具體的做法是,由表中的數(shù)據(jù)算出檢驗統(tǒng)計量

卡方的原理及python代碼實現(xiàn)

的值。
其中A為實際值,也就是第一個四格表里的4個數(shù)據(jù),T為理論值,也就是理論值四格表里的4個數(shù)據(jù)。

x2用于衡量實際值與理論值的差異程度(也就是卡方檢驗的核心思想),包含了以下兩個信息:

實際值與理論值偏差的絕對大?。ㄓ捎谄椒降拇嬖?,差異是被放大的)
差異程度與理論值的相對大小

卡方分布的臨界值
既然已經(jīng)得到了x2值,我們又怎么知道x2值是否合理?也就是說,怎么知道無關(guān)性假設(shè)是否可靠?答案是,通過查詢卡方分布的臨界值表。

這里需要用到一個自由度的概念,自由度等于V = (行數(shù) - 1) * (列數(shù) - 1),對四格表,自由度V = 1

對V = 1,卡方分布的臨界概率是:

卡方的原理及python代碼實現(xiàn)

如果一個類別特征有多個分類,那么自由度就會變,同樣對應(yīng)的卡方分布的臨界值和臨界概率也要做出調(diào)整。

舉例1:類別特征相關(guān)關(guān)系檢驗

這個實例你可以理解為目標(biāo)變量屬于或者不屬于娛樂與自變量是否包含吳亦凡是否是相關(guān),輔助做類別性特征的變量篩選,或者對于兩個類別特征只是單純的看一下兩個特征是否相關(guān)。

舉個例子,假設(shè)我們有一堆新聞標(biāo)題,需要判斷標(biāo)題中包含某個詞(比如吳亦凡)是否與該條新聞的類別歸屬(比如娛樂)是否有關(guān),我們只需要簡單統(tǒng)計就可以獲得這樣的一個四格表:

卡方的原理及python代碼實現(xiàn)

通過這個四格表我們得到的第一個信息是:標(biāo)題是否包含吳亦凡確實對新聞是否屬于娛樂有統(tǒng)計上的差別,包含吳亦凡的新聞屬于娛樂的比例更高,但我們還無法排除這個差別是否由于抽樣誤差導(dǎo)致。那么首先假設(shè)標(biāo)題是否包含吳亦凡與新聞是否屬于娛樂是獨立無關(guān)的,隨機抽取一條新聞標(biāo)題,屬于娛樂類別的概率是:(19 + 34) / (19 + 34 + 24 +10) = 60.9%

卡方的原理及python代碼實現(xiàn)

def Chi2(df, total_col, bad_col):
   
   #:param df: 包含全部樣本總計與壞樣本總計的數(shù)據(jù)框
   #:param total_col: 全部樣本的個數(shù)
   #:param bad_col: 壞樣本的個數(shù)
   #:return: 卡方值
   
   df2 = df.copy()
   # 求出df中,總體的壞樣本率和好樣本率
   badRate = sum(df2[bad_col])*1.0/sum(df2[total_col])
   # 當(dāng)全部樣本只有好或者壞樣本時,卡方值為0
   if badRate in [0,1]:
       return 0
   df2['good'] = df2.apply(lambda x: x[total_col] - x[bad_col], axis = 1)
   goodRate = sum(df2['good']) * 1.0 / sum(df2[total_col])
   # 期望壞(好)樣本個數(shù)=全部樣本個數(shù)*平均壞(好)樣本占比
   df2['badExpected'] = df[total_col].apply(lambda x: x*badRate)
   df2['goodExpected'] = df[total_col].apply(lambda x: x * goodRate)
   badCombined = zip(df2['badExpected'], df2[bad_col])
   goodCombined = zip(df2['goodExpected'], df2['good'])
   badChi = [(i[0]-i[1])**2/i[0] for i in badCombined]
   goodChi = [(i[0] - i[1]) ** 2 / i[0] for i in goodCombined]
   chi2 = sum(badChi) + sum(goodChi)
   return chi2

到此,相信大家對“卡方的原理及python代碼實現(xiàn)”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI