【方差分析原理简介】

文章目录

  • 方差分析(Analysis of Variance,简称ANOVA)
    • 1 方差分析流程
    • 2 借助sklean进行基于方差分析的特征筛选
    • 3 总结

方差分析(Analysis of Variance,简称ANOVA)

卡方检验更多的会考虑在衡量两个离散变量是否独立时使用,如果是连续变量和离散变量之间的独立性,更常见的做法是进行方差分析。

1 方差分析流程

Step 1.提出假设
Step 2.采集数据
这里我们还是以鸢尾花数据集为例

from sklearn.datasets import load_iris
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import chi2
import numpy as np# 加载示例数据集
iris = load_iris()
X, y = iris.data, iris.target
X = pd.DataFrame(X,columns=iris.feature_names)

在这里插入图片描述
我们就petal length (cm)字段和标签进行分析
在这里插入图片描述

#根据标签快速分组
cat_0 = X["petal length (cm)"][y==0]
cat_1 = X["petal length (cm)"][y==1]
cat_2 = X["petal length (cm)"][y==2]

Step 3.设计统计量
  最关键的环节,肯定就是如何构造统计量来判断两类样本均值差异程度了。这里我们需要借助此前我们曾介绍的一组概念,这组概念曾在线性回归以及K-Means快速聚类中提及,是一组专门用来衡量整体误差、组内误差和组间误差的概念。这里我们再通过严谨的数学公式描述一遍。假设目前有n条数据被分成k组(即标签有k个类别),其中第j个类别中包含 n j n_j nj条样本,并且 x i , j x_{i,j} xi,j表示第j个类别的第i条样本,则有样本整体偏差计算公式如下:
S S T = ∑ j = 1 k ∑ i = 1 n j ( x i j − x ˉ ) 2 SST = \sum^k_{j=1}\sum^{n_j}_{i=1}(x_{ij}-\bar x)^2 SST=j=1ki=1nj(xijxˉ)2
及样本与均值的差值平方和,此处 x ˉ = ∑ j = 1 k ∑ i = 1 n j x i j n \bar x = \frac{\sum^k_{j=1}\sum^{n_j}_{i=1}x_{ij}}{n} xˉ=nj=1ki=1njxij
而如果我们更进一步,计算每个组内的样本与均值的差值的平方和,则可以算得如下结果:
S S E j = ∑ i = 1 n j ( x i j − x j ˉ ) 2 SSE_j = \sum^{n_j}_{i=1}(x_{ij}-\bar {x_j})^2 SSEj=i=1nj(xijxjˉ)2
即第j组的组内偏差平方和,其中 x j ˉ = ∑ i = 1 n j x i j n j \bar {x_j} = \frac{\sum_{i=1}^{n_j}x_{ij}}{n_j} xjˉ=nji=1njxij,为第j组数据的组内均值。而k个分组的组内偏差总和为:
S S E = ∑ j = 1 k S S E j = ∑ j = 1 k ∑ i = 1 n j ( x i j − x j ˉ ) 2 SSE = \sum_{j=1}^k SSE_j = \sum_{j=1}^k\sum^{n_j}_{i=1}(x_{ij}-\bar {x_j})^2 SSE=j=1kSSEj=j=1ki=1nj(xijxjˉ)2
SSE即为组内偏差平方和。此时(在欧式空间情况下)则可以通过数学公式推导得出,SST和SSE之间的差值如下:
S S B = S S T − S S E = ∑ j = 1 k n j ( x j ˉ − x ˉ ) 2 SSB=SST-SSE=\sum_{j=1}^k n_j (\bar{x_j}-\bar x)^2 SSB=SSTSSE=j=1knj(xjˉxˉ)2
即每个组的均值和总体均值的差值的平方加权求和的结果,其中权重就是每个组的样本数量。SSB也被称为组间偏差平方和。
我们就找到了如何衡量不同组均值差异的基础理论工具,接下来需要进一步的构造统计检验量,来更具体的量化的表示这种均值差异程度。此处构造的统计检验量就是F,F计算公式如下:
F = M S B M S E = S S B / d f B S S E / d f E = S S B / ( k − 1 ) S S E / ( n − k ) F=\frac{MSB}{MSE}=\frac{SSB/df_B}{SSE/df_E}=\frac{SSB/(k-1)}{SSE/(n-k)} F=MSEMSB=SSE/dfESSB/dfB=SSE/(nk)SSB/(k1)
此处 d f b df_b dfb就是统计量SSB的自由度,类似于卡方检验过程中(行数-1*列数-1)用于修正卡方值, d f b df_b dfb也是一个用于修正SSB计算量的值——为了防止分组的数量影响了SSB的计算结果;类似的 d f E df_E dfE就是SSE的自由度,用于修正样本数量对SSE计算结果的影响。目前来说我们并不用深究自由度的学术含义,只需要知道统计检验量会利用自由度对统计量进行数值上的修正,并且这些修正的值会在最一开始就确定,例如k(分成几类)、n(数据总量)等,并不会受到实际数据取值大小的影响。
Step 4-5.事件发生概率计算与统计推断

