如何在Python中执行Grubbs检验
简介
格拉布斯检验是一种统计假设检验方法,用于检测数据集中的异常值。异常值是分配数据分布的观察结果,也称为异常。具有异常值的数据集往往比具有正态/高斯分布的数据更容易过度拟合。因此,在机器学习建模之前有必要解决异常值。在处理之前,我们必须检测并定位数据集中的异常值。最流行的异常值检测技术是 QQPlot、四分位距和 Grubbs 统计检验。然而,本文将仅讨论用于检测异常值的格鲁布斯检验。您将学习:什么是 Grubbs 测试以及如何在 Python 中实现它。
什么是异常值?
异常值是与其他数据值在数值上相距较远的数据观测值。这些值超出了正态分布数据的范围。数据集必须包含第一个标准差下的 67% 的记录、第二个标准差下的 95% 的数据以及第三个标准差下的 99.7% 的点,才能实现正态分布。换句话说,数据点应位于第一和第三四分位数范围之间。我们将第一四分位数以下和第三四分位数以上的记录视为异常值或异常值。
格拉布斯统计假设检验
与任何其他统计假设检验一样,格拉布斯检验也可以批准或拒绝原假设 (H0) 或替代假设 (H1)。 Grubbs 测试是检测数据集中异常值的测试。
我们可以通过两种方式执行格拉布斯检验:单面检验和双面检验,用于单变量数据集或几乎正态样本至少有七个变量的分布。该检验也称为极端学生化偏差检验或最大归一化残差检验。
格拉布斯检验使用以下假设 -
Null (H0):数据集没有异常值。
替代 (H1):数据集只有一个异常值。
Python 中的格拉布斯测试
Python 凭借其庞大的库集合可以应对任何编程挑战。这些库提供了内置方法,可直接用于执行任何操作、统计测试等。同样,Python 有一个库,其中包含执行 Grubbs 测试以检测异常值的方法。不过,我们将探索在 Python 中实现 Grubbs 测试的两种方法:库中的内置函数和从头开始实现公式。
异常值库和 Smirnov_grubbs
让我们首先使用以下命令安装 outlier_utils 库。
!pip install outlier_utils
现在让我们制作一个包含异常值的数据集并执行 Grubbs 测试。
双面格拉布检验
语法
grubbs.test(data, alpha=.05)
参数
data - 数据值的数值向量。
alpha - 测试的显着性水平。
说明
在此方法中,用户必须使用异常值包中的 smirnov_grubbs.test() 函数,并将必要的数据作为输入传递,以便运行 Grubb 的测试。
示例
import numpy as np from outliers import smirnov_grubbs as grubbs #define data data = np.array([ 5, 14, 15, 15, 14, 19, 17, 16, 20, 22, 8, 21, 28, 11, 9, 29, 40]) #perform Grubbs' test grubbs.test(data, alpha=.05)
输出
array([ 5, 14, 15, 15, 14, 19, 17, 16, 20, 22, 8, 21, 28, 11, 9, 29])
上面的代码只是从加载库和数据开始,最后使用“test”方法对此数据执行 Grubbs 测试。此测试检测两侧(左侧和右侧)的异常值,或低于第一四分位数和高于第三四分位数的值。该数据只有 1 个异常值(40),已使用 Grubbs 检验删除。
单边格拉布斯检验
Synatx
grubbs.max_test(data, alpha=.05)
说明
在此方法中,用户必须调用 grubbs.min_test() 函数从提供的数据集中获取最小离群值,或者调用 grubbs.max_test()函数从提供的数据集中获取最大离群值,以获得单侧格拉布检验。
示例
import numpy as np from outliers import smirnov_grubbs as grubbs #define data data = np.array([5, 14, 15, 15, 14, 19, 17, 16, 20, 22, 8, 21, 28, 11, 9, 29, 40]) #perform Grubbs' test for minimum value is an outlier print(grubbs.min_test(data, alpha=.05)) #perform Grubbs' test for minimum value is an outlier grubbs.max_test(data, alpha=.05)
输出
[ 5 14 15 15 14 19 17 16 20 22 8 21 28 11 9 29 40] array([ 5, 14, 15, 15, 14, 19, 17, 16, 20, 22, 8, 21, 28, 11, 9, 29])
单侧格拉布斯检验检测第一四分位数以下或第三四分位数以上的异常值。我们可以看到,min_test 方法从数据的最小侧删除异常值,而 max_test 方法从数据的顶部删除异常值。
公式实现
这里我们将用Python实现以下Grubbs测试公式。我们将使用 Numpy 和 Scipy 库来实现。
语法
g_calculated = numerator/sd_x g_critical = ((n - 1) * np.sqrt(np.square(t_value_1))) / (np.sqrt(n) * np.sqrt(n - 2 + np.square(t_value_1)))
算法
实施步骤如下 -
计算数据集值的平均值。
计算数据集值的标准差。
要实现格拉布斯检验公式,请通过从数据集中的每个值的平均值中减去其值来计算分子。
将分子值除以标准差即可得到计算的分数。
计算相同值的临界分数。
如果临界值大于计算值,则数据集中不存在异常值,否则存在异常值。
示例
import numpy as np import scipy.stats as stats ## define data x = np.array([12,13,14,19,21,23]) y = np.array([12,13,14,19,21,23,45]) ## implement Grubbs test def grubbs_test(x): n = len(x) mean_x = np.mean(x) sd_x = np.std(x) numerator = max(abs(x-mean_x)) g_calculated = numerator/sd_x print("Grubbs Calculated Value:",g_calculated) t_value_1 = stats.t.ppf(1 - 0.05 / (2 * n), n - 2) g_critical = ((n - 1) * np.sqrt(np.square(t_value_1))) / (np.sqrt(n) * np.sqrt(n - 2 + np.square(t_value_1))) print("Grubbs Critical Value:",g_critical) if g_critical > g_calculated: print("We can see from the Grubbs test that the calculated value is less than the crucial value. Recognize the null hypothesis and draw the conclusion that there are no outliers\n") else: print("We see from the Grubbs test that the estimated value exceeds the critical value. Reject the null theory and draw the conclusion that there are outliers\n") grubbs_test(x) grubbs_test(y)
输出
Grubbs Calculated Value: 1.4274928542926593 Grubbs Critical Value: 1.887145117792422 We can see from the Grubbs test that the calculated value is less than the crucial value. Recognize the null hypothesis and draw the conclusion that there are no outliers Grubbs Calculated Value: 2.2765147221587774 Grubbs Critical Value: 2.019968507680656 We see from the Grubbs test that the estimated value exceeds the critical value. Reject the null theory and draw the conclusion that there are outliers
Grubb 测试的结果表明数组 x 没有任何异常值,但 y 有 1 个异常值。
结论
我们在本文中了解了 Python 中的离群值和 Grubbs 测试。让我们用一些要点来总结这篇文章。
异常值是指超出四分位数范围的记录。
异常值不符合数据集的正态分布。
我们可以使用格拉布斯假设统计检验来检测异常值。
我们可以使用 outlier_utils 库中提供的内置方法执行 Grubbs 测试。
双面格拉布斯检验可检测并删除左侧和右侧的异常值。
然而,单侧格拉布斯检验将检测任一侧的异常值。
以上是如何在Python中执行Grubbs检验的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undress AI Tool
免费脱衣服图片

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

