首页 > 编程语言 >机器学习python实践——由特征选择引发的关于卡方检验的一些个人思考

机器学习python实践——由特征选择引发的关于卡方检验的一些个人思考

时间:2024-06-22 13:00:06浏览次数:12  
标签:表格 卡方值 特征选择 公式 理论值 检验 python 卡方

最近在用python进行机器学习实践,在做到特征选择这一部分时,对于SelectPercentile和SelectKBest方法有些不理解,所以去了查看了帮助文档,但是在帮助文档的例子中出现了"chi2",没接触过,看过去就更懵了,查了一下资料知道"chi2"是在求卡方值,又没接触过,我整个人都裂了,但是还是耐着性子去查了资料,然后这篇文章主要想记录并分享一下关于卡方检验的一些个人思考,如果有误请见谅,欢迎大家一起前来探讨。当然,如果这篇文章还能入得了各位“看官”的法眼,麻烦点赞、关注、收藏,支持一下!

在引言中提到了SelectPercentile和SelectKBest所以先简单的啰嗦讲几句:

两个方法在我看来差不多,只不过一个是通过百分比来指定被选特征数量,一个是通过个数来指定被选特征数量,在帮助文档的例子中应该会看到 SelectKBest(chi2, k=2),这句语句的意思是我们将卡方值作为评分函数,然后选取分高的两个特征

特征选择的帮助文档的链接附上,有需要的小伙伴自取:1.13 特征选择-scikit-learn中文社区

下面我们进入正文,对卡方检验进行讲解:

一、卡方检验是什么?

个人感觉卡方检验主要是为了检验某个自变量/特征X和因变量/标签Y之间是否存在显著关系

二、卡方检验怎么做?

步骤1:先假定特征X与变量Y相互独立,即不存在显著关系

步骤2:根据上面假定算出理论值

步骤3:将理论值和观测值带入到Pearson公式中计算卡方值

步骤4:对计算出来的卡方值进行查表操作,以判断特征X和标签Y之间是否存在显著关系

三、独立样本2x2表格卡方检验计算举例

卡方值基本公式——Pearson公式

其中A代表着实际值或观测值,T表示理论值或期望

步骤1没啥好讲的,就是一个假定,所以直接从步骤2开始,对于如何求解理论值,举个例子,大家感受一下,例子来源百度百科,相关链接大家有需要可以去文末自取。

假定我们要检验性别与化妆是否有关系,所以自变量X的定义域为{X1,X2}={化妆,不化妆},因变量Y的值域为{Y1,Y2}={男,女},我们用一个2x2的表格表示,即如下所示:

PS:表格中的括号外的数据为观测值,括号内的数据为理论值

Y1:男

Y2:女

行总计

X1:化妆

15(55)

95(55)

X2:不化妆

85(45)

5(45)

列总计

表中15表示抽样时,男生化妆的数量,95表示女生化妆的数量,85表示男生不化妆的数量,5表示女生化妆的数量

先给出理论值公式

其中表示X=Xi,Y=Yj的理论值,即第i行j列的理论值;表示第i行总计,表示第j列总计 

将上述表格的数据带入到理论值公式中,就可以得到理论值,如下所示:

将所有的观测值和理论值带入到Pearson公式中,就可以得到卡方值,如下所示:

其中表示X=Xi,Y=Yj的观测值,即第i行j列的观测值

我们对下表进行查询,在下表中k值最大为10.828,而卡方值为129.29,所以我们可以知道卡方值大于10.828的概率是0.1%,也就是说性别与化妆与否不存在显著关系的概率最大仅有0.1%,即性别与化妆显著存在显著关系的概率大于99.9%,所以性别与化妆显著存在显著关系

由此可知,卡方值越大,两个变量之间存在显著关系的概率越大

 看到了上面的卡方值计算,可能大部分小伙伴都会觉得计算很复杂,那有没有简便的速算公式去直接套用呢?我的答案是:!!!下面给出:

