大数据HCIE成神之路之数据预处理(2)——异常值处理

异常值处理

  • 1 异常值处理
    • 1.1 散点图
      • 1.1.1 实验任务
        • 1.1.1.1 实验背景
        • 1.1.1.2 实验目标
        • 1.1.1.3 实验数据解析
      • 1.1.2 实验思路
      • 1.1.3 实验操作步骤
      • 1.1.4 结果验证
    • 1.2 基于分类模型的异常检测
      • 1.2.1 实验任务
        • 1.2.1.1 实验背景
        • 1.2.1.2 实验目标
        • 1.2.1.3 实验数据解析
      • 1.2.2 实验思路
      • 1.2.3 实验操作步骤
      • 1.2.4 结果验证
    • 1.3 3σ原则
      • 1.3.1 实验任务
        • 1.3.1.1 实验背景
        • 1.3.1.2 实验目标
        • 1.3.1.3 实验数据解析
      • 1.3.2 实验思路
      • 1.3.3 实验操作步骤
      • 1.3.4 结果验证
    • 1.4 箱型图分析
      • 1.4.1 实验任务
        • 1.4.1.1 实验背景
        • 1.4.1.2 实验目标
      • 1.4.2 实验思路
      • 1.4.3 实验操作步骤
      • 1.4.4 结果验证

1 异常值处理

1.1 散点图

将数据用散点图的形式可视化呈现,以便观察到数据集中的异常值。

Python中 matplotlib.pyplot 库的 scatter 函数用于数据集的可视化输出。其基本格式如下:

scatter(x, y, s=None, c=None, marker=None, cmap=None, norm=None, vmin=None, vmax=None, alpha=None, linewidths=None, verts=None, edgecolors=None, hold=None, data=None, **kwargs)

关键参数详解:

  • X代表散点图的x轴数据。

  • y代表散点图的y轴数据。

  • s可选参数,代表散点图的数据 大小

  • c可选参数,代表散点图的数据 颜色 ,默认为蓝色。

  • marker可选参数,代表散点图的 形状 ,默认为○型。

  • camp可选参数,代表指定 色图 ,默认为None。只有当参数C为浮点型数组时,camp参数才有效。

  • norm可选参数,代表数据 亮度 ,默认为None。只有当参数C为浮点型数组时,norm参数才有效。

  • vmin&vmax可选参数,与norm类似,若已使用norm参数,则此参数无效。

  • alpha可选参数,代表数据 透明度 ,默认为None。数值在0至1之间,0代表透明,1代表不透明。

  • linewidths可选参数,代表散点图边界线宽度 ,默认为None。

  • verts可选参数,代表序列[x,y]。如果参数marker为None,则此参数发挥作用 (作用与marker类似)。

  • edgecolors可选参数,代表散点图边界 颜色 ,默认为‘face’。

1.1.1 实验任务

1.1.1.1 实验背景

通过输出散点图,展示图中的异常值,加深此方法的理解。

1.1.1.2 实验目标

使用pyplot函数可视化数据集,观测异常值。

1.1.1.3 实验数据解析

实验使用的是鸢尾花数据集。

1.1.2 实验思路

使用散点图可视化数据集,查看异常点:

  • 导入实验数据集。

  • 利用 matplotlib.pyplot 函数库输出散点图。

1.1.3 实验操作步骤

步骤 1 数据导入

#导入pandas库和numpy库
import pandas as pd
import numpy as np
# 导入iris数据集
from sklearn.datasets import load_iris
iris=load_iris()
iris.target_names

输出结果:

array(['setosa', 'versicolor', 'virginica'], dtype='<U10')

解释:dtype=‘<U10’ 表示该数组的数据类型是 Unicode 字符串,每个字符串的最大长度为 10 个字符。其中 <U 表示 Unicode 字符串,而 10 表示字符串的最大长度。

在这个例子中,dtype=‘<U10’ 表示每个字符串的最大长度为 10 个字符。如果字符串的长度超过 10,它们将被截断以适应这个长度。这在鸢尾花数据集中是合理的,因为每个类别的名称都不会超过 10 个字符,所以使用这个数据类型的数组可以有效地存储和表示类别名称。

步骤 2 数据可视化

