我正在研究ISCX Dataset 2012以研究异常检测。我已经使用适用于Python的Weka库应用K均值聚类。我们如何分析Python中的集群功能来制定异常检测模式?
虽然它打印群集的信息,
- 它不允许我保存在某个变量聚类功能(平均每个功能),
- 也没有给我任何有关哪一个数组进入哪个集群。
我也搜索了其他库来执行聚类,但找不到解决方案。是否有其他选择来进行聚类后形成分析?
我正在研究ISCX Dataset 2012以研究异常检测。我已经使用适用于Python的Weka库应用K均值聚类。我们如何分析Python中的集群功能来制定异常检测模式?
虽然它打印群集的信息,
我也搜索了其他库来执行聚类,但找不到解决方案。是否有其他选择来进行聚类后形成分析?
我从来没有使用weka库,尽管我认为weka中有一种方法。如果您愿意使用sklearn k-means,它非常易于使用。
import numpy as np
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
# create a dataset
ds = np.random.random((50, 2))
ds_anomaly = np.asarray([[-1,1], [1,-1]])
ds = np.concatenate((ds,ds_anomaly))
一旦k均值适合被调用,您的聚类中心(2在这种情况下),可以从kmeans.cluster_centers_检索。分配给数据集的标签可以从kmeans.labels_中检索。
kmeans = KMeans(n_clusters=2)
kmeans.fit(ds)
# appropriate cluster labels of points in ds
data_labels = kmeans.labels_
# coordinates of cluster centers
cluster_centers = kmeans.cluster_centers_
colors = ['b', 'g']
plt.scatter(ds[:, 0], ds[:, 1],
c=[colors[i] for i in data_labels], s=1)
plt.scatter(cluster_centers[:, 0], cluster_centers[:, 1], color = "k")
plt.show()
或者你可以做某种数据分析并得到异常。以下是使用np.percentile查找不同值的非常基本的示例。你可以改变异常函数(如果你想得到好结果的话)应该变成一个更复杂的函数。
def anomalies(data):
perc = np.percentile(data, 99)
return data[np.where(data>perc)[0]]
for idx, c in enumerate(kmeans.cluster_centers_):
c_anomaly = anomalies(ds[np.where(kmeans.labels_==idx)])
print(c_anomaly)
plt.scatter(c_anomaly[:, 0], c_anomaly[:, 1], c="r", marker="o")
plt.show()
而结果是([[-1, 1], [1, -1]])
值与预期的一样;
免责声明:根据不同的初始化,您的集群中心可以endup靠近你的异常。我建议你用另一种算法执行异常检测,或者在选择k值和群集初始化模式时要小心。
嗨,欢迎来到SO!请参阅[如何提问](https://stackoverflow.com/help/how-to-ask)以改善您的问题并避免被解雇为脱离主题。 – rll