k = len(np.unique(y))
n = len(y)
k, n

在这里插入图片描述

cat_0_mean = cat_0.mean()
cat_1_mean = cat_1.mean()
cat_2_mean = cat_2.mean()SSE0 = np.power(cat_0 - cat_0_mean, 2).sum()
SSE1 = np.power(cat_1 - cat_1_mean, 2).sum()
SSE2 = np.power(cat_2 - cat_2_mean, 2).sum()SSE = SSE0 + SSE1+ SSE2
SSE

在这里插入图片描述

n0 = len(cat_0)
n1 = len(cat_1)
n2 = len(cat_2)cat_mean = X["petal length (cm)"].mean()SSB = n0 * np.power(cat_0_mean-cat_mean, 2) + n1 * np.power(cat_1_mean-cat_mean, 2) + n2 * np.power(cat_2_mean-cat_mean, 2)SSB

在这里插入图片描述

SST = np.power( X["petal length (cm)"] - cat_mean, 2).sum()
SST

在这里插入图片描述

#可以很简单检验SSE和SSB之和是否会等于SST
SSB + SSE

在这里插入图片描述

MSB = SSB/(k-1)
MSE = SSE/(n-k)F_score = MSB/MSE
F_score

在这里插入图片描述

import scipy
scipy.special.fdtrc(k-1, n-k, F_score)#scipy.special.fdtrc进行p值计算

在这里插入图片描述
概率几乎为零,也就是说零假设成立的概率几乎为零,我们可以推翻零假设,即petal length (cm)和标签存在显著差异。进一步应用到特征筛选环节,得到的结论就是petal length (cm)和标签存在显著的关联关系。
我们也可以借助scipy中的stats.f_oneway函数直接进行方差分析计算,此处仅需带入两类不同的样本即可:

scipy.stats.f_oneway(cat_0, cat_1,cat_2)

在这里插入图片描述
能够发现计算结果和手动计算结果一致。

尽管我们在方差分析中用到了F检验,但方差分析不同于F检验。F检验泛指一切借助F值进行检验的过程,而方差分析只是其中一种。换而言之,只要假设检验中的检验统计量满足F分布,则该过程就用到了F检验。另外需要拓展了解的一点是,除了方差分析以外,还有一种检验也能判断两个样本的均值是否一致,也就是t检验。所不同的是,方差分析能够同时检验多个样本,也就是如果是三分类标签、则对应三个不同的样本,卡方检验能够同时判断三个样本是否取自同一总体,进而判断该特征是否可用(从特征筛选的角度来看)。而t检验只能两两比较,很明显应如果是用于特征筛选环节,t检验并不够高效。而t检验、卡方检验和方差分析,被称作统计学三大检验。

2 借助sklean进行基于方差分析的特征筛选

我们来看在sklearn如何借助方差分析来完成特征筛选。这里需要借助f_classif评估函数来实现方差分析的过程:

from sklearn.feature_selection import f_classif
f_classif(X["petal length (cm)"].values.reshape(-1, 1),y.ravel())

在这里插入图片描述
sklearn中的f_classif也就是调用f_oneway函数进行的计算,因此最终输出结果和此前实验结果完全一致。同时f_classif本身也是评分函数,输出的F值就是评分。很明显F值越大、p值越小、我们就越有理由相信两列存在关联关系,反之F值越小则说明两列没有关系,可以考虑剔除。

接下来我们借助SelectKBest来进行基于方差分析评分的特征筛选,注意仅针对两个连续变量进行方差分析检验特征筛选(其中定义的SelectName函数在卡方检验中有)
在这里插入图片描述

3 总结

如果是针对分类问题,f_classif与chi2两个评分函数搭配使用,就能够完成一次完整的特征筛选,其中chi2用于筛选离散特征、f_classif用于筛选连续特征。而如果是回归问题,sklearn提供了一种基于F检验的线性相关性检验方法f_regression,该检验方法并不常见。需要注意,该方法只能用于回归问题中,并且只能筛选出与标签呈现线性相关关系的连续变量。

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

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

