2014-11-07 2 views
5

Weka를 사용하여 데이터 집합에서 K-Means 클러스터링을 수행하면서 서로 다른 가중치가 서로 다른 속성에 미치는 영향을 검사하려고합니다.Weka는 항상 서로 다른 데이터에 대해 동일한 클러스터를 생성합니다.

그러나 각 속성의 가중치를 조정하면 클러스터링의 차이가 나타나지 않습니다.

//Initialize file readers 
... 
Instances dataSet = readDataFile(dataReader); 
double[][] modifiers = readNormalizationFile(normReader, dataSet.numAttributes()); 
normalize(dataSet, modifiers); 
SimpleKMeans kMeans = new SimpleKMeans(); 
kMeans.setPreserveInstancesOrder(true); 
int[] clusters = null; 
try 
{ 
    System.out.println(kMeans.getSeed()); 
    if(distMet != 0) 
     kMeans.setDistanceFunction(new ManhattanDistance(dataSet)); 
    kMeans.setNumClusters(k); 
    kMeans.buildClusterer(dataSet); 

    clusters = kMeans.getAssignments(); 
} 
//Print clusters 

"수정 자"배열의 첫 번째 차원은 각 속성에 해당하며 각 요소에는 두 개의 값이 있습니다. 첫 번째는 속성 값에서 뺀 다음 결과를 두 번째 값으로 나눕니다.

정규화는 다음과 같이 진행됩니다

public static void normalize(Instances dataSet, double[][] modifiers) 
{ 
    for(int i = 0; i < dataSet.numInstances(); i++) 
    { 
     Instance currInst = dataSet.instance(i); 
     double[] values = currInst.toDoubleArray(); 
     for(int j = 0; j < values.length; j++) 
     { 
      currInst.setValue(j, (values[j] - modifiers[j][0])/modifiers[j][1]); 
     } 
    } 
} 

내 기대 번째 정상화의 증가는 클러스터링에 특정 속성의 중요성을 절감하고, 따라서 클러스터가 할당되는 방식을 변경,하지만이없는 것입니다해야한다는 것입니다 나는 관찰하고있다. 내 디버거가 올바르게 표준화 된 값이 클러스터러로 전송되고 있음을 보여 주지만 Weka가 나 대신 엉망이된다고 생각합니다.

Weka의 K-Means를 올바르게 사용 했습니까? 아니면 중요한 것을 버렸습니까?

+0

Weka는 데이터를 자동으로 표준화하여 가중치를 파괴하는 경우가 있습니다. ELKI를 대신 사용해보십시오. –

+1

Weka가 나를 위해 데이터를 표준화하는 것은 사실이지만 모든 코드를 스크랩하고 다른 프레임 워크로 다시 시작할 시간이 없습니다. 아래 답변이 말했듯이, Weka에게 정상화시키지 말라고 말하는 것이 훨씬 더 의미가 있습니다. – MichaelPlante

답변

2

값이 자동으로 값을 정규화 할 수있는 이라는 거리 측정 값 (예 : 유클리드 및 맨하탄)이 있습니다. 기본적으로 이것은 활성화되어 normalize 함수 호출에서 수행 된 모든 작업을 실행 취소 할 수 있습니다.

임의의 데이터 세트에 대한 테스트를 실행 한 다음 두 번째 시도에서 속성 데이터 중 하나를 조작하면 두 클러스터가 동일하게 끝납니다. 값을 true로 설정하면 클러스터가 달라 지므로 데이터 세트에 인스턴스가 할당됩니다.

희망이 도움이됩니다!

+0

고마워요! 메모와 마찬가지로, 내 프로그램은 기본적으로 유클리드 거리를 사용하고 명령 행 옵션에서 지정하는 경우 맨하탄 만 사용하지만 유클리드는 동일한 dontNormalize 옵션을 사용하므로 솔루션이 제대로 작동합니다. – MichaelPlante

+0

상황을보다 잘 반영하기 위해 답변을 업데이트했습니다. 감사. –

관련 문제