使用可视化工具和统计方法检测异常值
欢迎各位小伙伴来到golang学习网,相聚于此都是缘哈哈哈!今天我给大家带来《使用可视化工具和统计方法检测异常值》,这篇文章主要讲到等等知识,如果你对科技周边相关的知识非常感兴趣或者正在自学,都可以关注我,我会持续更新相关文章!当然,有什么建议也欢迎在评论留言提出!一起学习!
异常值(离群值)是指距离其他数据值太远的数据值。数据异常值可能是自然产生的,也可能是由于测量不准确、或系统故障造成的。与缺失值类似,异常值会破坏数据科学项目并返回错误的结果或预测。异常值也可能出现在倾斜数据中,这些类型的异常值被认为是自然异常值。
异常值会影响数据的平均值、标准差和四分位范围。如果我们在去除异常值之前和之后计算这些统计数据,我们会得到不同的结果。
Carla Martins
异常值如何影响机器学习模型?
如果我们的异常值是自然的而不是由于测量误差,则应该将它保留在数据集中,并执行数据转换来对其进行规范化处理。如果我们的数据集很大,但异常值很少,我们应该保留这些异常值,因为它们不会显著影响结果,并且可以为我们的模型带来泛化的效果。
如果我们非常确定我异常值是由于测量误差带来的,则应该从数据集中删除它们。去除异常值的将减少数据集的大小,并可以让我们的模型的适用到所包含的度量范围。但是要记住去掉自然异常值可能导致模型不准确。
使用可视化工具检测异常值
异常值是不容易被“肉眼”发现的,但是有一些可视化工具可以帮助完成这项任务。最常见的是箱形图和直方图。
和往常一样,我们第一步是加载必要的库和导入/加载数据集。这里将使用insurance.csv。
import numpy as np
import pandas as pd
import seaborn as sns
import statistics
df = pd.read_csv('insurance.csv')
df
我们将检查age,bmi和expenses的异常值。
第一种方法是用box - plot表示数据分布:
sns.boxplot(y="age", data=df)
sns.boxplot(y="bmi", data=df)
sns.boxplot(y="expenses", data=df)
从箱线图我们可以看到age没有异常值bmi在上界有一些异常值,而expenses在上界有很多异常值,这表明了这是一个偏态分布。为了检查这个偏态分布的倾斜程度,我们将使用直方图。
sns.histplot(df, x="age", kde=True)
sns.histplot(df, x="bmi", kde=True)
sns.histplot(df, x="expenses", kde=True)
从直方图中可以看出,年龄变量均匀分布,bmi接近正态分布,expenses偏态分布。通过分析这两种图形表示,我们可以决定要排除那些数据。对于年龄不排除任何值。对于bmi我们将排除高于47的值,对于费用,我们将排除高于50000的值。
df.drop(df[df['bmi'] >= 47].index, inplace = True)
df.drop(df[df['expenses'] >= 50000].index, inplace = True)
现在如果再次检查箱线图和直方图:
用统计方法检测异常值
有两种主要的统计方法可以检测异常值:使用z分数和使用四分位范围。
1、使用Z-score检测异常值
Z-score是一种数学变换,根据其与均值的距离对每个观察结果进行分类。与平均值之间的距离用标准差(SD)来衡量。如果得到的数值为1.59,我们就知道观察值比平均值高出1.59个标准差。同理如果得到-2.4的Z-score,我们就会知道观察值比平均值低-2.4个标准差。高于3SD或低于-3SD的观测值一般会被认为是异常值。
下面我们用代码实现,首先查看age:
df = pd.read_csv('insurance.csv')
mean_age = statistics.mean(df['age'])
stdev_age = statistics.stdev(df['age'])
age_z_score = (df['age']-mean_age)/stdev_age
df['age_z_score'] = age_z_score.tolist()
现在查看是否有低于-3SD的值:
df.sort_values(by=['age_z_score'], ascending=True)
可以看到没有低于-3SD的值。现在检查3SD以上的值:
我们可以看到没有高于3SD的值。也就是说age没有异常值。现在对变量bmi做同样的操作:
mean_bmi = statistics.mean(df['bmi'])
stdev_bmi = statistics.stdev(df['bmi'])
bmi_z_score = (df['bmi']-mean_bmi)/stdev_bmi
df['bmi_z_score'] = bmi_z_score.tolist()
df.sort_values(by=['bmi_z_score'], ascending=True)
df.sort_values(by=['bmi_z_score'], ascending=False)
查看3SD以上的值:
将这些值删除:
df.drop(df[df[‘bmi_z_score’] >= 3].index, inplace = True)
下一步用同样的方法计算expenses:
mean_expenses = statistics.mean(df['expenses'])
stdev_expenses = statistics.stdev(df['expenses'])
expenses_z_score = (df['expenses']-mean_expenses)/stdev_expenses
df['expenses_z_score'] = expenses_z_score.tolist()
df.sort_values(by=['expenses_z_score'], ascending=True)
df.sort_values(by=['expenses_z_score'], ascending=False)
df.drop(df[df[‘expenses_z_score’] >= 3].index, inplace = True)
删除了数据以后,我们再次可视化数据:
可以看到,一些值已经被移除了
2、使用四分位距检测异常值
四分位距将数据分布到四个部分,并且从低到高排序,如下图所示,每个部分包含相同数量的样本。第一个四分位(Q1)是边界上的数据点的值。Q2和Q3也是如此。四分位距(IQR)是两个中间部分的数据点(代表50%的数据)。四分位距包含所有高于Q1低于Q3的数据点。如果该点高于Q3 + (1.5 x IQR),则表示包含较高数值离群值,如果Q1−(1.5 x IQR)则存在较低数值的离群值。
代码如下:
df = pd.read_csv('insurance.csv')
q75_age, q25_age = np.percentile(df['age'], [75 ,25])
iqr_age = q75_age - q25_age
iqr_age
age_h_bound = q75_age+(1.5*iqr_age)
age_l_bound = q25_age-(1.5*iqr_age)
print(age_h_bound)
print(age_l_bound)
这样就知道了异常值位于87以上或-9以下:
df.sort_values(by=['age'], ascending=True)
可以看到没有下异常值,现在我们将检查上异常值:
df.sort_values(by=['age'], ascending=False)
也没有上异常值。
下面对bmi执行同样的操作:
q75_bmi, q25_bmi = np.percentile(df['bmi'], [75 ,25])
iqr_bmi = q75_bmi - q25_bmi
iqr_bmi
bmi_h_bound = q75_bmi+(1.5*iqr_bmi)
bmi_l_bound = q25_bmi-(1.5*iqr_bmi)
print(bmi_h_bound)
print(bmi_l_bound)
df.sort_values(by=['bmi'], ascending=True)
df.sort_values(by=['bmi'], ascending=False)
df.drop(df[df['bmi'] >= 47.3].index, inplace = True)
df.drop(df[df['bmi'] 13.7].index, inplace = True)
expenses也是用相同的方法进行处理,我们对结果进行可视化:
可以看到异常值也被删除了。
今天带大家了解了的相关知识,希望对你有所帮助;关于科技周边的技术知识我们会一点点深入介绍,欢迎大家关注golang学习网公众号,一起学习编程~

