我使用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();
}
}