我如何生成三个异常点,使它们明显远离python中的正常数据



我正在使用make_mons数据集,并试图实现异常值检测算法。这就是为什么我想生成3个偏离正常数据的点,并证明它们是否是异常值。这3个点应该从我的数据中随机选择,并且应该尽可能远离正常数据。我的算法会将该点与旧值之间的距离进行比较,并确定它是否为异常值。我知道还有其他资源可以做到这一点,但我要做的具体问题是我的数据集。我找不到适合我的数据集的解决方案

以下是我定义数据集并拟合到K-Means的代码(我必须使用K-Means拟合的数据(:

data = make_moons(n_samples=100,noise=0, random_state=0)
X,y=data
n_clusters=10
kmeans = KMeans(n_clusters = n_clusters,random_state=10)
kmeans.fit(X)
centroids = kmeans.cluster_centers_
labels = kmeans.labels_

很快,我如何在数据中找到最远的3个点,并将其用于异常值检测?

如注释中所述,您应该定义一个标准来对异常值进行分类。无论哪种方式,在下面的代码中,我从X中随机选择了三个条目,并将它们乘以1000,所以无论您选择什么定义,这肯定会使它们成为异常值。

# Import libraries
import numpy as np
from sklearn.datasets import make_moons
# Create data
X, y = make_moons(100, random_state=123)
# Randomly select 3 row numbers from X
np.random.seed(5)
idx = np.random.randint(low=0, high=len(df[0]) + 1, size=3)
# Overwrite the data from the randomly selected rows
for i in idx:
scaler = 1000 # Change this number to whatever you need
X[i] = X[i] * scaler

注意:idx有重复的可能性很小。np.random.seed(5)不会发生这种情况,但如果您选择另一个种子(或选择根本不使用一个(并获得重复,只需尝试另一个或重复,直到没有获得重复。

最新更新