一个真正的异常值和PYod有多大的区别?

2024-06-25 21:09:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在为一个电话接线员进行一个关于通话详细记录的异常检测项目,我准备了10000个观测值和80个维度的样本,这些数据代表了一天的流量观测值的总和,数据表示如下:

enter image description here

这只是整个数据集的一小部分。在

然而,我决定使用PYOD库,这是一个提供许多无监督学习算法的API,我决定从CNN开始:

from pyod.models.knn import KNN
knn= KNN(contamination= 0.1)
result = knn.fit_predict(conso)

然后为了可视化结果,我决定在2维中调整样本大小,并以蓝色显示KNN预测的非异常值,红色表示异常值。在

^{pr2}$

“df_final_2”是“conso”的数据帧版本。在

然后我把这些都用正确的颜色:

import matplotlib.pyplot as plt
plt.scatter(result_f[0],result_f[1], s=1, c=color)

enter image description here

在图中让我感到不安的是,作为异常值预测的观测值并不是真正的异常值,因为通常异常值位于图的末端,不与正常行为分组,即使通过分析这些异常观测值,它们在原始数据集中的行为是正常的,我尝试过其他的PYOD算法,并修改了每个算法的参数,但至少得到了相同的结果。我在某个地方犯了个错误,我无法分辨。在

谢谢。在


Tags: 数据项目import算法记录pltresult电话
1条回答
网友
1楼 · 发布于 2024-06-25 21:09:32

有几件事需要检查:

  • 使用knn、lof和类似的依赖于距离度量的模型,首先应该对数据进行标准化(使用sklearn StandardScaler)
  • 在这种情况下,tsne现在可以工作,并且可以关闭降维
  • 也许不要使用fit_predict,但要这样做(使用y_train_pred):
    # train kNN detector
    clf_name = 'KNN'
    clf = KNN(contamination=0.1)
    clf.fit(X)

    # get the prediction labels and outlier scores of the training data
    y_train_pred = clf.labels_  # binary labels (0: inliers, 1: outliers)
    y_train_scores = clf.decision_scores_  # raw outlier scores

如果这些都不起作用,请随时在GitHub上打开一个问题报告,我们将进行进一步调查。在

相关问题 更多 >