2016-06-20 7 views
0

내가 같은 데이터 세트, 클러스터링 알고리즘을 선택할 수있는 경우 예를 들어 X: 1 2 3 4 5 Y: .9 .91 .92 .93 .94 Z: 20 36 999 211 M. 4000 3456 1 03 D 및 interet/Visualize가 포함 된 데이터 집합을 클러스터하는 방법은 무엇입니까?

을 줄 수 있습니다? 또한 클러스터링 후 결과를 해석하는 방법은 무엇입니까? 의미 : 4D 데이터 세트를 클러스터에 공급하는 방법.

플롯이 가능한 2D 용 인터넷에서 DBSCAN을 사용할 수 있습니다. 내 데이터 세트가 4 D이고 비논리적 다르므로 파이썬을 사용하는 경우 ... 나는 알고리즘

`

import pdb 
import matplotlib.pyplot as plt 
from numpy.random import rand 
from numpy import square, sqrt 
def regionQuery(P, eps, D): 
    neighbourPts = [] 
    for point in D: 
     #print point   
     if sqrt(square(P[1] - point[1]) + square(P[2] - point[2]))<eps: 
      neighbourPts.append(point) 
    return neighbourPts 
def DBSCAN(D, eps, MinPts): 
    noise = [] 
    visited = [] 
    C = [] 
    c_n = -1 
    for point in D: 
     visited.append(point) #marking point as visited 
    # print point  
     neighbourPts = regionQuery(point, eps, D) 
     if len(neighbourPts) < MinPts: 
      noise.append(point) 
     else: 
      C.append([])    
      c_n+=1 
      expandCluster(point, neighbourPts, C, c_n,eps, MinPts, D, visited) 
    print("no. of clusters: " , len(C) ) 
    print("length of noise:", len(noise)) 
    for cluster in C: 
     col =[rand(1),rand(1),rand(1)]  
     #print(cluster)  
     plt.scatter([i[1] for i in cluster],[i[2] for i in cluster],color=col) 
    plt.show() 
def expandCluster(P, neighbourPts, C, c_n,eps, MinPts, D, visited): 
    C[c_n].append(P) 
    for point in neighbourPts: 
     if point not in visited: 
      visited.append(point) 
      neighbourPts_2 = regionQuery(point, eps, D) 
      if len(neighbourPts_2) >= MinPts: 
       neighbourPts += neighbourPts_2 
     if point not in (i for i in C): 
      C[c_n].append(point) 
eps =20#input("enter eps") 
x=200*rand(10) 
y=200*rand(10) 
l=[] 
for i in range(10): 
    l.append([i,x[i],y[i]]) 
#pdb.set_trace() 
DBSCAN(l,eps,1)` 
+0

어떤 언어를 사용하고 있습니까? – geekoverdose

답변

0

이 먹이를 두려워 :

접근 1 :

from sklearn.metrics import confusion_matrix as cm 
import pandas as pd 

y_test = [1, 0, 0] 
y_pred = [1, 0, 0] 
confusion_matrix=cm(y_test, y_pred) 

list1 = ["Actual 0", "Actual 1"] 
list2 = ["Predicted 0", "Predicted 1"] 
pd.DataFrame(confusion_matrix, list1,list2) 

enter image description here

접근법 2 : sklearn.metrics.confusion_matrix은 숫자 행렬을 제공하지만

, 당신은 사용 '보고서'를 생성 할 수있는 사항은 다음과 같습니다

Predicted 0 1 2 All 
True     
0   3 0 0 3 
1   0 1 2 3 
2   2 1 3 6 
All  5 2 5 12 

: 결과

import pandas as pd 
y_true = pd.Series([2, 0, 2, 2, 0, 1, 1, 2, 2, 0, 1, 2]) 
y_pred = pd.Series([0, 0, 2, 1, 0, 2, 1, 0, 2, 0, 2, 2]) 

pd.crosstab(y_true, y_pred, rownames=['True'], colnames=['Predicted'], margins=True) 

이렇게하면 다음을 볼 수 있습니다.

  1. 대각선 요소는
  2. 대각선을 벗어난 요소는 잘못된 분류를 제공합니다. 예를 들어 클래스 2의 2 개가 0으로 잘못 분류 된 경우, 둘 중 하나는 잘못 분류 된 것입니다. 클래스 0, 2로 잘못 분류 된 등
  3. "모든"합계
이 방법은 또한 텍스트 레이블 작동

및 대한에서 모두 y_truey_pred의 각 클래스에 대한 분류의 총 수, 데이터 세트의 다수의 샘플을 확장하여 백분율 보고서를 제공 할 수 있습니다.