对于2x2的表格,即特征数=2,标签数=2的情况,卡方值的速算公式如下:

我们将上面性别与化妆与否是否存在显著关系的数据带入到速算公式中检验一下,看看是否正确

经过速算公式算出的卡方值也是129.29,与Pearson公式结果一致,所以可证速算公式是正确的

四、多独立样本RxC表格卡方检验计算举例

可能很多小伙伴已经发现了,上面的例子是一个很特殊的情况,自变量或者特征的值只有两个,因变量或者标签的值也只有两个,那如果自变量或者因变量的值不止两个该怎么办呢?

两种办法:

1、按照上面给出的Pearson公式,先算出理论值,再把理论值带入到卡方值的公式中计算;

2、采用独立样本RxC表格的速算公式进行计算,具体公式如下所示:

下面给出一个3x2表格卡方检验的例子,如下所示:

无效有效行总计
外用膏药组26(13.805)118(130.195)144
物理疗法组7(19.748)199(186.252)206
药物治疗组18(17.447)164(164.553)182
列总计51481532

 将所有的观测值和理论值带入到Pearson公式中,就可以得到卡方值,如下所示:

 我们再用速算公式计算一下卡方值,如下所示:

惊喜的发现速算公式算出来的结果和Pearson公式一致,所以可证速算公式是正确的 

五、自由度说明

 当然有些小伙伴在看一些相关资料的时候会看到自由度,我这边也简单的提一嘴,自由度的公式非常简单,如下所示:

以本文第一张表格和第三张表格为例,R代表表格中的行数,C代表表格中的列数,对于第一张表格R=C=2,对于第三张表格R=3,C=2

为啥要求自由度?——也是为了查表,只是查的不是本文中的第二张表,而是一张叫做“卡方分布临界值”的表,具体怎么用这个表,有兴趣的小伙伴可以查看下面的视频链接:

【统计科普】七分钟轻松掌握卡方检验 - 卡方拟合度检验、卡方独立性检验_哔哩哔哩_bilibili

六、数值型变量说明

上面的例子中都是一些字符串式的“类型特征”,但是实际生活都是一群数值类型的“连续特征”,那么对于数值类型的“连续特征”该如何处理呢?

其实很简单,只用将数据离散,然后分段即可,并且各段之间互不相交,比如说特征X,他的取值范围是(1,10),然后抽样十次,十次的结果是[1,2,3,4,5,6,7,8,9,4],我们将X分成两段,其中,第一段A1=(1,5],第二段A2=(5,10),然后将抽样结果按照每段的取值范围放入相应的段中即可,即A1:{1,2,3,4,4,5};A2:{6,7,8,9}

七、应用条件

写到这里,有些乏了,不想手敲了,直接从网上截图

解释一下,样本含量对应本文中的n,理论频数对应本文中的

矫正公式的话,大家可以去看一下下面的文章:

卡方检验知识一文汇总 - 简书 (jianshu.com)

参考文章

卡方检验(Chi_square_test): 原理及python实现 - Leo_John - 博客园 (cnblogs.com)

卡方检验_百度百科 (baidu.com)

卡方检验x2什么意思_卡方检验和方差分析-腾讯云开发者社区-腾讯云 (tencent.com)

 卡方检验知识一文汇总 - 简书 (jianshu.com)

【统计科普】七分钟轻松掌握卡方检验 - 卡方拟合度检验、卡方独立性检验_哔哩哔哩_bilibili

标签:表格,卡方值,特征选择,公式,理论值,检验,python,卡方
From: https://blog.csdn.net/SZX0311/article/details/139760583

