如何解释K-Means集群

时间:2015-12-09 06:32:00

标签: java apache-spark k-means

我使用Apache Spark为K-Means集群编写了java代码。 我想分析网络数据。我使用一些训练数据创建了K-Means模型。 k = 5,迭代= 50。

现在我希望使用来自群集中心的记录距离来检测异常记录。如果它远离中心那么它就是一个异常记录。

此外,我想了解每个群集存储的数据类型。举一个例子---在电影聚类的情况下,检测集群中电影中具有共同类型或主题的集群

我无法解释群集。我正在使用一条糟糕的记录和一条良好的预测记录,但有时好的和坏的记录都属于同一群集。

错误记录表示该字段的URI字段包含类似HelloWorld /../../ WEB-INF / web.xml的值。

我从K-Means模型获得了所有集群中心的数组。没有api可以获得特定集群的集群中心。我正在计算所有集群的输入矢量/记录的距离,但我无法获得特定集群的集群中心或存在该记录的位置。

这是我的代码,

model.save(sparkContext, KM_MODEL_PATH);
Vector[] clusterCenters = model.clusterCenters();

//Input for prediction is <Vector> testData


//Predict data
System.out.println("Test Data cluster ----- "
        + model.predict(vector) + " k ->> " + model.k());

//Calculate distance of a input record from each cluster center
for (Vector clusterCenter : clusterCenters) {
    System.out.println(" Distance "
            + computeDistance(clusterCenter.toArray(),
                    vector.toArray()));
}



//Function for computing distance between input record and center of a cluster
public double computeDistance(double[] clusterCenters, double[] vector) {
        org.apache.spark.mllib.linalg.DenseVector dV1 = new org.apache.spark.mllib.linalg.DenseVector(
                clusterCenters);
        org.apache.spark.mllib.linalg.DenseVector dV2 = new org.apache.spark.mllib.linalg.DenseVector(
                vector);

        return org.apache.spark.mllib.linalg.Vectors.sqdist(dV1, dV2);
}

在单独的文件中,

public class SimpleInjectorServiceStackAdapter : IContainerAdapter
{
    private readonly Container container;

    public SimpleInjectorServiceStackAdapter(Container container) {
        this.container = container;
    }

    public T Resolve<T>() {
        return (T)this.container.GetInstance(typeof(T));
    }

    public T TryResolve<T>() {
        var registration = this.container.GetRegistration(typeof(T));
        return registration == null ? default(T) : (T)registration.GetInstance();
    }
}

0 个答案:

没有答案