# 导入 matplotlib.pyplot 函数库
import matplotlib.pyplot as plt
# 画散点图,其中第一维数据为 x 轴,第二维数据为 y 轴
# Sepal.Length(花萼长度,特征的第一列)为 x 轴
x_index=0
# Sepal.Width(花萼宽度,特征的第二列)为 y 轴
y_index=1
# 设置数据集颜色,因为数据集分为三类,因此设置成蓝、红和绿三色。
colors = ['blue', 'red', 'green']
# 先使用 zip 函数将鸢尾花卉种类和颜色打包成元组形式,如[('setosa', 'blue'),('versicolor', 'red'), ('virginica', 'green')]
# 然后使用 for…in…循环,可视化三种数据。
for label, color in zip(range(len(iris.target_names)), colors):plt.scatter(iris.data[iris.target == label, x_index], iris.data[iris.target == label, y_index], label=iris.target_names[label], c=color)

解释:

当我们进入for循环时,我们将遍历每个类别的鸢尾花数据,并使用不同的颜色来可视化它们。

  1. label:在每次迭代中,label代表当前类别的索引。它的取值范围是0到2,对应着鸢尾花数据集中的三个类别(是数据集决定的):setosa(山鸢尾)、versicolor(杂色鸢尾)和virginica(维吉尼亚鸢尾)。

  2. color:在每次迭代中,color代表当前类别的颜色。colors列表中定义了三个颜色:‘blue’(蓝色),‘red’(红色)和’green’(绿色)。zip函数将类别的索引和颜色打包成元组的形式,以便在每次迭代中同时访问它们。

  3. iris.data[iris.target == label, x_index]:这是一个 NumPy 数组的索引操作。iris.data是鸢尾花数据集中的特征数据,iris.target是对应的目标变量。iris.target == label是一个布尔数组,它的值为True或False,用于指示目标变量 是否等于当前的类别索引 。通过这个布尔数组,我们可以筛选出属于当前类别的特征数据。x_index表示我们希望在散点图中使用特征数据的哪个维度作为 x 轴。

  4. iris.data[iris.target == label, y_index]:类似于前面的操作,这里是选择特征数据的另一个维度作为 y 轴。

  5. label=iris.target_names[label]:这是为散点图中每个类别的数据添加标签。iris.target_names是鸢尾花数据集中目标变量的类别名称数组。通过label索引,我们可以获取当前类别的名称,并将其作为标签显示在散点图中。

  6. c=color:这是为散点图中每个类别的数据设置颜色。c参数用于指定散点的颜色,而color变量则是当前类别对应的颜色。

综上所述,该for循环遍历了鸢尾花数据集中的每个类别,根据类别的索引选择相应的特征数据作为 x 轴和 y 轴,并使用不同的颜色和标签将它们可视化成散点图。这样可以直观地展示不同类别之间在两个特征维度上的分布情况。

输出结果如下:
在这里插入图片描述
补充学习一:

zip() 函数非常有用。它会返回一个由元组组成的迭代器,每个元组中包含来自输入可迭代对象的对应元素。

names = ['Alice', 'Bob', 'Charlie']
ages = [25, 30, 35]for name, age in zip(names, ages):print(name, age)

输出结果:

Alice 25
Bob 30
Charlie 35

补充学习二:
假设我们有以下数据:

iris.data = [[5.1, 3.5, 1.4, 0.2],[4.9, 3.0, 1.4, 0.2],[6.2, 2.9, 4.3, 1.3],[5.5, 2.4, 3.8, 1.1],[6.3, 3.3, 6.0, 2.5]]iris.target = [0, 0, 1, 1, 2]

iris.data是一个二维数组,表示鸢尾花的特征数据(分别为: 花萼长度,花萼宽度,花瓣长度,花瓣宽度 )。每一行代表一个样本,每一列代表一个特征。 iris.target 是一个一维数组,表示对应样本的类别标签。

现在,我们来解释 iris.data[iris.target == label, x_index] 这个表达式,假设label为1,x_index为2。

  1. iris.target == label:这是一个布尔数组,它的长度与iris.target相同。它的值为True或False,表示对应位置的样本是否属于label所代表的类别。在我们的例子中,iris.target == label的结果为[False, False, True, True, False]。

  2. iris.data[iris.target == label]:这是一个数组索引操作,它使用布尔数组iris.target == label作为索引, 从iris.data中筛选出对应位置为True的行 。在我们的例子中,这个表达式的结果是一个二维数组:

[[6.2, 2.9, 4.3, 1.3],[5.5, 2.4, 3.8, 1.1]]
  1. iris.data[iris.target == label, x_index]:这是一个二维数组的索引操作,它使用布尔数组iris.target == label筛选出的行,并选择其中的第x_index列( 此处为2,即第3列 )作为结果。在我们的例子中,这个表达式的结果是一个一维数组:
