2017-03-15 5 views
0

나는 ISCX Dataset 2012에서 이상 탐지를 연구 중이다. 나는 Weka Libraries for Python을 사용하여 K-means 클러스터링을 적용했습니다.Python에서 비정상 탐지를위한 패턴을 공식화하기 위해 클러스터 기능을 어떻게 분석합니까?

그것은 나를 어떤 변수에 클러스터 기능 (각 기능에 대한 평균)을 저장할 수 없습니다

  1. 는 클러스터 정보를 출력하지만,

  2. 않으며 나에게 어떤 정보를 제공 않는 튜플에 대한 어떤 클러스터에 들어간다.

다른 라이브러리를 검색하여 클러스터링을 수행했지만 해결책을 찾을 수 없습니다. 사후 클러스터 형성 분석을 수행 할 수있는 대안이 있습니까?

+0

안녕하세요, SO! 질문을 개선하고 논픽션으로 기각되는 것을 피하기 위해 [How to ask] (https://stackoverflow.com/help/how-to-ask)를 참조하십시오. – rll

답변

1

나는 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)) 

일단 클러스터 센터 (이 경우 2) kmeans.cluster_centers_에서 검색 할 수 있습니다, 맞춤를 호출 kmeans. 데이터 집합에 할당 된 레이블은 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() 

결과를 플롯하고 이형을 직접 찾을 수 있습니다. enter image description here

또는 데이터 분석을 수행하고 예외를 얻을 수 있습니다. 다음은 np.percentile을 사용하여 다른 값을 찾는 아주 기본적인 예제입니다. 보다 복잡한 기능으로 변칙 기능 (좋은 결과가 필요한 경우)을 변경할 수 있습니다. 예상대로 결과 값 ([[-1, 1], [1, -1]])

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() 

이고; enter image description here


면책 조항 : 초기화에 따라 클러스터 센터는 이상 가까이 endup 수 있습니다. 다른 알고리즘을 사용하여 이상 탐지를 수행하거나 k 값 및 클러스터 초기화 패턴을 선택할 때주의해야합니다.