⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pointclustering.java

📁 上传试试看 不知道 是不是一定成功的
💻 JAVA
字号:
package k_means;

import java.io.IOException;
import java.util.LinkedList;
import java.util.Random;

public class PointClustering
{
		public PointCluster[] Clu;
		private int k; //the number of the cluster that the user wanted
		private int[][] Data;
		private double[][] Center,CenterOld;//the current and old centers of the clusters
		private LinkedList list;
		private LinkedList<OneData> PointData;
		/**
		 * constrcted function : initilize the attribute
		 * @throws IOException
		 */
		public PointClustering(int k,LinkedList<OneData> _data)
		{
			PointData = new LinkedList<OneData>();
			list = new LinkedList();
			this.k = k;
			this.PointData = _data;
			Clu = new PointCluster[k];

			for (int i = 0; i < Clu.length; i++)
			{
				Clu[i] = new PointCluster();
			}

		    Data = new int[_data.size()][2];

			Center = new double[k][2];
			CenterOld = new double[k][2];

			for (int i = 0; i < _data.size(); i++)
			{

					Data[i][0] = _data.get(i).x;
					Data[i][1] = _data.get(i).y;

			}
		}
		/**
		 * Initlize the centers of all clusters
		 */
		public void initCenter()
		{
			Random r = new Random();
			int temp = 0,random;
			random = r.nextInt(PointData.size());
			Center[temp][0] = Data[random][0];
			Center[temp][1] = Data[random][1];
			temp = temp + 1;
			list.add(random);
			while(temp < k)
			{
				random = r.nextInt(PointData.size());
				if(!list.contains(random))
				{
					Center[temp][0] = Data[random][0];
					Center[temp][1] = Data[random][1];
					//System.out.println(random);
					list.add(random);
					temp = temp + 1;
				}

			}
		}
		/**
		 * the first clustering
		 */
		public void clusteringInit()
		{
			initCenter();
			double Min = Double.MAX_VALUE;
			double temp;
			int col = 0,j;
			for (int i = 0; i < k; i++)
			{
				Clu[i].setCentriod(Center[i]);
				OneData point = new OneData();
				point.x = (int) Center[i][0];
				point.y = (int) Center[i][1];
				Clu[i].getCluData().add(point);
			}
			for (int i = 0; i < Data.length; i++)
			{
				if(!list.contains(i))
				{
					for (j = 0; j < k; j++)
					{
						temp = Distance.calDis(Data[i], Clu[j].getCentriod());

						if(temp < Min)
						{
							Min = temp;
							col = j;
						}
					}
					OneData p = new OneData();
					p.x = Data[i][0];
					p.y = Data[i][1];
					Clu[col].getCluData().add(p);
					Min = Double.MAX_VALUE;
				}
			}

		}
		/**
		 * update the center
		 */
		public void updateCenter()
		{

			for (int i = 0; i < k; i++)
			{
				CenterOld[i] = Center[i];
				Clu[i].setCentroidOld(CenterOld[i]);
				Clu[i].updateCentriod();
				Center[i] = Clu[i].getCentriod();

			}
		}
		/**
		 * Clustering K-Means
		 */
		public void KMeans()
		{
			int h = 0,m;
			double Min = Double.MAX_VALUE;
			double temp;
			int col = 0,j;
			clusteringInit();
			updateCenter();
			boolean IsGood = true;
			for (m = 0; m < k; m++)
			{
				if(Distance.calDisDouble(Clu[m].getCentroidOld(), Clu[m].getCentriod()) > 0.000000000001)
				{
					break;
				}
			}
			if(m == k)
				IsGood = true;
			else
				IsGood = false;
			while(!IsGood)
			{
				h++;
				for (int i = 0; i < k; i++)
				{
				    Clu[i].getCluData().clear();
				}
				for (int i = 0; i < Data.length; i++)
				{
					for (j = 0; j < k; j++)
					{
							temp = Distance.calDis(Data[i], Clu[j].getCentriod());
							if(temp < Min)
							{
								Min = temp;
								col = j;
							}
					}
					OneData p = new OneData();
					p.x = Data[i][0];
					p.y = Data[i][1];
					Clu[col].getCluData().add(p);
					Min = Double.MAX_VALUE;
				}
				updateCenter();
				IsGood = true;
				for (m = 0; m < k; m++)
				{
					if(Distance.calDisDouble(Clu[m].getCentroidOld(), Clu[m].getCentriod()) > 0.000000000001)
					{
						break;
					}
				}
				if(m == k)
					IsGood = true;
				else
					IsGood = false;

			}
			System.out.println("杩

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -