资源简介

使用纯java实现KMeans模拟算法代码,随即撒点,计算K个聚类,使用了javaFX绘图工具包,结果有散点图的显示

资源截图

代码片段和文件信息

package kmeans;
import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Scene;
import javafx.scene.chart.CategoryAxis;
import javafx.scene.chart.NumberAxis;
import javafx.scene.chart.ScatterChart;
import javafx.scene.chart.XYChart;
import javafx.scene.chart.XYChart.Series;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

import java.util.ArrayList;
import java.util.Vector;

import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Scene;
import javafx.scene.chart.CategoryAxis;
import javafx.scene.chart.NumberAxis;
import javafx.scene.chart.ScatterChart;
import javafx.scene.chart.XYChart;
import javafx.scene.chart.XYChart.Series;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
//随机选取若干个聚类,计算所有点到这些聚类的距离,取最小值属于该类
//分类后将每个类所有点取均值,算该类的中心点,随后对所有点再次计算欧氏距离,再次分类
//迭代到每个中心点不变为止
//生成指定个数和维数的随机向量
public class KMeans extends Application{
static ArrayList> vectorList ;//向量组
static Vector center1 ;//中心1
static Vector center2 ;//中心2
static ArrayList>  cluster1;//聚类1
static ArrayList>  cluster2;//聚类2

static double threshold = 0.01;
public void showVectorGroup(ArrayList> vectorList int vectorNum int dim) {
for(int i=0;i for(int j=0;j System.out.print(vectorList.get(i).get(j)+“ “);
}
System.out.println();
}
}

public static ArrayList>  generateVectorGroup(int vectorNum int dim) {
ArrayList> vectorList = new ArrayList>();
//随机填充向量组
for(int i=0;i Vector vTemp = new Vector<>();
for(int j=0;j double randomTemp = Math.random()*100-30;
vTemp.add((randomTemp)<0?(randomTemp+Math.random()*40):(randomTemp));
}vectorList.add(vTemp);//讲向量加入向量组中
}
//增加偏置因子让数据更好的显示类别
for(int i=0;i Vector vTemp = new Vector<>();
for(int j=0;j double randomTemp = Math.random()*100+30;
vTemp.add((randomTemp)>100?(randomTemp-Math.random()*40):(randomTemp));
}vectorList.add(vTemp);//讲向量加入向量组中
}
return vectorList;
}

//计算向量的欧式距离
public static double calculationVectorDistance(Vector v1Vector v2 int dim) {
double distance = 0.0;
for(int i=0;i distance += Math.pow((v1.get(i)-v2.get(i))2);
}
return Math.sqrt(distance);
}

//聚类方法
public static void doCluster() {

}

//计算聚类的中心
public static Vector computeCenter(ArrayList> cluster int dim){
Vector center = new Vector<>();
for(int i=0;i double calculate = 0.0;
for(int j=0;j calculate+=cluster.get(j).get(i);
}
c

评论

共有 条评论