[4.3, 3.8]

所以, iris.data[iris.target == label, x_index] 的意思是,从iris.data中选择属于label类别的样本,并且只保留这些样本的第x_index个特征值。

1.1.4 结果验证

从图中可以得到,对于左上方数据点集群 (setosa,蓝圆点) 来说,左下角的蓝圆点离setosa数据集群较远,可将其认为异常值。

1.2 基于分类模型的异常检测

本实验以决策树模型为例。

Python的 sklearn.tree 库中的 DecisionTreeClassifier 函数可进决策树建模和预测,以便进行数异常检测。其基本格式如下:

DecisionTreeClassifier(criterion='gini', splitter='best', max_depth=None, min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features=None, random_state=None, max_leaf_nodes=None, min_impurity_decrease=0.0, min_impurity_split=None, class_weight=None, presort=False)

关键参数详解:

  • criterion可选参数,代表特征选择标准,criterion=gini为 基尼系数 ,criterion=entropy为 信息增益 。默认为gini。

  • splitter可选参数,代表特征划分点选择标准,splitter=best为针对所有特征找出最优的特征划分点,splitter=random为随机的在部分特征中找局部最优的划分点。默认为best,适用于小样本数据,若数据量过大,则random较为合适。

  • max_depth可选参数,代表树的最大深度,max_depth=None为不限制树的深度,适用于小样本数据。若数据量过大,则需设置树的最大深度,10-100较为合理。默认为None。

  • min_samples_split可选参数,代表内部节点划分所需最小样本数。若某节点的样本数少于min_samples_split,则停止继续选择最优特征划分。默认为2。

  • min_samples_leaf可选参数,代表叶子节点最少样本数,默认值1。

  • min_weight_fraction_leaf可选参数,代表叶子节点最小的样本权重和。若样本有较多缺失值,则引入样本权重。默认为0,不考虑权重问题。

  • max_features可选参数,代表划分时的最大特征数。若为log2则划分时最多考虑log2(n_features)个特征;若为sqrt或auto则划分时最多考虑sqrt(n_features)个特征。默认为None。

  • max_leaf_nodes可选参数,代表构建树时的最大叶子节点数量。默认为None。

  • presort可选参数,Boolean,代表数据是否排序。数据量较小时,对数据排序可加快建模速度。默认为False。

1.2.1 实验任务

1.2.1.1 实验背景

利用分类算法将数据集分类,加深此方法的理解。

1.2.1.2 实验目标

使用分类模型判断数据A和B是否异常。

1.2.1.3 实验数据解析

实验使用的是鸢尾花数据集。

1.2.2 实验思路

使用分类模型 (tree模型) 进行异常值检测:

  • 导入实验数据集。

  • 生成实验测试集。

  • 利用实验数据集进行回归建模。

  • 利用建好的回归模型,对实验测试集中的缺失值进行预测。

1.2.3 实验操作步骤

测试数据如下。

  • “sepal length (cm)”:[5.6,4.9],

  • “sepal width (cm)”:[2.5,3],

  • “petal length (cm)”:[4.5,1.4],

  • “petal width (cm)”:[0.2,2.1]。

  • “targets”:[1,2]。

异常值检测数据集,如下:

Indexsepal length (cm)sepal width (cm)petal length (cm)petal width (cm)Y
A5.62.54.50.21
B4.93.01.42.12

步骤 1 导入数据集

# 导入 pandas 库和 numpy 库
import pandas as pd
import numpy as np
# 导入数据集 iris
from sklearn.datasets import load_iris
iris = load_iris()
# 导入 iris 数据集,自变量 X 命名为 dfx,分类变量 Y 命名为 dfy。
dfx = pd.DataFrame(data=iris.data, columns=iris.feature_names)
dfx

输出结果如下:
在这里插入图片描述

# 部分关键数据展示
dfy=pd.DataFrame(data=iris.target)
dfy

输出结果:

0
0	0
1	0
2	0
3	0
4	0
...	...
145	2
146	2
147	2
148	2
149	2

步骤 2 生成测试集

因iris无缺失值,因此人为生成测试集x_test,来利用决策树模型进行异常检测。

x_test = pd.DataFrame({"sepal length (cm)": [5.6, 4.9],"sepal width (cm)": [2.5, 3],"petal length (cm)": [4.5, 1.4],"petal width (cm)": [0.2, 2.1]})

步骤 3 建立DecisionTreeClassifier模型

# 导入 DecisionTreeClassifier
from sklearn.tree import DecisionTreeClassifier
modelcart = DecisionTreeClassifier()
modelcart.fit(dfx,dfy)

输出结果如下:

DecisionTreeClassifier()

步骤 4 判断数据A和B是否为异常值

# 使用建立好的 tree 模型检验数据点 A 和 B 是否正确
predicted = modelcart.predict(x_test)
predicted

输出结果如下:

array([1, 0])

1.2.4 结果验证

步骤四对实验结果进行了验证,正确检测出异常值。根据决策树模型识别出A理论上应为类别1 (测试数据中A为类别1);B理论上应为类别2 (测试数据中B为类别0)。因此数据A不是异常值,B是异常值。

1.3 3σ原则

3σ原则 又称为 拉依达准则 ,先假设一组检测数据只含有随机误差,对原始数据进行计算处理得到标准差,然后按一定的概率确定一个区间,认为误差超过这个区间的就属于异常值。一般其值与平均值的偏差绝对值超过三倍标准差的值,则为异常值,需删除。

解释:

3σ原则(Three Sigma Rule),也称为 3倍标准差原则 ,是统计学中的一个概念,用于描述 正态分布 (或近似正态分布)中观测值离均值的距离。

根据3σ原则,对于一个符合正态分布的数据集,大约有:

  • 68% 的观测值落在均值的一个标准差范围内;
  • 95% 的观测值落在均值的两个标准差范围内;
  • 99.7% 的观测值落在均值的三个标准差范围内。
    这个原则可以用来判断一个观测值是否异常或离群。如果一个观测值距离均值超过三个标准差,那么可以认为它是一个异常值或离群点。

3σ原则在质量管理、过程控制和数据分析等领域得到广泛应用。它可以帮助识别潜在的问题、异常情况或变化,并指导决策和改进措施。然而,需要注意的是,3σ原则是基于 正态分布 假设的,如果数据不满足正态分布,应谨慎使用该原则。

1.3.1 实验任务

1.3.1.1 实验背景

利用3σ原则发现数据集中的异常值,加深此方法的理解。

1.3.1.2 实验目标

使用3σ原则发现数据集中的异常值。

1.3.1.3 实验数据解析

使用鸢尾花数据集。

1.3.2 实验思路

使用3σ原则发现数据集中异常值:

  • 导入实验数据集。

  • 根据3σ原则的公式计算出异常值。

1.3.3 实验操作步骤

步骤 1 导入数据集

iris是150*4的数据集,为实验过程更易被理解。特取其中一个属性进行3σ原则实验。本实验选取iris数据集中的第一维数据 sepal length (cm)

# 选取第一维数据 sepal length (cm),记为数据集 X
from sklearn.datasets import load_iris
iris=load_iris()
X=iris.data[:,1]
X

输出结果如下:

