Python异常检测(Pyod)未收敛

Python异常检测(Pyod)未收敛,python,anomaly-detection,Python,Anomaly Detection,我正在尝试使用CBLOF进行异常检测。我无法使用此算法标记异常。我发现,当我运行CBLOF算法时,它会抛出以下错误: ValueError:缓冲区数据类型不匹配,应为“INT”,但为“long” “sklearn.cluster.\u k\u表示.\u分配\u标签\u csr”中忽略异常 ValueError:缓冲区数据类型不匹配,应为“INT”,但为“long” 其结果是: ValueError:无法形成有效的群集分隔。请更改n_群集或更改群集方法 CBLOF算法似乎依赖于sklearn.cl

我正在尝试使用CBLOF进行异常检测。我无法使用此算法标记异常。我发现,当我运行CBLOF算法时,它会抛出以下错误:

ValueError:缓冲区数据类型不匹配,应为“INT”,但为“long”

“sklearn.cluster.\u k\u表示.\u分配\u标签\u csr”中忽略异常 ValueError:缓冲区数据类型不匹配,应为“INT”,但为“long”

其结果是:

ValueError:无法形成有效的群集分隔。请更改n_群集或更改群集方法

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)
我使用的所有软件包都是最新的,我还尝试在输入数组中使用不同的数据类型


为什么会抛出这些错误?

是否可以直接打开问题报告,以便跟踪发生的情况


可能需要进行一些调查:)

问题是由于sklearn和PyOD未更新

您是否将您的
数据
与其
pyod.utils.data.generate_data()
进行了比较?你能在没有错误的情况下运行他们的示例代码吗?我已经更新了代码以使用你的建议。同样的错误仍然存在。ThanksI刚刚在存储库上打开了一个问题。