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

news2024/10/6 6:00:15

最近在用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.coloradmin.cn/o/1836816.html

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

相关文章

垃圾佬的狂欢!3元/月开Minecraft国际服务器全流程教程

大家好!我是ErikTse,一名生活在捡垃圾区的UP主,相信不少点进本文的朋友们跟我一样,在小时候都有一个当腐竹(MC服主)的梦,可惜那时还小,不懂网络更不懂技术,只有一颗爱玩的…

c++里 lamda 表达式,其实被编译器处理为匿名类,并实例化为匿名对象

该匿名对象定义了括号 () 运算符函数,所以可以像函数一样被调用。 lamda 表达式必须在函数作用域中定义。通过按值捕获或按引用捕获,可以使用所在函数中定义的变量。在类的成员函数中定义的 lamda 表达式,若捕获了 this ,则可以修…

配置OSPF认证(华为)

#交换设备 配置OSPF认证-基于华为路由器 OSPF(开放最短路径优先)是一种内部网关协议(IGP),用于在单一自治系统(AS)内决策路由。OSPF认证功能是路由器中的一项安全措施,它的主要用途…

B-splines曲线的绘制(Matlab)

虽然在这个链接三次 Bspline(B样条曲线) NURBS曲线的绘制 matlab_三次b样条曲线的绘制-CSDN博客中我们介绍了NURBS曲线,然而有时候我们通过B-spline曲线也能够解决问题。B-spline曲线作为NURBS曲线的一种特例,这里给出均匀B-spline曲线的表达式&#xff…

基于PHP的草莓种植信息管理系统

有需要请加文章底部Q哦 可远程调试 基于PHP的草莓种植管理系统 一 介绍 此草莓种植管理系统基于原生PHP开发,数据库mysql,前端采用jquery.js和kindeditor在线HTML编辑器。系统角色分为用户和管理员。 技术栈:phpmysqljquery.jsphpstudyvsco…

【Windows系统】文件操作出现“文件访问被拒绝”弹窗问题

环境 系统:win10x64 版本:1709 问题 重命名系统文件夹文件,有时会出现【文件访问被拒绝】的弹窗,导致操作失败。 如何才能避免弹窗,成功操作? 解决方法 前提:实施以下解决,首先…

Vue自定义长按指令

新建文件longpress.ts文件 // longpress.ts import { DirectiveBinding } from vue const longpress {beforeMount(el: any, binding: DirectiveBinding) {const cb binding.valueconst duration binding.arg || 800 // 长按等待时间let timer: number | null nulllet is…

这些数据可被Modbus采集,你还不知道???

为什么要用Modbus采集模块 Modbus采集模块之所以被广泛使用,是因为它提供了标准化的通信协议,确保了不同设备间的兼容性。它支持多种通信方式,易于实现,并且能够适应不同的网络环境。Modbus模块能够收集和传输各种工业数据&#x…

从荒漠到绿洲:可视化技术助力可持续农业

运用图扑可视化技术优化荒漠农业管理,通过实时监控与数据分析提高土地资源利用和生产效率,实现生态可持续发展。

解决Java项目运行时错误:“Command line is too long”

在开发Java应用的过程中,你可能偶尔会遇到“Error running ‘Application’: Command line is too long”的问题。这是因为Java虚拟机(JVM)在启动时,如果传递给它的类路径(classpath)过长,超过了…

Docker overlay磁盘使用100%处理方法overlay 100%

一、问题描述 服务器上运行了几个docker容器,运行个一周就会出现overlay 100%的情况,经查找,是容器里生成了很多core.xxx的文件导致的。 二、解决方法 首先通过以下命令查看: df -h 可以看的overlay已经100%了,进入到/var/lib/d…

springmvc拦截器 和 异常拦截器

springmvc拦截器的配置使用: 自定义监听器实现HandlerInterceptor接口: 在springmvc的配置文件中引入自定义拦截器对象及拦截目标 拦截器的方法调用 自定义一个拦截器: Component public class LoginInterceptor implements HandlerIntercept…

系统架构设计师 - 操作系统(2)

操作系统 操作系统(5-6分)文件管理绝对路径与相对路径 ★索引文件 ★★★位示图 ★ 存储管理段页式存储 ★★★页式存储段式存储段页式存储(了解) 页面置换算法 ★ 微内核操作系统嵌入式操作系统 ★★★ 大家好呀!我是…

基于Spring Boot的工具迭代

1. 申请git权限 2. git项目中点击我的-Settings-SSH Keys添加公钥 3. 公钥生成步骤 ssh-keygen -o -t rsa -b 4096 -C "your email" cd ~/.ssh/ cat id_rsa.pub 把公钥内容粘贴到SSH Keys 4. 创建本地分支git checkout -b branchname git远程仓库创建远程分支 …

vue部署宝塔nginx配置(获取用户ip地址、反代理访问api接口、websocket转发)

以下配置为我自己的需求,因人而异,如果只是单纯的前端非交互页面,可以不用修改配置。 代码及注释,如下: #解决vue-router设置mode为history,去掉路由地址上的/#/后nginx显示404的问题location / {proxy_htt…

单片机中的各个引脚有正负极之分吗?如果有RST是正极还是负极呢

在开始前刚好我有一些资料,是我根据网友给的问题精心整理了一份「单片机的资料从专业入门到高级教程」, 点个关注在评论区回复“888”之后私信回复“888”,全部无偿共享给大家!!! 一般情况说的正负极&…

【ajax基础02】URL详解

一:什么是URL 统一资源定位符(Uniform Resource Locator,缩写:URL),简称网址 二:URL组成 https://baidu.com/index.html 协议 https协议:超文本传输协议,规定了浏览器和服务第之间传输数据的格式 域名(在…

人工智能技术应用笔记(十二):搭建自带大模型微信,完美对接GPT-4o,Kimi等大模型,智能体平台Coze也能接

许多朋友对如何搭建自己的微信机器人非常感兴趣。今天就来教大家如何操作。 一、 准备工作 一台电脑或者云服务器,对配置要求不高,一般的电脑就行 大模型API调用的Key,比如GPT-4o,Kimi,Deepseek(不知道怎…

AV1:帧间预测(一)参考帧管理

​AV1中帧类型 在H.26X系列标准中,根据帧允许的预测模式可以将帧分为I帧、P帧和B帧,根据帧在码流中前后的参考关系又可以分为IRAP、RADL等。AV1也类似地将帧分为4种类型,在码流中用frame_type来标识帧类型。 KEY_FRAME:相当于IDR帧…

软件设计不是CRUD(22):在流式数据处理系统中进行业务抽象落地——设计思考

(接上文《软件设计不是CRUD(21):在流式数据处理系统中进行业务抽象落地——需求分析》) 那么思考到这里我们就能做一些关于设计思路的总结: 每一个独立的数据处理流,就是数据采集系统中的一个功能。这个功能具备一个静态的控制逻辑(当然控制逻辑也可以是动态的,本文不…