基于正太分布的一元离群点检测

本文介绍了一种使用Matlab进行一元离群点检测的方法。通过最大似然估计计算了气温测试数据集的均值和标准差,并定义了离群点的检测范围。对于落在均值加减三倍标准差之外的数据点被视为离群点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

以下为Matlab实现程序:

clc;
clear;
%利用最大似然估计,检测一元离群点
%气温测试数据,单位为摄氏度,这里假设数据服从正太分布
TData=[24,24.1,28.9,28.9,29.0,29.1,29.1,29.2,29.2,29.3,29.4,29,28,29.2,29.3,29,29.5,29.3,29,29,29,29,29,29.4,29.1];
len=length(TData);
%利用最大似然估计计算均值和方差
phat=mle(TData);
mu=phat(1);
sigma=phat(2);
%定义离群点集
Outliers=[];
%落在 mu+/-3sigma区间范围之外的数据即为离群点
for i=1:len
    a=abs(TData(i)-mu)/sigma;
    if a>3
        Outliers(length(Outliers)+1)=TData(i);
    end
end

版权声明:本文为博主原创文章,未经博主允许不得转载。


任务描述 本关任务:完成泰坦尼克号遇难数据的清洗。 相关知识 案例背景 泰坦尼克号遭遇的灾难震惊世界,如何避免灾难甚至预测灾难呢? 要实现首先要做好泰坦尼克号的损失数据统计,才能为数据分析打下基础。 观察数据特点 如图所示的数据集中有些的缺失值和不合理的数字即离群点。 目标:预测泰坦尼克号上的乘客是幸存还是遇难,每个乘客对应个乘客Id,用0表示遇难,用1表示幸存。 理论基础 数据清洗 有上图案例的数据可知,在现实生活中的数据是“脏”的: 不完整的:缺少属性值。 例如,年龄=" "(地市的值) 含嘈杂的噪音,错误或离群。 例如,票价="-10"(错误) 如何处理丢失的数据 1.忽略元组:当每个属性缺少值比例比较大时,它的效果非常差 2.手动填写遗漏值:工作量大 3.自动填写 使用属性的平均值填充空缺值 最有可能的值:基于诸如贝叶斯公式或决策树推理 缺失值处理方法 import pandas as pd import numpy as np from sklearn.impute import SimpleImputer import matplotlib.pyplot as plt data_url = "train.csv" df = pd.read_csv(data_url) #使用属性的平均值填充空缺值 imp = SimpleImputer(missing_values = np.nan, strategy = 'mean') imp.fit(df.iloc[:,5:6]) plt.hist(imp.transform(df.iloc[:,5:6])) plt.show() 如何处理噪音数据 正态分布检测离群数据删除离群点 基于正态分布一元离群点检测 假定数据集正态分布产生,然后,可以由输入数据学习正态分布的参数,并把低概率的点识别为离群点。 在正态分布假定下,区域包含99.7%的数据,包含95.4%的数据,包含68.3%的数据。视具体情况而定,将其区域外的数据视为离群点。 数值分布在(μ-σ,μ+σ)中的概率为0.6827 数值分布在(μ-2σ,μ+2σ)中的概率为0.9545 数值分布在(μ-3σ,μ+3σ)中的概率为0.9973 箱线图检测离群数据删除离群点 四分位数 四分位数:Q1(第25百分位),Q3(第75百分位) 四分位数极差:IQR= Q3 - Q1 IQR=Q3−Q1 max=Q3+1.5∗IQR min=Q1−1.5∗IQR ​ 离群点:通常情况下,个值高于/低于1.5×IQR 处理噪声数据代码实现 import pandas as pd import numpy as np import matplotlib.pyplot as pl from sklearn.impute import SimpleImputer data_url = "train.csv" df = pd.read_csv(data_url) imp = SimpleImputer(missing_values = np.nan, strategy = 'mean') imp.fit(df.iloc[:,5:6]) pl.boxplot(imp.transform(df.iloc[:,5:6])) pl.xlabel('data') pl.show() 编程要求 根据提示,你需要完成: 缺失值填充 离群点检测 测试说明 平台会对你编写的代码进行测试: 开始你的任务吧,祝你成功! 需要补充的代码:import numpy as np import pandas as pd #读取数据 df=pd.read_csv('/data/workspace/myshixun/step1/train.csv') ##### begin ##### #查看列中是否存在空值 #使用SimpleImputer取出缺失值所在列的数值,sklearn当中特征矩阵必须是二维才能传入 使用reshape(-1,1)升维 age=df['Age'].values.reshape(-1,1) #导入模块 from sklearn.impute import SimpleImputer #实例化,均值填充,可改变strategy参数,实现其他填充方式 #fit_transform步完成调取结果 #填充好的数据传回到 data['Age']列df_fillna=df #检验是否还有空值,为0即说明空值均已被填充 ##### end ##### imp_mean=SimpleImputer(missing_values=np.nan,
03-20
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值