本文为您精选了多个顶级的Python“成品”项目网站与高水平“大片”级学习资源入口。无论您是想寻找开发灵感、观摩学习大师级的源代码,还是系统性地提升实战能力,这些平台都是不容错过的宝库,能帮助您快速成长为Python高手。

使用subprocess.run()可安全执行shell命令并捕获输出,推荐以列表传参避免注入风险;2.需要shell特性时可设shell=True,但需警惕命令注入;3.使用subprocess.Popen可实现实时输出处理;4.设置check=True可在命令失败时抛出异常;5.简单场景可直接链式调用获取输出;日常应优先使用subprocess.run(),避免使用os.system()或已弃用模块,以上方法覆盖了Python中执行shell命令的核心用法。

要入门量子机器学习(QML),首选工具是Python,需安装PennyLane、Qiskit、TensorFlowQuantum或PyTorchQuantum等库;接着通过运行示例熟悉流程,如使用PennyLane构建量子神经网络;然后按照数据集准备、数据编码、构建参数化量子线路、经典优化器训练等步骤实现模型;实战中应避免一开始就追求复杂模型,关注硬件限制,采用混合模型结构,并持续参考最新文献和官方文档以跟进发展。

使用Python调用WebAPI获取数据的关键在于掌握基本流程和常用工具。1.使用requests发起HTTP请求是最直接的方式,通过get方法获取响应并用json()解析数据;2.对于需要认证的API,可通过headers添加token或key;3.需检查响应状态码,推荐使用response.raise_for_status()自动处理异常;4.面对分页接口,可通过循环依次请求不同页面并加入延时避免频率限制;5.处理返回的JSON数据时需根据结构提取信息,复杂数据可用pandas转换为Data

使用Seaborn的jointplot可快速可视化两个变量间的关系及各自分布;2.基础散点图通过sns.jointplot(data=tips,x="total_bill",y="tip",kind="scatter")实现,中心为散点图,上下和右侧显示直方图;3.添加回归线和密度信息可用kind="reg",并结合marginal_kws设置边缘图样式;4.数据量大时推荐kind="hex",用

在Python中,使用join()方法合并字符串需注意以下要点:1.使用str.join()方法,调用时前面的字符串作为连接符,括号里的可迭代对象包含要连接的字符串;2.确保列表中的元素都是字符串,若含非字符串类型需先转换;3.处理嵌套列表时需先展平结构再连接。

字符串列表可用join()方法合并,如''.join(words)得到"HelloworldfromPython";2.数字列表需先用map(str,numbers)或[str(x)forxinnumbers]转为字符串后才能join;3.任意类型列表可直接用str()转换为带括号和引号的字符串,适用于调试;4.自定义格式可用生成器表达式结合join()实现,如'|'.join(f"[{item}]"foriteminitems)输出"[a]|[

掌握Python网络爬虫需抓住三个核心步骤:1.使用requests发起请求,通过get方法获取网页内容,注意设置headers、处理异常及遵守robots.txt;2.利用BeautifulSoup或XPath提取数据,前者适合简单解析,后者更灵活适用于复杂结构;3.针对动态加载内容使用Selenium模拟浏览器操作,虽速度较慢但能应对复杂页面,也可尝试寻找网站API接口提高效率。
