机器学习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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/31914.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于SpringBoot+Vue在线考试报名系统设计和实现(源码+LW+调试文档+讲解等)

💗博主介绍:✌全网粉丝10W,CSDN作者、博客专家、全栈领域优质创作者,博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌💗 🌟文末获取源码数据库🌟 感兴趣的可以先收藏起来,…

【APP移动端性能测试】第四节.APP移动端常见的性能测试点(下)

文章目录 前言五、流量性能测试 5.1 流量基本情况说明 5.2 流量的测试步骤 5.3 流量的优化方法六、电量性能测试 6.1 电量基本情况说明 6.2 电量的测试步骤 6.2 电量的结果分析七、APP启动测试 7.1 APP启动的两种方式 7.2 APP启动的测…

简单了解JDBC相关操作

JDBC 1、概念 JDBC就是使用java语言操作关系型数据库的一套API,全称java数据库连接。 2、具体步骤 创建工程,导入驱动jar包注册驱动获取连接定义SQL语句获取执行SQL语句的对象执行SQL处理返回结果释放资源 Testpublic void jdbcTest() throws Class…

Python中列表的常用操作

列表的基本使用 arr []# append arr.append(1) print(arr)arr.append("a") print(arr)列表的增删改查 arr []arr.append(1) arr.append(2) arr.append(3)print(arr)# pop arr.pop() print(arr)# update arr[0] 333 print(arr)# get print(arr[0])列表的复制 ar…

Qt Quick介绍

一.Qt Quick介绍 Qt Quick 是 QML 类型和功能的标准库,包括视觉类型、交互式类型、动画、模型和视图、粒子效果和着色效果 Qt Quick 使用 QML 作为声明语言,来设计以用户界面为中心的应用程序 QML 包含大量使用手机移动设备的功能模块,比如基…

python-邮票组合问题

[题目描述] 某人有四张3分的邮票和三张5分的邮票,用这些邮票中的一张或若干张可以得到多少种不同的邮资?输入格式: 此题无输入。输出格式: 输出可以得到不同邮资的数量。 样例输入 无样例输出 19数据范围: 对于100%的…

使用invokeMethod异步执行QT函数操作

在QT窗口初始化加载的时候如果执行比较耗时的操作,很容易阻塞主界面的显示,导致用户体验差。这时候一般我们可以通过定时器延时加载对应的操作。其实使用QMetaObject::invokeMethod方法也可以实现异步加载,操作更简单效果更好。两种方式如下: //异步执行loadData函数 //Qt:…

【抽代复习笔记】21-群(十五):循环群引理及定义

例4:证明,如果σ(i1 i2 … ik)是Sn中的一个k-循环,而r∈Sn,则rσr^(-1)也是一个k-循环,且rσr^(-1)(r(i1),r(i2),…,r(ik))。 证:①设σ(i1 i2 … ik)(i1 ik)(i1 ik-1)…(i1 i2), 则rσr^(-1)…

触想工业一体机在智慧医疗智能采血管理系统中的应用

一、行业发展前景 作为医院重点科室之一,传统的检验科采血环节存在诸多痛点,特别在备管阶段,大量患者信息的核对、试管条码打印、选管、贴标等繁琐步骤均依赖人工操作,工作强度大、效率低,易出错。 随着智慧医院建设的…

笔记-python里面的xlrd模块详解

那我就一下面积个问题对xlrd模块进行学习一下: 1.什么是xlrd模块? 2.为什么使用xlrd模块? 3.怎样使用xlrd模块? 1.什么是xlrd模块? ♦python操作excel主要用到xlrd和xlwt这两个库,即xlrd是读excel&…

秋招突击——6/21——新作{两两交换链表中的节点,K个一组反转链表}

文章目录 引言新做删除有序数组中的重复项个人实现 K 个一组翻转链表个人实现参考代码 总结 引言 上午完全去听讲座了,听了三场,拿了三个讲座单,从九点一直到十二点。笔记本电脑插电才能用,就没带,所以没有进行复习。…

qt开发-08_layout 布局

Qt 提供了非常丰富的布局类,基本布局管理类包括:QBoxLayout、QGridLayout、QFormL ayout 和 QStackedLayout。这些类都从 QLayout 继承而来,它们都来源于 QObject(而不是 QWi dget)。创建更加复杂的布局,可…

设置PowerShell打开默认路径是桌面,方便在桌面运行py程序

1.打开 PowerShell 以管理员身份运行。右键点击 PowerShell 图标,然后选择“以管理员身份运行”。 查看当前执行策略: Get-ExecutionPolicy2.更改执行策略: 为了允许脚本运行,你可以将执行策略设置为 RemoteSigned 或 Unrestricted。下面的命令将执行策略更改为 RemoteS…

广东省建筑施工安管人员考核报名流程及照片处理方法

广东省建筑施工企业安管人员考核工作现已全面启动,这对于提升建筑行业的安全生产管理水平至关重要。为了确保广大考生能够顺利报名并参与考核,本文精心梳理了考核报名流程,并提供了证件照的规范处理方法。同时,针对证件照这一关键…

windows端口被占用问题,杀死进程

描述:端口被占用 在使用IntelliJ IDEA运行程序时,可能会遇到端口占用的情况,这通常由以下几个原因引起: 1、同一程序多次启动:如果你没有正确关闭之前运行的程序实例,再次尝试运行相同的程序时,…

mysql 库存表 累计 sql语句 第一方法

这是一个表,要求累计金额 。表名t ,字段lsh,shangpinbh,jine。 流水号商品编号金额累计金额1100125002500210013000550031004400095004100610001050051007200012500 select lsh,shangpinbh,jine,(select sum(jine) from t where …

使用 ProGuard 混淆你的 Java 代码

使用 ProGuard 混淆你的 Java 代码 一、简介二、配置pom三、使用混淆后的 JAR 文件四、总结 一、简介 ProGuard 是一款流行的 Java 代码混淆工具,可以混淆和优化你的代码,使其更难被反编译和分析。混淆通过重命名类、方法和变量名称来实现,从…

短剧app系统开发源码对接聚合广告

短剧APP是一种专门用于观看、创作和分享短剧的移动应用程序。它通常集成了视频播放、社交互动、内容创作等功能,为用户提供了一个便捷的短剧观赏和交流的平台。 短剧APP的特点如下: 时长短:短剧APP提供的短剧内容通常精简扼要,每…

QMetaEnum 使用详解

QMetaEnum 是 Qt 框架中的一个类,它提供了关于枚举类型的元数据信息。以下是 QMetaEnum 使用的详解: 1. 自定义枚举类型 在使用 QMetaEnum 之前,你需要先定义一个枚举类型,并且确保它是 QObject 的子类的一部分。你可以使用 Q_E…

兴顺物流管理系统的设计

管理员账户功能包括:系统首页,个人中心,管理员管理,驾驶员管理,物流资讯管理,车辆管理,基础数据管理 员工账户功能包括:系统首页,个人中心,物流资讯管理&…