相关文章

  • 程序猿大战Python——面向对象——继承基础
    定义类的几种语法==目标:==了解定义类的标准语法。我们知道,可以使用class关键字定义类。在类的使用中,定义方式有三种:(1)【类名】(2)【类名()】(3)【类名(object)】说明:区别在于类名后面是否加其他内容。方式1语法:class类名:代码...方式2语法:class类名(......
  • python库BeeWare,一个如雷贯耳的可以创建原生应用程序的库
    目录BeeWare包括以下主要组件和工具:创建BeeWare虚拟环境配置BeeWare 创建一个新的BeeWare项目(HelloWorld!)尝试HelloWorld样例BeeWare 是一个开源项目,旨在帮助开发者使用Python创建原生应用程序,覆盖了移动、桌面和Web平台。BeeWare通过提供一系列工具和库......
  • Python连接Etcd集群基础教程
    1、背景介绍最近接手了一个项目,项目是使用Python开发的,其中使用到了Etcd,但是项目之前开发的方式,只能够支持单节点连接Etcd,不能够在Etcd节点发生故障时,自动转移。因此需要实现基于现有etcdsdk开发一个能够实现故障转移的功能,或者更换etcdsdk来实现故障转移等功能。先来看看项......
  • 【深度学习】python之人工智能应用篇——图像生成
    图像生成是计算机视觉和计算机图形学领域的一个重要研究方向,它指的是通过计算机算法和技术生成或合成图像的过程。随着深度学习、生成模型等技术的发展,图像生成领域取得了显著的进步,并在多个应用场景中发挥着重要作用。概述图像生成技术主要依赖于各种生成模型和算法,用于从文......
  • Pycharm或cmd在Terminal中运行tensorboard、pip等python包
    这个主要是添加python包的路径到环境变量里因为装了anaconda,所以我们要找的是对应虚拟环境里的包路径,一般是放在anaconda安装路径下的anaconda3\envs\环境名\Scripts里然后找到环境变量找到Path把文件路径添加这样就可以运行pip、tensorboard等包了......
  • 【MySQL连接器(Python)指南】02-MySQL连接器(Python)版本与实现
    文章目录前言MySQL连接器(Python)版本MySQL连接器(Python)实现总结前言MySQL连接器(Python),用于让Python程序能够访问MySQL数据库。要想让Python应用程序正确高效地使用MySQL数据,就需要深入了解MySQL连接器的特性和使用方法。MySQL连接器(Python)版本下表......
  • 【猫狗识别系统】图像识别Python+TensorFlow+卷积神经网络算法+人工智能深度学习
    猫狗识别系统。通过TensorFlow搭建MobileNetV2轻量级卷积神经算法网络模型,通过对猫狗的图片数据集进行训练,得到一个进度较高的H5格式的模型文件。然后使用Django框架搭建了一个Web网页端可视化操作界面。实现用户上传一张图片识别其名称。一、前言本研究中,我们开发了一个基于深......
  • 双基回文数(python练习)
    编写一个程序来检查一个数字是否是双基回文数。回文是指从前往后读和从后往前读都一样的字母、数字的序列。双基回文数是指在十进制和二进制表示中都是回文的数字。例如:585=1001001001是一个双基回文,其二进制是回文形式,十进制也是回文形式。定义函数check_double_base_......
  • 聪明办法学 Python第5节:循环
    作业链接:https://hydro.ac/d/datawhale_p2s/user/53146for循环和循环范围for循环的特点基于提供的范围,重复执行特定次数的操作defsumFromMToN(m,n):total=0#注意:range(x,y)是左闭右开区间,包含x,不包含yforxinrange(m,n+1):total......
  • 「Python爬虫」最细致的讲解Python爬虫之Python爬虫入门(一)
    一、认识爬虫1.1、什么是爬虫?爬虫:一段自动抓取互联网信息的程序,从互联网上抓取对于我们有价值的信息。1.2、Python爬虫架构调度器:相当于一台电脑的CPU,主要负责调度URL管理器、下载器、解析器之间的协调工作。URL管理器:包括待爬取的URL地址和已爬取的URL地址,防止重复抓取UR......