千家信息网

卡方的原理及python代码实现

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,本篇内容主要讲解"卡方的原理及python代码实现",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"卡方的原理及python代码实现"吧!卡方检验的原理:卡方
千家信息网最后更新 2026年11月03日卡方的原理及python代码实现

本篇内容主要讲解"卡方的原理及python代码实现",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"卡方的原理及python代码实现"吧!

卡方检验的原理:
卡方检验就是统计样本的实际观测值与理论推断值之间的偏离程度,实际观测值与理论推断值之间的偏离程度就决定卡方值的大小,如果卡方值越大,二者偏差程度越大;反之,二者偏差越小;若两个值完全相等时,卡方值就为0,表明理论值完全符合,也就是不相关。也就是:偏离越大,相关性越大。

注意:卡方检验针对分类变量。
检验方法(独立样本四格表):

假设有两个分类变量X和Y,它们的值域分别为{x1, x2}和{y1, y2},其样本频数列联表为


若要推断的论述为H1:"X与Y有关系",可以利用独立性检验来考察两个变量是否有关系,并且能较精确地给出这种判断的可靠程度。具体的做法是,由表中的数据算出检验统计量

的值。
其中A为实际值,也就是第一个四格表里的4个数据,T为理论值,也就是理论值四格表里的4个数据。

x2用于衡量实际值与理论值的差异程度(也就是卡方检验的核心思想),包含了以下两个信息:

实际值与理论值偏差的绝对大小(由于平方的存在,差异是被放大的)
差异程度与理论值的相对大小

卡方分布的临界值
既然已经得到了x2值,我们又怎么知道x2值是否合理?也就是说,怎么知道无关性假设是否可靠?答案是,通过查询卡方分布的临界值表。

这里需要用到一个自由度的概念,自由度等于V = (行数 - 1) * (列数 - 1),对四格表,自由度V = 1

对V = 1,卡方分布的临界概率是:

如果一个类别特征有多个分类,那么自由度就会变,同样对应的卡方分布的临界值和临界概率也要做出调整。

举例1:类别特征相关关系检验

这个实例你可以理解为目标变量属于或者不属于娱乐与自变量是否包含吴亦凡是否是相关,辅助做类别性特征的变量筛选,或者对于两个类别特征只是单纯的看一下两个特征是否相关。

举个例子,假设我们有一堆新闻标题,需要判断标题中包含某个词(比如吴亦凡)是否与该条新闻的类别归属(比如娱乐)是否有关,我们只需要简单统计就可以获得这样的一个四格表:

通过这个四格表我们得到的第一个信息是:标题是否包含吴亦凡确实对新闻是否属于娱乐有统计上的差别,包含吴亦凡的新闻属于娱乐的比例更高,但我们还无法排除这个差别是否由于抽样误差导致。那么首先假设标题是否包含吴亦凡与新闻是否属于娱乐是独立无关的,随机抽取一条新闻标题,属于娱乐类别的概率是:(19 + 34) / (19 + 34 + 24 +10) = 60.9%

def Chi2(df, total_col, bad_col):

#:param df: 包含全部样本总计与坏样本总计的数据框
#:param total_col: 全部样本的个数
#:param bad_col: 坏样本的个数
#:return: 卡方值

df2 = df.copy()
# 求出df中,总体的坏样本率和好样本率
badRate = sum(df2[bad_col])*1.0/sum(df2[total_col])
# 当全部样本只有好或者坏样本时,卡方值为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])
# 期望坏(好)样本个数=全部样本个数*平均坏(好)样本占比
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代码实现"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

样本 理论 检验 两个 也就是 实际 新闻 理论值 类别 四格 娱乐 变量 标题 特征 亦凡 原理 自由 个数 数据 程度 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 河南云网互联网络科技有限公司 互联网科技工作委员会毛军 互联网科技与金融科技 以房互联网科技 互联网科技论文 智慧科技互联网 撒么互联网科技公司 互联网科技公司介绍 互联网科技英文翻译 互联网金融和金融科技 互联网科技公司做什么 西藏七维空间互联网科技有限公司 科技与互联网哪个更好 岳阳华臻互联网科技有限公司 移动互联网科技公司 速维有品互联网信息科技(苏州)有限公司 浙南科技城互联网大厦建设工程 烟台灵鸽互联网科技有限公司 好易买互联网科技 黑龙江互联网科技公司 湖南永感互联网科技有限公司 科技制造互联网公司 字节跳动和互联网科技 哈尔滨屹滨互联网科技有限公司 互联网金融科技名词解释 互联网科技包装股份有限公司上市 工业互联网科技创业 上海同邻互联网科技有限公司规模 互联网科技收购价值 玉溪新华互联网科技怎么选
0