/*
* 创建日期 2006-5-2
*
* TODO 要更改此生成的文件的模板,请转至
* 窗口 - 首选项 - Java - 代码样式 - 代码模板
*/
//伪代码如下:
//for k=1,…n,令R(k)为从D中随机选取的一个点;
//while在聚类Ck中有变化发生 do
//形成聚类;
//for k=1,….,n do
//Ck={X属于D|D(Rk,x)≤D(Rj,x) 对所有j=1…..k,j≠k};
//end;
//计算新的聚类中心;
//for k=1,….,n do
//Rk =Ck内点的均值向量;
//end;
//end;package lijinlei;import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.StringTokenizer;/**
* @author Boss
*
* TODO 要更改此生成的类型注释的模板,请转至
* 窗口 - 首选项 - Java - 代码样式 - 代码模板
*/
public class cc {
private int k = 0, n = 0;
private float temp = 0;
private float min, m; private float[][] a = new float[150][4];
private float[][] b = new float[3][4];
private float[][] c = new float[3][4];
private float[][] g = new float[3][4];
private float d[] = new float[3];
private int T[] = new int[150]; private void cluster() {
int i = 0;
int s = 0;
int t = 0;
int r, y,j = 0; // 首次聚类
System.out.println("** b[t][s]**");
for (t = 0; t < 3; t++) {
for (s = 0; s < 4; s++) {
System.out.print("** " + b[t][s]);
}
System.out.println("\n");
} for (i = 0; i < 150; i++) {
for (t = 0; t < 3; t++) {
d[t] = (a[i][0] - b[t][0]) * (a[i][0] - b[t][0]) +
(a[i][1] - b[t][1]) * (a[i][1] - b[t][1]) +
(a[i][2] - b[t][2]) * (a[i][2] - b[t][2]) +
(a[i][3] - b[t][3]) * (a[i][3] - b[t][3]);
}
min = d[0];
m = Math.min(d[1], d[2]);
r = d[1] > d[2] ? 2 : 1;
if (d[0] > m) {
k = r;
}
else {
k = 0;
}
System.out.println("%%" + i + " " + k);
T[i] = k;
}
/*for (t = 0; t < 3; t++)
{
for (s = 0; s < 4; s++)
{g[t][s]=0;}
}*/
//计算初始聚类中心
for (t = 0; t < 3; t++)
{
y = 0;
for (s = 0; s < 4; s++)
{
y = 0;
g[t][s]=0;
for (i = 0; i < 150; i++)
{
if (T[i] == t)
{
y++;
g[t][s] += a[i][s];
}
}
c[t][s] = g[t][s] / y;
System.out.print("***" + c[t][s]);
}
System.out.println("\n");
} } public static void main(String[] args) { try
{
int i = 0, j = 0, t = 0, s = 0;
FileReader fs = new FileReader("./test.txt");
BufferedReader br = new BufferedReader(fs);
String record = new String();
cc clu = new cc();
while ( (record = br.readLine()) != null)
{
StringTokenizer st = new StringTokenizer(record);
j = 0;
while (st.hasMoreTokens()) //测试此 tokenizer 的字符串中是否还有更多的可用标记。
{
clu.a[i][j] = Float.parseFloat(st.nextToken()); //返回此 string tokenizer 的下一个标记。
//System.out.print(" "+a[i][j]);
j++;
}
i++;
} //获取聚类中心
int r;
for (t = 0; t < 3; t++) {
r = (int) (Math.random() * 149);
for (s = 0; s < 4; s++) {
clu.b[t][s] = clu.a[r][s];
}
}
clu.cluster(); //递归迭代,当前后聚类中心之差小于0.001时结束
// float temp[][] = new float[3][4];
int n=0;
do
{
for (i = 0; i < 3; i++)
{
for (j = 0; j < 4; j++)
clu.b[i][j] = clu.c[i][j];
}
clu.cluster();
n++;
}while(n>20);第一次运行到}while(n>20); 这里的时候就跳出了,根本就没有达到n<20的条件,不知道怎么回事?
}
catch (FileNotFoundException e) {
e.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
}
}
}
/////////////////////////////////////////////////////////////////////////////////////////
do
{
for (i = 0; i < 3; i++)
{
for (j = 0; j < 4; j++)
clu.b[i][j] = clu.c[i][j];
}
clu.cluster();
n++;
}while(n>20);第一次运行到}while(n>20); 这里的时候就跳出了,根本就没有达到n<20的条件,不知道怎么回事?
/////////////////////////////////////////////////////////////////////////////////////////
test.txt内容为:
5.1 3.5 1.4 0.2
4.9 3.0 1.4 0.2
4.7 3.2 1.3 0.2
4.6 3.1 1.5 0.2
5.0 3.6 1.4 0.2
5.4 3.9 1.7 0.4
4.6 3.4 1.4 0.3
5.0 3.4 1.5 0.2
4.4 2.9 1.4 0.2
4.9 3.1 1.5 0.1
5.4 3.7 1.5 0.2
4.8 3.4 1.6 0.2
4.8 3.0 1.4 0.1
4.3 3.0 1.1 0.1
5.8 4.0 1.2 0.2
5.7 4.4 1.5 0.4
5.4 3.9 1.3 0.4
5.1 3.5 1.4 0.3
5.7 3.8 1.7 0.3
5.1 3.8 1.5 0.3
5.4 3.4 1.7 0.2
5.1 3.7 1.5 0.4
4.6 3.6 1.0 0.2
5.1 3.3 1.7 0.5
4.8 3.4 1.9 0.2
5.0 3.0 1.6 0.2
5.0 3.4 1.6 0.4
5.2 3.5 1.5 0.2
5.2 3.4 1.4 0.2
4.7 3.2 1.6 0.2
4.8 3.1 1.6 0.2
5.4 3.4 1.5 0.4
5.2 4.1 1.5 0.1
5.5 4.2 1.4 0.2
4.9 3.1 1.5 0.1
5.0 3.2 1.2 0.2
5.5 3.5 1.3 0.2
4.9 3.1 1.5 0.1
4.4 3.0 1.3 0.2
5.1 3.4 1.5 0.2
5.0 3.5 1.3 0.3
4.5 2.3 1.3 0.3
4.4 3.2 1.3 0.2
5.0 3.5 1.6 0.6
5.1 3.8 1.9 0.4
4.8 3.0 1.4 0.3
5.1 3.8 1.6 0.2
4.6 3.2 1.4 0.2
5.3 3.7 1.5 0.2
5.0 3.3 1.4 0.2
7.0 3.2 4.7 1.4
6.4 3.2 4.5 1.5
6.9 3.1 4.9 1.5
5.5 2.3 4.0 1.3
6.5 2.8 4.6 1.5
5.7 2.8 4.5 1.3
6.3 3.3 4.7 1.6
4.9 2.4 3.3 1.0
6.6 2.9 4.6 1.3
5.2 2.7 3.9 1.4
5.0 2.0 3.5 1.0
5.9 3.0 4.2 1.5
6.0 2.2 4.0 1.0
6.1 2.9 4.7 1.4
5.6 2.9 3.6 1.3
6.7 3.1 4.4 1.4
5.6 3.0 4.5 1.5
5.8 2.7 4.1 1.0
6.2 2.2 4.5 1.5
5.6 2.5 3.9 1.1
5.9 3.2 4.8 1.8
6.1 2.8 4.0 1.3
6.3 2.5 4.9 1.5
6.1 2.8 4.7 1.2
6.4 2.9 4.3 1.3
6.6 3.0 4.4 1.4
6.8 2.8 4.8 1.4
6.7 3.0 5.0 1.7
6.0 2.9 4.5 1.5
5.7 2.6 3.5 1.0
5.5 2.4 3.8 1.1
5.5 2.4 3.7 1.0
5.8 2.7 3.9 1.2
6.0 2.7 5.1 1.6
5.4 3.0 4.5 1.5
6.0 3.4 4.5 1.6
6.7 3.1 4.7 1.5
6.3 2.3 4.4 1.3
5.6 3.0 4.1 1.3
5.5 2.5 4.0 1.3
5.5 2.6 4.4 1.2
6.1 3.0 4.6 1.4
5.8 2.6 4.0 1.2
5.0 2.3 3.3 1.0
5.6 2.7 4.2 1.3
5.7 3.0 4.2 1.2
5.7 2.9 4.2 1.3
6.2 2.9 4.3 1.3
5.1 2.5 3.0 1.1
5.7 2.8 4.1 1.3
6.3 3.3 6.0 2.5
5.8 2.7 5.1 1.9
7.1 3.0 5.9 2.1
6.3 2.9 5.6 1.8
6.5 3.0 5.8 2.2
7.6 3.0 6.6 2.1
4.9 2.5 4.5 1.7
7.3 2.9 6.3 1.8
6.7 2.5 5.8 1.8
7.2 3.6 6.1 2.5
6.5 3.2 5.1 2.0
6.4 2.7 5.3 1.9
6.8 3.0 5.5 2.1
5.7 2.5 5.0 2.0
5.8 2.8 5.1 2.4
6.4 3.2 5.3 2.3
6.5 3.0 5.5 1.8
7.7 3.8 6.7 2.2
7.7 2.6 6.9 2.3
6.0 2.2 5.0 1.5
6.9 3.2 5.7 2.3
5.6 2.8 4.9 2.0
7.7 2.8 6.7 2.0
6.3 2.7 4.9 1.8
6.7 3.3 5.7 2.1
7.2 3.2 6.0 1.8
6.2 2.8 4.8 1.8
6.1 3.0 4.9 1.8
6.4 2.8 5.6 2.1
7.2 3.0 5.8 1.6
7.4 2.8 6.1 1.9
7.9 3.8 6.4 2.0
6.4 2.8 5.6 2.2
6.3 2.8 5.1 1.5
6.1 2.6 5.6 1.4
7.7 3.0 6.1 2.3
6.3 3.4 5.6 2.4
6.4 3.1 5.5 1.8
6.0 3.0 4.8 1.8
6.9 3.1 5.4 2.1
6.7 3.1 5.6 2.4
6.9 3.1 5.1 2.3
5.8 2.7 5.1 1.9
6.8 3.2 5.9 2.3
6.7 3.3 5.7 2.5
6.7 3.0 5.2 2.3
6.3 2.5 5.0 1.9
6.5 3.0 5.2 2.0
6.2 3.4 5.4 2.3
5.9 3.0 5.1 1.8
* 创建日期 2006-5-2
*
* TODO 要更改此生成的文件的模板,请转至
* 窗口 - 首选项 - Java - 代码样式 - 代码模板
*/
//伪代码如下:
//for k=1,…n,令R(k)为从D中随机选取的一个点;
//while在聚类Ck中有变化发生 do
//形成聚类;
//for k=1,….,n do
//Ck={X属于D|D(Rk,x)≤D(Rj,x) 对所有j=1…..k,j≠k};
//end;
//计算新的聚类中心;
//for k=1,….,n do
//Rk =Ck内点的均值向量;
//end;
//end;package lijinlei;import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.StringTokenizer;/**
* @author Boss
*
* TODO 要更改此生成的类型注释的模板,请转至
* 窗口 - 首选项 - Java - 代码样式 - 代码模板
*/
public class cc {
private int k = 0, n = 0;
private float temp = 0;
private float min, m; private float[][] a = new float[150][4];
private float[][] b = new float[3][4];
private float[][] c = new float[3][4];
private float[][] g = new float[3][4];
private float d[] = new float[3];
private int T[] = new int[150]; private void cluster() {
int i = 0;
int s = 0;
int t = 0;
int r, y,j = 0; // 首次聚类
System.out.println("** b[t][s]**");
for (t = 0; t < 3; t++) {
for (s = 0; s < 4; s++) {
System.out.print("** " + b[t][s]);
}
System.out.println("\n");
} for (i = 0; i < 150; i++) {
for (t = 0; t < 3; t++) {
d[t] = (a[i][0] - b[t][0]) * (a[i][0] - b[t][0]) +
(a[i][1] - b[t][1]) * (a[i][1] - b[t][1]) +
(a[i][2] - b[t][2]) * (a[i][2] - b[t][2]) +
(a[i][3] - b[t][3]) * (a[i][3] - b[t][3]);
}
min = d[0];
m = Math.min(d[1], d[2]);
r = d[1] > d[2] ? 2 : 1;
if (d[0] > m) {
k = r;
}
else {
k = 0;
}
System.out.println("%%" + i + " " + k);
T[i] = k;
}
/*for (t = 0; t < 3; t++)
{
for (s = 0; s < 4; s++)
{g[t][s]=0;}
}*/
//计算初始聚类中心
for (t = 0; t < 3; t++)
{
y = 0;
for (s = 0; s < 4; s++)
{
y = 0;
g[t][s]=0;
for (i = 0; i < 150; i++)
{
if (T[i] == t)
{
y++;
g[t][s] += a[i][s];
}
}
c[t][s] = g[t][s] / y;
System.out.print("***" + c[t][s]);
}
System.out.println("\n");
} } public static void main(String[] args) { try
{
int i = 0, j = 0, t = 0, s = 0;
FileReader fs = new FileReader("./test.txt");
BufferedReader br = new BufferedReader(fs);
String record = new String();
cc clu = new cc();
while ( (record = br.readLine()) != null)
{
StringTokenizer st = new StringTokenizer(record);
j = 0;
while (st.hasMoreTokens()) //测试此 tokenizer 的字符串中是否还有更多的可用标记。
{
clu.a[i][j] = Float.parseFloat(st.nextToken()); //返回此 string tokenizer 的下一个标记。
//System.out.print(" "+a[i][j]);
j++;
}
i++;
} //获取聚类中心
int r;
for (t = 0; t < 3; t++) {
r = (int) (Math.random() * 149);
for (s = 0; s < 4; s++) {
clu.b[t][s] = clu.a[r][s];
}
}
clu.cluster(); //递归迭代,当前后聚类中心之差小于0.001时结束
// float temp[][] = new float[3][4];
int n=0;
do
{
for (i = 0; i < 3; i++)
{
for (j = 0; j < 4; j++)
clu.b[i][j] = clu.c[i][j];
}
clu.cluster();
n++;
}while(n>20);第一次运行到}while(n>20); 这里的时候就跳出了,根本就没有达到n<20的条件,不知道怎么回事?
}
catch (FileNotFoundException e) {
e.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
}
}
}
/////////////////////////////////////////////////////////////////////////////////////////
do
{
for (i = 0; i < 3; i++)
{
for (j = 0; j < 4; j++)
clu.b[i][j] = clu.c[i][j];
}
clu.cluster();
n++;
}while(n>20);第一次运行到}while(n>20); 这里的时候就跳出了,根本就没有达到n<20的条件,不知道怎么回事?
/////////////////////////////////////////////////////////////////////////////////////////
test.txt内容为:
5.1 3.5 1.4 0.2
4.9 3.0 1.4 0.2
4.7 3.2 1.3 0.2
4.6 3.1 1.5 0.2
5.0 3.6 1.4 0.2
5.4 3.9 1.7 0.4
4.6 3.4 1.4 0.3
5.0 3.4 1.5 0.2
4.4 2.9 1.4 0.2
4.9 3.1 1.5 0.1
5.4 3.7 1.5 0.2
4.8 3.4 1.6 0.2
4.8 3.0 1.4 0.1
4.3 3.0 1.1 0.1
5.8 4.0 1.2 0.2
5.7 4.4 1.5 0.4
5.4 3.9 1.3 0.4
5.1 3.5 1.4 0.3
5.7 3.8 1.7 0.3
5.1 3.8 1.5 0.3
5.4 3.4 1.7 0.2
5.1 3.7 1.5 0.4
4.6 3.6 1.0 0.2
5.1 3.3 1.7 0.5
4.8 3.4 1.9 0.2
5.0 3.0 1.6 0.2
5.0 3.4 1.6 0.4
5.2 3.5 1.5 0.2
5.2 3.4 1.4 0.2
4.7 3.2 1.6 0.2
4.8 3.1 1.6 0.2
5.4 3.4 1.5 0.4
5.2 4.1 1.5 0.1
5.5 4.2 1.4 0.2
4.9 3.1 1.5 0.1
5.0 3.2 1.2 0.2
5.5 3.5 1.3 0.2
4.9 3.1 1.5 0.1
4.4 3.0 1.3 0.2
5.1 3.4 1.5 0.2
5.0 3.5 1.3 0.3
4.5 2.3 1.3 0.3
4.4 3.2 1.3 0.2
5.0 3.5 1.6 0.6
5.1 3.8 1.9 0.4
4.8 3.0 1.4 0.3
5.1 3.8 1.6 0.2
4.6 3.2 1.4 0.2
5.3 3.7 1.5 0.2
5.0 3.3 1.4 0.2
7.0 3.2 4.7 1.4
6.4 3.2 4.5 1.5
6.9 3.1 4.9 1.5
5.5 2.3 4.0 1.3
6.5 2.8 4.6 1.5
5.7 2.8 4.5 1.3
6.3 3.3 4.7 1.6
4.9 2.4 3.3 1.0
6.6 2.9 4.6 1.3
5.2 2.7 3.9 1.4
5.0 2.0 3.5 1.0
5.9 3.0 4.2 1.5
6.0 2.2 4.0 1.0
6.1 2.9 4.7 1.4
5.6 2.9 3.6 1.3
6.7 3.1 4.4 1.4
5.6 3.0 4.5 1.5
5.8 2.7 4.1 1.0
6.2 2.2 4.5 1.5
5.6 2.5 3.9 1.1
5.9 3.2 4.8 1.8
6.1 2.8 4.0 1.3
6.3 2.5 4.9 1.5
6.1 2.8 4.7 1.2
6.4 2.9 4.3 1.3
6.6 3.0 4.4 1.4
6.8 2.8 4.8 1.4
6.7 3.0 5.0 1.7
6.0 2.9 4.5 1.5
5.7 2.6 3.5 1.0
5.5 2.4 3.8 1.1
5.5 2.4 3.7 1.0
5.8 2.7 3.9 1.2
6.0 2.7 5.1 1.6
5.4 3.0 4.5 1.5
6.0 3.4 4.5 1.6
6.7 3.1 4.7 1.5
6.3 2.3 4.4 1.3
5.6 3.0 4.1 1.3
5.5 2.5 4.0 1.3
5.5 2.6 4.4 1.2
6.1 3.0 4.6 1.4
5.8 2.6 4.0 1.2
5.0 2.3 3.3 1.0
5.6 2.7 4.2 1.3
5.7 3.0 4.2 1.2
5.7 2.9 4.2 1.3
6.2 2.9 4.3 1.3
5.1 2.5 3.0 1.1
5.7 2.8 4.1 1.3
6.3 3.3 6.0 2.5
5.8 2.7 5.1 1.9
7.1 3.0 5.9 2.1
6.3 2.9 5.6 1.8
6.5 3.0 5.8 2.2
7.6 3.0 6.6 2.1
4.9 2.5 4.5 1.7
7.3 2.9 6.3 1.8
6.7 2.5 5.8 1.8
7.2 3.6 6.1 2.5
6.5 3.2 5.1 2.0
6.4 2.7 5.3 1.9
6.8 3.0 5.5 2.1
5.7 2.5 5.0 2.0
5.8 2.8 5.1 2.4
6.4 3.2 5.3 2.3
6.5 3.0 5.5 1.8
7.7 3.8 6.7 2.2
7.7 2.6 6.9 2.3
6.0 2.2 5.0 1.5
6.9 3.2 5.7 2.3
5.6 2.8 4.9 2.0
7.7 2.8 6.7 2.0
6.3 2.7 4.9 1.8
6.7 3.3 5.7 2.1
7.2 3.2 6.0 1.8
6.2 2.8 4.8 1.8
6.1 3.0 4.9 1.8
6.4 2.8 5.6 2.1
7.2 3.0 5.8 1.6
7.4 2.8 6.1 1.9
7.9 3.8 6.4 2.0
6.4 2.8 5.6 2.2
6.3 2.8 5.1 1.5
6.1 2.6 5.6 1.4
7.7 3.0 6.1 2.3
6.3 3.4 5.6 2.4
6.4 3.1 5.5 1.8
6.0 3.0 4.8 1.8
6.9 3.1 5.4 2.1
6.7 3.1 5.6 2.4
6.9 3.1 5.1 2.3
5.8 2.7 5.1 1.9
6.8 3.2 5.9 2.3
6.7 3.3 5.7 2.5
6.7 3.0 5.2 2.3
6.3 2.5 5.0 1.9
6.5 3.0 5.2 2.0
6.2 3.4 5.4 2.3
5.9 3.0 5.1 1.8
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货