java kmeans是什么,让我们一起了解一下?
k-means是一种迭代求解的聚类分析算法,其步骤是,预将数据分为K组,则随机选取K个对象作为初始的聚类中心,然后计算每个对象与各个种子聚类中心之间的距离,把每个对象分配给距离它最近的聚类中心。
K-means算法是怎样的?
1、选取K个点作为初始质心。
2、对每个样本分别计算到K个质心的相似度或距离,将该样本划分到相似度最高或距离最短的质心所在类。
3、对该轮聚类结果,计算每一个类别的质心,新的质心作为下一轮的质心。
4、判断算法是否满足终止条件,满足终止条件结束,否则继续第2、3、4步。
java如何实现kmeans?
初始化:
1、先把数据集中的点的坐标读入到一个二维数组中。
2、并选择前面的三个点作为初始的中心点。
迭代部分:
1、对每个点分别计算到三个中心点的距离,并根据最小的距离给点分类。
2、对每一类的所有点的横纵坐标计算均值生成新的中心点保存。
具体代码示例如下:
import java.io.*;
import org.apache.hadoop.conf.Configuration;
public class kmeans1
{
static double [][] cluster={{1,1},{2,2},{3,3}};
static double [][] point =new double[2000][2];
static int []kind=new int[2000];
static int count=0;
static int []Count=new int[3];
public static void readfile() throws IOException
{
BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream("/usr/local/hadoop/data.txt"),"GBK"));
String str = null;
while ((str = in.readLine()) != null) {
//System.out.println(str);
//写入相关文件
//out.write(str);
//out.newLine();
double point_x=Double.valueOf(str.split(",")[0]);
double point_y=Double.valueOf(str.split(",")[1]);
point[count][0]=point_x;
point[count][1]=point_y;
if(count<3)
{
cluster[count][0]=point_x;
cluster[count][1]=point_y;
}
count++;
}
//清楚缓存
//out.flush();
//关闭流
in.close();
//out.close();
}
public static void iter()
{
for(int i=0;i<20;i++)
{
for(int j=0;j<2000;j++)
{
double distance=1000000000.0;
for(int k=0;k<3;k++)
{
double temp=Math.pow(point[j][0]-cluster[k][0], 2)+Math.pow(point[j][1]-cluster[k][1], 2);
if(temp以上就是小编今天的分享了,希望可以帮助到大家。