더북(TheBook)

최종 코드

다음은 지금까지 설명한 WekaCluster의 전체 코드로 바로 실행할 수 있다.


import java.util.Random;
 
import weka.clusterers.SimpleKMeans;
import weka.core.Instance;
import weka.core.Instances;
import weka.core.converters.ConverterUtils.DataSource;
public class WekaCluster {
 
    public WekaCluster(String filepath) {
        try {
            Instances data = DataSource.read(filepath);
            int clusters = calculateRuleOfThumb(data.numInstances());
            System.out.println(“Rule of Thumb Clusters = “ + clusters);
            SimpleKMeans kMeans = new SimpleKMeans();
            kMeans.setNumClusters(clusters);
            kMeans.setSeed(42);
            kMeans.buildClusterer(data);
            showCentroids(kMeans, data);
            showInstanceInCluster(kMeans, data);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
 
    public int calculateRuleOfThumb(int rows) {
        return (int)Math.sqrt(rows/2);
    }
 
    public void showCentroids(SimpleKMeans kMeans, Instances data) {
        Instances centroids = kMeans.getClusterCentroids();
        for (int i = 0; i < centroids.numInstances(); i++) {
            System.out.println(“Centroid: “ + i + “: “ + centroids.instance(i));
        }
    }
 
    public void showInstanceInCluster(SimpleKMeans kMeans, Instances data) {
        try {
            for (int i = 0; i < data.numInstances(); i++) {
                System.out.println(“Instance “ + i + ” is in cluster “
                        + kMeans.clusterInstance(data.instance(i)));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
 
    public static void main(String[] args) {
        // .arff 파일 위치와 원하는 클러스터의 수를 전달한다.
        WekaCluster wc = new WekaCluster(”/Users/Jason/kmeandata.arff”);
    }
 
}

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.