千家信息网

卡方的原理及python代码实现

发表于:2024-11-18 作者:千家信息网编辑
千家信息网最后更新 2024年11月18日,本篇内容主要讲解"卡方的原理及python代码实现",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"卡方的原理及python代码实现"吧!卡方检验的原理:卡方
千家信息网最后更新 2024年11月18日卡方的原理及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安全错误 数据库的锁怎样保障安全 怎么共享两台电脑的数据库 北海网络安全保卫支队 外包软件开发享受退税吗 网页源代码在服务器哪个文件夹 计算机网络技术开设什么课程 php与数据库什么关系 吴忠市办公软件开发设计方案 网络安全录像机如何与电视连接 什么是数据库安全的地道保障 mc国服服务器加模组 安徽数据软件开发过程标准 如何建立贷款数据库系统 数据库中日期数据如何限定 360摄像网络安全不 版式文件服务器地址怎么获取 金蝶用什么软件开发的 腾讯云轻量服务器搭建云免 网络技术学习计划高中 腾讯招聘网络安全运维 网络安全的认识错误的是 网络管理综合实训 网络技术 全国网络安全员法制竞赛花絮 阜阳工程管理软件开发费用 云同步app数据库 EHS和网络安全试题 嵌入式和软件开发哪个吃香 温州福州app软件开发 天津先进软件开发不二之选 太原互联网科技管理有限公司 如何获取数据库中的数量
0