相关文章

大数据系列之:腾讯云服务器性能和价格比较

大数据系列之:腾讯云服务器性能和价格比较 一、磁盘性能和价格比较二、高性能云硬盘三、ssd云硬盘四、极速型ssd云硬盘五、增强型ssd云硬盘六、查看腾讯云服务器价格 一、磁盘性能和价格比较 磁盘名称高性能ssd云硬盘极速型ssd云硬盘增强型ssd云硬盘规格500g 5800 …

Linux 常用进阶指令

我是南城余!阿里云开发者平台专家博士证书获得者! 欢迎关注我的博客!一同成长! 一名从事运维开发的worker,记录分享学习。 专注于AI,运维开发,windows Linux 系统领域的分享! 其他…

有哪些好用的防蓝光护眼台灯?防蓝光护眼灯品牌排行揭晓

对于大多数人来说,护眼灯已经不是什么新鲜概念。为什么要买护眼灯?相信很多人的回答都是“为了孩子”。为了保护儿童视力健康,越来越多家长选择为孩子购买一台护眼灯,也造就了这个相当具有中国特色的庞大市场。很多家长不放心台灯…

世微 AP5191 降压恒流LED车灯 12-80V 9V5A电源驱动方案

AP5191是一款PWM工作模式,高效率、外围简 单、内置功率MOS管,适用于4.5-150V输入的高 精度降压LED恒流驱动芯片。输出功率150W, 电流6A。 AP5191可实现线性调光和PWM调光,线性调 光脚有效电压范围0.55-2.6V. AP5191 工作频率可以通过RT 外部…

ManageEngine推出Log360双层威胁检测系统,强化SOC精准检测!

ManageEngine推出业界首个双层威胁检测系统,加强其安全信息与事件管理(SIEM)解决方案Log360,以实现精准和准确的威胁检测。Log360的威胁检测、调查和响应(TDIR)组件Vigil IQ中的新功能为组织的安全运营中心…

基于 Spring Boot 支付宝沙箱支付(Java 版本)

基于 Spring Boot 支付宝沙箱支付(Java 版本) 步骤第一步:使用支付宝账户登录,打开控制台,进入沙箱环境第二步:配置内网穿透账号第三步:引入支付宝 SDK第四步: 配置 SpringBoot第五步…

P1563 [NOIP2016 提高组] 玩具谜题————C++

目录 [NOIP2016 提高组] 玩具谜题题目背景题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 样例 #2样例输入 #2样例输出 #2 提示 解题思路Code运行结果 [NOIP2016 提高组] 玩具谜题 题目背景 NOIP2016 提高组 D1T1 题目描述 小南有一套可爱的玩具小人,它…

自动化测试框架pytest系列之强大的fixture功能,为什么fixture强大?一文拆解它的功能参数。(三)

自动化测试框架pytest系列之基础概念介绍(一)-CSDN博客 自动化测试框架pytest系列之21个命令行参数介绍(二)-CSDN博客 接上两篇文章继续 : 3.3 pytest支持的初始化和清除函数 学过unittest的都知道 ,unittest有四个函数 ,分别是 &#xff…

git修改历史提交(commit)信息

一、修改最近一次commit信息 1、首先通过git log查看commit信息 2、使用命令git commit --amend进入命令命令模式,按i进入编辑模式,修改好commit信息后按Esc键退出编辑模式,然后输入:wq保存编辑信息(注意使用英文输入法&#xf…

如何保护linux服务器远程使用的安全

服务器安全是一个非常敏感的问题,因服务器远程入侵导致数据丢失的安全问题频频出现,一旦服务器入侵就会对个人和企业造成巨大的损失。因此,在日常使用服务器的时候,我们需要采取一些安全措施来保障服务器的安全性。 目前服务器系…

云化XR技术于农业领域中的表现

随着科技的不断发展和应用的深入,农业领域也在逐渐引入新技术来优化生产效率和成本、改进管理和监控等。云化XR(CloudXR)作为一种融合了云计算、虚拟现实(VR)和增强现实(AR)等技术的解决方案&am…

Overleaf Docker编译复现计划

Overleaf Docker编译复现计划 Overleaf Pro可以支持不同年份的Latex镜像自由选择编译,这实在是一个让人看了心痒痒的功能。但是很抱歉,这属于Pro付费功能。但是我研究了一下,发现其实和Docker编译相关的代码,社区版的很多代码都没…