我正在尝试使用CBLOF进行PYOD异常检测。我无法使用此算法标记异常。我发现当我运行CBLOF算法时会引发以下错误:
ValueError:缓冲区dtype不匹配,应为“ INT”,但为“ long long”
忽略异常:“ sklearn.cluster._k_means._assign_labels_csr”
ValueError:缓冲区dtype不匹配,应为“ INT”,但为“ 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上打开问题报告,以便我们跟踪发生的情况?
可能需要一些调查:)