在 Python 中检测每组中的异常值或噪声数据
Detect outliers or noise data in each group in Python
我正在处理一个包含 3 列的数据:type
、x
、y
,假设 x
和 y
是相关的而且它们不是标准化分布的,我想要 groupby type
和过滤器 outliers
或 noise
数据点在 x
和 y
中。有人可以向我推荐统计或机器学习方法来过滤异常值或噪声数据吗?我怎样才能在 Python 中做到这一点?
我正在考虑使用 scikit-learn
中的 DBSCAN
,这个方法合适吗?
类型 1:
类型2:
类型 3:
df1 = df.loc[df['type'] == '3']
data= df1[["x", "y"]]
data.plot.scatter(x = "x", y = "y")
from sklearn.cluster import DBSCAN
outlier_detection = DBSCAN(
eps = 0.5,
metric="euclidean",
min_samples = 3,
n_jobs = -1)
clusters = outlier_detection.fit_predict(data)
from matplotlib import cm
cmap = cm.get_cmap('Accent')
data.plot.scatter(
x = "iSearchCount",
y = "iGuaPaiCount",
c = clusters,
cmap = cmap,
colorbar = False
)
不关心参数当然得不到好的结果。看看你的情节。规模很大 - 你的 epsilon 很小!好像你的数据可能是整数,所以除了重复之外没有点的距离小于 0.5 ...
因此所有数据都被认为是噪音。
在使用方法之前,请确保您已了解其工作原理以及需要设置的参数。
我也会先记录转换数据。使用一些简单的阈值可能就足够了。 Don:t 当您的数据是单峰时,过度使用聚类。
经过一些特征工程技术后,您可以考虑使用 Sklearn 库中的 OneClassSVM 估计器。
https://justanoderbit.com/outlier-detection/one-class-svm/ 描述了如何使用它进行离群值检测。
对于此类数据和异常值,我会推荐一种统计方法。 SPE/DmodX(到模型的距离)或 Hotelling T2 测试可能对您有所帮助。我没有看到这 3 种类型的数据,但我生成了一些。
这些方法在 pca
库中可用。使用 n_std
您可以调整椭圆的“宽度”。
pip install pca
import pca
results = pca.spe_dmodx(X, n_std=3, showfig=True)
# If you want to test the Hotelling T2 test.
# results1 = pca.hotellingsT2(X, alpha=0.001)
results
是一个字典,包含异常值的标签。
我正在处理一个包含 3 列的数据:type
、x
、y
,假设 x
和 y
是相关的而且它们不是标准化分布的,我想要 groupby type
和过滤器 outliers
或 noise
数据点在 x
和 y
中。有人可以向我推荐统计或机器学习方法来过滤异常值或噪声数据吗?我怎样才能在 Python 中做到这一点?
我正在考虑使用 scikit-learn
中的 DBSCAN
,这个方法合适吗?
类型 1:
df1 = df.loc[df['type'] == '3']
data= df1[["x", "y"]]
data.plot.scatter(x = "x", y = "y")
from sklearn.cluster import DBSCAN
outlier_detection = DBSCAN(
eps = 0.5,
metric="euclidean",
min_samples = 3,
n_jobs = -1)
clusters = outlier_detection.fit_predict(data)
from matplotlib import cm
cmap = cm.get_cmap('Accent')
data.plot.scatter(
x = "iSearchCount",
y = "iGuaPaiCount",
c = clusters,
cmap = cmap,
colorbar = False
)
不关心参数当然得不到好的结果。看看你的情节。规模很大 - 你的 epsilon 很小!好像你的数据可能是整数,所以除了重复之外没有点的距离小于 0.5 ... 因此所有数据都被认为是噪音。
在使用方法之前,请确保您已了解其工作原理以及需要设置的参数。
我也会先记录转换数据。使用一些简单的阈值可能就足够了。 Don:t 当您的数据是单峰时,过度使用聚类。
经过一些特征工程技术后,您可以考虑使用 Sklearn 库中的 OneClassSVM 估计器。
https://justanoderbit.com/outlier-detection/one-class-svm/ 描述了如何使用它进行离群值检测。
对于此类数据和异常值,我会推荐一种统计方法。 SPE/DmodX(到模型的距离)或 Hotelling T2 测试可能对您有所帮助。我没有看到这 3 种类型的数据,但我生成了一些。
这些方法在 pca
库中可用。使用 n_std
您可以调整椭圆的“宽度”。
pip install pca
import pca
results = pca.spe_dmodx(X, n_std=3, showfig=True)
# If you want to test the Hotelling T2 test.
# results1 = pca.hotellingsT2(X, alpha=0.001)
results
是一个字典,包含异常值的标签。