📄 cluster.java
字号:
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
public class Cluster
{
public void readTxtToArray(float a[][]) throws IOException
{
File f = new File("iris.txt");
InputStream input = new FileInputStream(f);
BufferedReader b = new BufferedReader(new InputStreamReader(input));
StringBuffer buffer = new StringBuffer();
String value = b.readLine();
while(value != null)
{
buffer.append(" "+value);
value = b.readLine();
}
String[] temp = buffer.toString().replaceFirst(" ","").split("\\s+");
float[] number = new float[temp.length];
for(int i=0;i<temp.length;i++)
{
try
{
number[i] = Float.parseFloat(temp[i]);
//System.out.print(number[i]+" ");
}
catch(Exception e)
{
System.out.println("文件中存在非数字字符!");
}
}
int x=0;
for(int j=0;j<150;j++)
for(int k=0;k<4;k++)
{
a[j][k]=number[x];
x++;
}
}
public int seccenter(float a[][]) /*寻找第二个聚类中心*/
{
double max=0.0;
double dis;
int index=0;
for(int k=0;k<150;k++)
{
dis=(a[k][0]-a[0][0])*(a[k][0]-a[0][0])+(a[k][1]-a[0][1])*(a[k][1]-a[0][1])+(a[k][2]-a[0][2])*(a[k][2]-a[0][2])+(a[k][3]-a[0][3])*(a[k][3]-a[0][3]);
if(dis>max)
{
max=dis;
index=k;
}
}
return index;
}
public int thicenter(float a[][],int c) /*寻找第三个聚类中心*/
{
double max=0.0;
double dis;
double dis1,dis2;
int index=0;
for(int k=0;k<150;k++)
{
dis1=(a[k][0]-a[0][0])*(a[k][0]-a[0][0])+(a[k][1]-a[0][1])*(a[k][1]-a[0][1])+(a[k][2]-a[0][2])*(a[k][2]-a[0][2])+(a[k][3]-a[0][3])*(a[k][3]-a[0][3]);
dis2=(a[k][0]-a[c][0])*(a[k][0]-a[c][0])+(a[k][1]-a[c][1])*(a[k][1]-a[c][1])+(a[k][2]-a[c][2])*(a[k][2]-a[c][2])+(a[k][3]-a[c][3])*(a[k][3]-a[c][3]);
if(dis1<dis2)
dis=dis1;
else
dis=dis2;
if(dis>max)
{
max=dis;
index=k;
}
}
return index;
}
public void julei(float a[][],int c1,int c2,int c3) /*把样本聚类*/
{
double dis1,dis2,dis3;
for(int k=0;k<150;k++)
{
dis1=(a[k][0]-a[c1][0])*(a[k][0]-a[c1][0])+(a[k][1]-a[c1][1])*(a[k][1]-a[c1][1])+(a[k][2]-a[c1][2])*(a[k][2]-a[c1][2])+(a[k][3]-a[c1][3])*(a[k][3]-a[c1][3]);
dis2=(a[k][0]-a[c2][0])*(a[k][0]-a[c2][0])+(a[k][1]-a[c2][1])*(a[k][1]-a[c2][1])+(a[k][2]-a[c2][2])*(a[k][2]-a[c2][2])+(a[k][3]-a[c2][3])*(a[k][3]-a[c2][3]);
dis3=(a[k][0]-a[c3][0])*(a[k][0]-a[c3][0])+(a[k][1]-a[c3][1])*(a[k][1]-a[c3][1])+(a[k][2]-a[c3][2])*(a[k][2]-a[c3][2])+(a[k][3]-a[c3][3])*(a[k][3]-a[c3][3]);
if(dis1<=dis2)
{
if(dis1<=dis3)
System.out.printf("The line %d belongs to category 1.\n",k);
else
System.out.printf("The line %d belongs to category 3.\n",k);
}
else
{
if(dis2<=dis3)
System.out.printf("The line %d belongs to category 2.\n",k);
else
System.out.printf("The line %d belongs to category 3.\n",k);
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -