python - Python 异常检测 (Pyod) 未收敛
问题描述
我正在尝试使用CBLOF进行 PYOD 进行异常检测。我一直无法使用此算法标记异常。我发现当我运行 CBLOF 算法时,它会引发以下错误:
ValueError:缓冲区 dtype 不匹配,预期为 'INT' 但得到了 'long long'
异常被忽略:'sklearn.cluster._k_means._assign_labels_csr' ValueError: Buffer dtype mismatch, expected 'INT' but got 'long long'
结果是:
ValueError:无法形成有效的集群分离。请更改 n_clusters 或更改聚类方法
似乎 CBLOF 算法依赖于 sklearn.cluster 并且从 pyod 传递给 skelearn 的预期数据类型不是预期的。
以下是我为 CBLOF 使用不同参数准备的四个场景。请注意,无论更改这些参数,都会引发相同的错误。
我还尝试使用肘法更改集群大小,以在 Kmeans 场景中找到最佳 K。
示例代码:
from pyod.models.cblof import CBLOF
import pyod.utils as ut
from sklearn import cluster
#create some data
data = ut.data.generate_data()[0]
#scenario 1 - use default CBLOF parameters
model = CBLOF()
clusters = model.fit_predict(data)
#scenario 2 - use kmeans as a centroid estimator
n_clusters = 3
kmeans = cluster.KMeans(n_clusters)
model = CBLOF(n_clusters = n_clusters, clustering_estimator = kmeans)
clusters = model.fit_predict(data)
#test if scaling the data makes a difference
data_scaled = (data - data.min())/(data.max()-data.min())
#scenario 3 - no clusters specified, use defaults, scaled data
model = CBLOF()
clusters = model.fit_predict(data_scaled)
#scenario 4 - use kmeans as a centroid estimator, scaled data
n_clusters
kmeans = cluster.KMeans(n_clusters)
model = CBLOF(n_clusters = n_clusters, clustering_estimator = kmeans)
clusters = model.fit_predict(data_scaled)
我使用的所有包都是最新的,我还尝试在我的输入数组中使用不同的数据类型。
为什么会抛出这些错误?
解决方案
是否可以直接在https://github.com/yzhao062/pyod/issues上打开问题报告,以便我们跟踪正在发生的事情?
可能需要一些调查:)
推荐阅读
- machine-learning - 学习损失权重,因为它们是参数
- java - 如何使用 Micronaut 框架在 Redis 中存储 POJO?
- typescript - 打字稿:赋值表达式中类型注释后的问号(可空类型?)
- swift - 我该如何解决这个错误:无法识别的选择器发送到实例(LongPress onUIImageView)
- angular - 如何使用 v10 SDK 将图像上传到 Azure Blob 存储?
- r - 如何计算数据框中两行之间的jaccard相似度
- c# - 如何将字符串数组组件添加到 XML 配置?
- android - 在 FirebaseRecyclerAdapter 中未调用 onCreateViewHolder
- javascript - 大写数组元素Javascript Nodejs
- javascript - Angular js 1 本地视频播放器