# 部分关键数据展示
array([3.5, 3. , 3.2, 3.1, 3.6, 3.9, 3.4, 3.4, 2.9, 3.1, 3.7, 3.4, 3. ,3. , 4. , 4.4, 3.9, 3.5, 3.8, 3.8, 3.4, 3.7, 3.6, 3.3, 3.4, 3. ,3.4, 3.5, 3.4, 3.2, 3.1, 3.4, 4.1, 4.2, 3.1, 3.2, 3.5, 3.1, 3. ,3.4, 3.5, 2.3, 3.2, 3.5, 3.8, 3. , 3.8, 3.2, 3.7, 3.3, 3.2, 3.2,3.1, 2.3, 2.8, 2.8, 3.3, 2.4, 2.9, 2.7, 2. , 3. , 2.2, 2.9, 2.9,3.1, 3. , 2.7, 2.2, 2.5, 3.2, 2.8, 2.5, 2.8, 2.9, 3. , 2.8, 3. ,

补充解释:
iris.data[:,1] 是二位数组,举例:

import numpy as np
ar1=np.arange(12).reshape((4, 3))
ar1
array([[ 0,  1,  2],[ 3,  4,  5],[ 6,  7,  8],[ 9, 10, 11]])

获取二维数组的第一列:

ar1[:,0]

输出结果为:

array([0, 3, 6, 9])

获取二维数组的第二列:

ar1[:,1]

输出结果为:

array([1, 4, 7, 10])

输出前两行的第一列:

ar1[:2,0]

输出结果为:

array([0, 3])

步骤 2 计算数据集的均值

# 导入 numpy 库,可计算均值和标准差
import numpy as np
mean=np.mean(X)
mean

输出结果如下:

3.0573333333333337

步骤 3 计算数据集的标准差和三倍标准差

# 计算数据集 X 的标准差
standard=np.std(X)
standard

输出结果如下:

0.4321465800705435

计算三倍标准差:

b=3*standard
b

输出结果如下:

1.3032329032064838

步骤 4 计算数据集X与平均值的偏差的绝对值

a=abs(X-mean)
a

输出结果如下:

# 部分关键数据展示
array([0.44266667, 0.05733333, 0.14266667, 0.04266667, 0.54266667,0.84266667, 0.34266667, 0.34266667, 0.15733333, 0.04266667,0.64266667, 0.34266667, 0.05733333, 0.05733333, 0.94266667,1.34266667, 0.84266667, 0.44266667, 0.74266667, 0.74266667,0.34266667, 0.64266667, 0.54266667, 0.24266667, 0.34266667,0.05733333, 0.34266667, 0.44266667, 0.34266667, 0.14266667,0.04266667, 0.34266667, 1.04266667, 1.14266667, 0.04266667,0.14266667, 0.44266667, 0.54266667, 0.05733333, 0.34266667,0.44266667, 0.75733333, 0.14266667, 0.44266667, 0.74266667,0.05733333, 0.74266667, 0.14266667, 0.64266667, 0.24266667,

步骤 5 判断异常值

计算数据集X与平均值的偏差绝对值是否超过三倍标准差,并输出异常值。

# 利用 for 循环将数据集 X 的偏差绝对值依次与三倍标准差对比,超过则为异常值并输出异常值。
for i in range(1, 150):if a[i] > b:print('当前异常值为 :', a[i])print('当前异常值位置为 :', i)

输出结果如下:

当前异常值为 : 1.3426666666666667
当前异常值位置为 : 15

1.3.4 结果验证

经实验发现,第一维 sepal length (cm) 的第15个数据为异常值,因为其与平均值的偏差的绝对值超多三倍标准差。

对于小样本数据集,3σ原则可能不太适用。在小样本情况下,由于数据点较少,计算均值和标准差可能会受到极端值或离群点的影响,从而导致均值和标准差的估计不准确。

此外,如果数据集不符合正态分布假设,即使数据量很大,也应该谨慎使用3σ原则。在非正态分布的情况下,数据点的分布可能不服从均值加减3倍标准差的规律。

1.4 箱型图分析

箱线图依据实际数据绘制,其判断异常值的标准以四分位数和四分位距为基础,分为上四分位、下四分位、IQR,由此计算出最大估计值和最小估计值。其基本格式如下:

DataFrame.describe()

此函数输出得到如下结果。

输出详解:

  • Count代表数据集数量。

  • Mean代表数据集均值。

  • Std代表数据集标准差。

  • Min代表数据集最小值。

  • 25%代表数据集中25%分位数据。

  • 50%代表数据集中50%分位数据。

  • 75%代表数据集中75%分位数据。

  • max代表数据集最大值。

1.4.1 实验任务

1.4.1.1 实验背景

利用箱型图发现数据集中的异常值,加深此方法的理解。

1.4.1.2 实验目标

通过箱型图检测预测值,并输出异常值。

1.4.2 实验思路

使用箱型图检测数据集中的异常值:

  • 导入实验数据集。
  • 根据箱型图计算出异常值。

1.4.3 实验操作步骤

步骤 1 导入数据和函数库

iris是150*4的数据集,为实验过程更易被理解。特取其中一个属性进行3σ原则实验。本实验选取数据集中的第二维 sepal width (cm) (可以尝试用第一个维度看有面试结果【无异常值】)。

# 导入 pandas 和 matplotlib 库
import matplotlib.pyplot as plt
import pandas as pd
from sklearn import datasets
iris = datasets.load_iris()
statistics=iris.data[:,1]
statistics

输出结果如下:

# 数据展示
array([3.5, 3. , 3.2, 3.1, 3.6, 3.9, 3.4, 3.4, 2.9, 3.1, 3.7, 3.4, 3. ,3. , 4. , 4.4, 3.9, 3.5, 3.8, 3.8, 3.4, 3.7, 3.6, 3.3, 3.4, 3. ,3.4, 3.5, 3.4, 3.2, 3.1, 3.4, 4.1, 4.2, 3.1, 3.2, 3.5, 3.6, 3. ,3.4, 3.5, 2.3, 3.2, 3.5, 3.8, 3. , 3.8, 3.2, 3.7, 3.3, 3.2, 3.2,3.1, 2.3, 2.8, 2.8, 3.3, 2.4, 2.9, 2.7, 2. , 3. , 2.2, 2.9, 2.9,3.1, 3. , 2.7, 2.2, 2.5, 3.2, 2.8, 2.5, 2.8, 2.9, 3. , 2.8, 3. ,2.9, 2.6, 2.4, 2.4, 2.7, 2.7, 3. , 3.4, 3.1, 2.3, 3. , 2.5, 2.6,3. , 2.6, 2.3, 2.7, 3. , 2.9, 2.9, 2.5, 2.8, 3.3, 2.7, 3. , 2.9,3. , 3. , 2.5, 2.9, 2.5, 3.6, 3.2, 2.7, 3. , 2.5, 2.8, 3.2, 3. ,3.8, 2.6, 2.2, 3.2, 2.8, 2.8, 2.7, 3.3, 3.2, 2.8, 3. , 2.8, 3. ,2.8, 3.8, 2.8, 2.8, 2.6, 3. , 3.4, 3.1, 3. , 3.1, 3.1, 3.1, 2.7,3.2, 3.3, 3. , 2.5, 3. , 3.4, 3. ])

步骤 2 利用 describe () 得到25%分位数据、75%分位数据

# describe()适用于 DataFrame 结构的数据,因此把 statistics 转化成 DataFrame结构
statistics=pd.DataFrame(statistics)
c=statistics.describe()
c

输出结果如下:

0
count	150.000000
mean	3.057333
std		0.435866
min		2.000000
25%		2.800000
50%		3.000000
75%		3.300000
max		4.400000

思考:什么叫什么是25% 分位数(25%)、中位数(50%)、75% 分位数(75%)?
回答:

  • 25%分位数(第一四分位数):它将数据集划分为四个等份之一,并表示数据集中的25%的观测值位于该值以下。换句话说, 25%分位数是将数据集从小到大排序后,位于25%位置的值。有时也被称为下四分位数(Lower Quartile)

  • 中位数(第二四分位数):它将数据集划分为两个等份,即中间位置。中位数表示数据集中的50%的观测值位于该值以下。如果数据集中的观测值个数为奇数,则中位数是中间的值;如果观测值个数为偶数,则中位数是中间两个值的平均值。

  • 75%分位数(第三四分位数):它将数据集划分为四个等份之一,并表示数据集中的75%的观测值位于该值以下。换句话说,75%分位数是将数据集从小到大排序后,位于75%位置的值。有时也被称为上四分位数(Upper Quartile)。

步骤 3 计算IQR

IQR=c.loc['75%']-c.loc['25%']
IQR

思考:IQR是什么意思?
IQR(Interquartile Range)是数据集中的一个统计量,表示75%分位数与25%分位数之间的距离。

IQR的计算可以提供关于数据集中间50%的离散程度的信息。它衡量了数据集中离散值的范围,即数据集中的中间50%观测值的离散程度。 较大的IQR值表示数据的离散程度较大,而较小的IQR值表示数据的离散程度较小

在实际应用中,IQR常用于识别数据集中的离群值(异常值)。根据常用的经验法则,可以将超过1.5倍IQR的值定义为潜在的离群值。 通过计算IQR并结合其他方法,可以帮助识别和处理数据集中的异常值,从而提高数据分析的准确性和可靠性。

输出结果:

0    0.5
dtype: float64

解释:输出的IQR值为0.5,这意味着,在这个特征上,数据的分布相对较紧密,观测值之间的差异较小。

步骤 4 计算最大预估值和最小预估值

# 最大预估值为8.35
maxCount=c.loc['75%']+1.5*IQR
maxCount

输出结果如下:

0    4.05
dtype: float64

解释:根据输出结果,最大预估值为4.05。这个结果告诉你,在这个特定的特征上,超过4.05的观测值可以被视为潜在的离群值。 超过这个值的观测值可能是相对较远离数据集中心的异常值。

# 最小预估值为 2.05
minCount=c.loc['25%']-1.5*IQR
minCount

输出结果如下:

0    2.05
dtype: float64

解释:在这个特定的特征上,小于2.05的观测值可以被视为潜在的离群值。 小于这个值的观测值可能是相对较远离数据集中心的异常值。通过计算最大预估值和最小预估值,你可以得到一个范围,在这个范围之外的观测值可能被认为是潜在的离群值。

步骤 5 验证数据集中是否有异常值,并输出异常值

# 取出 iris 第二维数据循环输出异常值。
X = iris.data[:, 0]
for i in range(1, 150):if X[i] > maxCount.values or X[i] < minCount.values:print('当前异常值为 :', X[i])print('当前异常值位置为 :', i)

部分输出结果如下:

当前异常值为 : 4.4
当前异常值位置为 : 15
当前异常值为 : 4.1
当前异常值位置为 : 32
当前异常值为 : 4.2
当前异常值位置为 : 33
当前异常值为 : 2.0
当前异常值位置为 : 60

for循环结构不适用于DataFrame结构的数据, describe() 要求数据为DataFrame结构,因此statistic数据集不适用于for循环。在此实验中,使用原始数据集X进行for循环输出。

步骤 6 可视化验证分析结果是否准确

plt.figure()
plt.boxplot(statistics)
plt.show()

在这里插入图片描述

1.4.4 结果验证

步骤六对实验结果进行了验证,正确检测出异常值。由图可看出,图中的四个圆圈为异常值,分别是 sepal width (cm) 中的第15个,第32个,第33个,第60个数据。

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

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

相关文章

深入了解Linux网络配置:常见面试问题及解答

学习目标&#xff1a; 解释Linux网络配置的重要性和作用引入常见的面试问题 学习内容&#xff1a; 如何查看当前系统的IP地址和网关信息&#xff1f; 解答&#xff1a;可以使用ifconfig命令来查看当前系统的IP地址和网关信息。通过运行ifconfig命令&#xff0c;将会列出所有可…

数字基础设施及相关产业链报告:数据要素加快推进、AI终端应用加速发展

今天分享的AI系列深度研究报告&#xff1a;《数字基础设施及相关产业链报告&#xff1a;数据要素加快推进、AI终端应用加速发展》。 &#xff08;报告出品方&#xff1a;长城证券&#xff09; 报告共计&#xff1a;16页 1. 行业观点 在 TMT 各子板块&#xff1a;电子、通信、…

【Spring】Spring中的事务

文章目录 1. Spring事务简介2. Spring事务的案例案例代码代码目录结构数据库pom.xmlResource/jdbc.propertiesconfig/SpringConfig.javaconfig/JdbcConfig.javaconfig/MyBatisConfig.javadao/AccountDao.javaservice/AccountService.javaservice/impl/AccountServiceImpl.java测…

【Mode Management】ComM详细介绍

目录 1. Introduction and functional overview 2.Dependencies to other modules 3.Functional specification 3.1 Partial Network Cluster Management 3.2 ComM channel state machine 3.2.1 Behaviour in state COMM_NO_COMMUNICATION 3.2.1.1 COMM_NO_COM_NO_PENDI…

暂退法(丢弃法)

在深度学习中&#xff0c;丢弃法&#xff08;Dropout&#xff09;是一种常用的正则化技术&#xff0c;旨在减少模型的过拟合现象&#xff0c;可能会比之前的权重衰减(Weight Decay)效果更好。通过在训练过程中随机丢弃一部分神经元&#xff0c;可以有效地减少神经网络中的参数依…

Python实验项目9 :网络爬虫与自动化

实验 1&#xff1a;爬取网页中的数据。 要求&#xff1a;使用 urllib 库和 requests 库分别爬取 http://www.sohu.com 首页的前 360 个字节的数据。 # 要求&#xff1a;使用 urllib 库和 requests 库分别爬取 http://www.sohu.com 首页的前 360 个字节的数据。 import urllib.r…

微服务最佳实践:构建可扩展且高效的系统

微服务架构彻底改变了现代软件开发&#xff0c;提供了无与伦比的敏捷性、可扩展性和可维护性。然而&#xff0c;有效实施微服务需要深入了解最佳实践&#xff0c;以充分发挥微服务的潜力&#xff0c;同时避免常见的陷阱。在这份综合指南中&#xff0c;我们将深入研究微服务的关…

跟iPhone类似,不同品牌的手机、电脑随时使用“隔空投送”功能!如何开启?

iPhone的隔空投送是一个很受欢迎的功能。打开一个 App&#xff0c;然后轻点“共享”或“共享”按钮&#xff0c;再点击隔空投送&#xff0c;就可以分享图片、视频、文件出去。 然而&#xff0c;如果你用的不是苹果的产品&#xff0c;iPhone的隔空投送功能就有了“隔阂”。 不过…

CountDownLatch实战应用——实现异步多线程业务处理,异常情况回滚全部子线程

&#x1f60a; 作者&#xff1a; 一恍过去 &#x1f496; 主页&#xff1a; https://blog.csdn.net/zhuocailing3390 &#x1f38a; 社区&#xff1a; Java技术栈交流 &#x1f389; 主题&#xff1a; CountDownLatch实战应用——实现异步多线程业务处理&#xff0c;异常情…

H266/VVC编码标准介绍

视频编码标准 多样的视频应用催生了多种的视频编码方法。为了使编码后的码流能够在大范围内通用和规范&#xff0c;从20世纪80年代开始&#xff0c;国际组织就开始对视频编码建立国际标准。 什么是视频编码标准&#xff1a; 视频编码标准只规定了码流的语法语义和解码器&#…

Appium —— 初识移动APP自动化测试框架Appium

说到移动APP自动化测试&#xff0c;代表性的测试框架非Appium莫属&#xff0c;从今天开始我们将从APP结构解析、Appium框架学习、安卓/iOS自动化测试实战、自动遍历回归测试、自动化测试平台及持续集成&#xff0c;多个维度一起由浅入深的学废Appium 今天我们先来初步认识Appi…

【消息中间件】Rabbitmq的基本要素、生产和消费、发布和订阅

原文作者&#xff1a;我辈李想 版权声明&#xff1a;文章原创&#xff0c;转载时请务必加上原文超链接、作者信息和本声明。 文章目录 前言一、消息队列的基本要素1.队列:queue2.交换机:exchange3.事件:routing_key4.任务:task 二、生产消费模式1.安装pika2.模拟生产者进程3.模…

【HR培训】行为反馈复盘,走出舒适区--20231217

行为反馈复盘&#xff0c;走出舒适区–鱼缸会议 要点&#xff1a;在于建立平等、透明、敢说的反馈环境&#xff0c;不打断、不争论 鱼缸会议流程 导入——入缸——反馈——承诺——关闭 步骤1&#xff1a;导入 目的&#xff1a;平等、透明、敢说的反馈 人员&#xff1a;主…

maui中实现加载更多 RefreshView跟ListView(1)

效果如图&#xff1a; MainPage.xaml.cs: using System; using System.Collections.ObjectModel; using System.Threading.Tasks; using Microsoft.Maui.Controls; using Microsoft.Maui.Controls.Xaml; using System.ComponentModel; using System.Runtime.CompilerServices…

计算机网络基础——网线认识与制作,线缆类型、线序、端接标准及注意事项

一、引言 网线制作是网络基础知识中不可或缺的。网络传输过程中&#xff0c;网线的质量和制作方法都会直接影响传输的速度和稳定性。本文将详细介绍网线制作的基础知识、线缆类型、线序、端接标准及注意事项。希望通过本文&#xff0c;读者能够更好地了解和掌握网线制作的方法…

AMD 自适应和嵌入式产品技术日

概要 时间&#xff1a;2023年11月28日 地点&#xff1a;北京朝阳新云南皇冠假日酒店 主题内容&#xff1a;AMD自适应和嵌入式产品的更新&#xff0c;跨越 云、边、端的AI解决方案&#xff0c;赋能智能制造的机器视觉与机器人等热门话题。 注&#xff1a;本文重点关注FPGA&a…

ASP.NET MVC实战之权限拦截Authorize使用

1&#xff0c;具体的实现方法代码如下 public class CustomAuthorizeAttribute : FilterAttribute, IAuthorizationFilter{/// <summary>/// 如果需要验证权限的时候&#xff0c;就执行进来/// </summary>/// <param name"filterContext"></par…

Ubuntu系统入门指南:基础操作和使用

Ubuntu系统的基础操作和使用 一、引言二、安装Ubuntu系统三、Ubuntu系统的基础操作3.1、界面介绍3.2、应用程序的安装和卸载3.3、文件管理3.4、系统设置 四、Ubuntu系统的日常使用4.1、使用软件中心4.2、浏览器的使用和网络连接设置4.3、邮件客户端的配置和使用4.4、文件备份和…

HTML5+CSS3小实例:3D发光切换按钮效果

目录 一、运行效果 图片效果 二、项目概述 三、开发环境 四、实现步骤及代码 1.创建空文件夹 2.完成页面内容 3.完成css样式 五、项目总结 六、源码获取 一、运行效果 图片效果 二、项目概述 这个项目是一个演示3D发光切换按钮效果的网页。按钮由一个开关和一个指…

Linux之进程(四)(进程地址空间)

目录 一、程序地址空间 二、进程地址空间 1、概念 2、写时拷贝 3、为什么要有进程地址空间 四、总结 一、程序地址空间 我们先来看看下面这张图。这张图是我们在学习语言时就见到过的内存区域划分图。 下面我们在Linux下看一看内存区域是不是也是这么划分的。 可见在Li…