- 上一篇
- Meta和Twitter人工智能和机器学习部门的裁员意味着什么

- 下一篇
- ChatGPT开始联网,最后的封印解除了
-
- 结实的冬瓜
- 很好,一直没懂这个问题,但其实工作中常常有遇到...不过今天到这,看完之后很有帮助,总算是懂了,感谢博主分享文章!
- 2023-07-02 07:50:26
-
- 拼搏的煎饼
- 这篇技术贴真是及时雨啊,细节满满,很棒,码起来,关注博主了!希望博主能多写科技周边相关的文章。
- 2023-06-10 11:13:56
-
- 霸气的白羊
- 这篇技术贴太及时了,细节满满,赞 👍👍,mark,关注大佬了!希望大佬能多写科技周边相关的文章。
- 2023-05-28 06:34:44
-
- 积极的老师
- 太全面了,已加入收藏夹了,感谢师傅的这篇技术贴,我会继续支持!
- 2023-05-22 18:15:48
-
- 科技周边 · 人工智能 | 2小时前 | 个性化定制 笔灵AI写作 免费功能 付费功能 bilings.ai
- 笔灵AI写作官网攻略:免费注册即用
- 208浏览 收藏
-
- 科技周边 · 人工智能 | 3小时前 | 算力需求 国产AI大模型 国家超算互联网平台 MiniMax-Text-01 注册用户
- 国家超算平台发布超长文本模型
- 278浏览 收藏
-
- 科技周边 · 人工智能 | 6小时前 |
- Llama4刷榜惹争议,20万显卡仅此成绩?
- 275浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 542次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 508次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 497次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 484次学习
-
- 笔灵AI生成答辩PPT
- 探索笔灵AI生成答辩PPT的强大功能,快速制作高质量答辩PPT。精准内容提取、多样模板匹配、数据可视化、配套自述稿生成,让您的学术和职场展示更加专业与高效。
- 12次使用
-
- 知网AIGC检测服务系统
- 知网AIGC检测服务系统,专注于检测学术文本中的疑似AI生成内容。依托知网海量高质量文献资源,结合先进的“知识增强AIGC检测技术”,系统能够从语言模式和语义逻辑两方面精准识别AI生成内容,适用于学术研究、教育和企业领域,确保文本的真实性和原创性。
- 22次使用
-
- AIGC检测-Aibiye
- AIbiye官网推出的AIGC检测服务,专注于检测ChatGPT、Gemini、Claude等AIGC工具生成的文本,帮助用户确保论文的原创性和学术规范。支持txt和doc(x)格式,检测范围为论文正文,提供高准确性和便捷的用户体验。
- 30次使用
-
- 易笔AI论文
- 易笔AI论文平台提供自动写作、格式校对、查重检测等功能,支持多种学术领域的论文生成。价格优惠,界面友好,操作简便,适用于学术研究者、学生及论文辅导机构。
- 38次使用
-
- 笔启AI论文写作平台
- 笔启AI论文写作平台提供多类型论文生成服务,支持多语言写作,满足学术研究者、学生和职场人士的需求。平台采用AI 4.0版本,确保论文质量和原创性,并提供查重保障和隐私保护。
- 35次使用
-
- GPT-4王者加冕!读图做题性能炸天,凭自己就能考上斯坦福
- 2023-04-25 501浏览
-
- 单块V100训练模型提速72倍!尤洋团队新成果获AAAI 2023杰出论文奖
- 2023-04-24 501浏览
-
- ChatGPT 真的会接管世界吗?
- 2023-04-13 501浏览
-
- VR的终极形态是「假眼」?Neuralink前联合创始人掏出新产品:科学之眼!
- 2023-04-30 501浏览
-
- 实现实时制造可视性优势有哪些?
- 2023-04-15 501浏览