资源简介
实验描述:
对指定数据集进行聚类分析,选择适当的聚类算法,编写程序实现,提交程序和结果报告。
数据集: Iris Data Set(见附件一) ,根据花的属性进行聚类。
数据包括四个属性:sepal length花萼长度,sepal width花萼宽度,petal length花瓣长度,petal width花瓣宽度。其中第五个值表示该样本属于哪一个类。
样本点间的距离直接用向量的欧氏距离。
代码片段和文件信息
package com.company;
import java.io.File;
import java.util.Scanner;
import java.util.Vector;
import static com.sun.org.apache.xalan.internal.lib.ExsltStrings.split;
public class Main {
public static Vector indata = new Vector<>(); //存储从文件中读取的原始数据
public static Vector data = new Vector<>(); //存储经过处理后的每一个样本的各个属性值和所属分类
public static Vector init_kernal = new Vector<>();//存储每次迭代产生的聚类核心的每个属性值的均值
public static boolean loadData(String url) {//加载测试的数据文件
try {
Scanner in = new Scanner(new File(url));//读入文件
while (in.hasNextLine()) {
String str = in.nextLine();//将文件的每一行存到str的临时变量中
indata.add(str);//将每一个样本点的数据追加到Vector 中
}
return true;
} catch (Exception e) { //如果出错返回false
return false;
}
}
public static void pretreatment(Vector indata) { //数据预处理,将原始数据中的每一个属性值提取出来存放到Vector data中
int i = 0;
String t;
while (i < indata.size()) {//取出indata中的每一行值
double[] tem = new double[5];
t = indata.get(i);
String[] sourceStrArray = t.split(““ 5);//使用字符串分割函数提取出各属性值
for (int j = 0; j < 4; j++) {
tem[j] = Double.parseDouble(sourceStrArray[j]);//将每一个的样本的各属性值类型转换后依次存入到double[]数组中
}
tem[4] = 0;//tem的第五个值表示所属类别,1.0表示第一类,2.0表示第二类,3.0表示第三类,初始化为0不属于任何类
data.add(tem);//将每一个样本加入到data中
i++;
}
}
public static Vector set_kernal(Vector data int a int b int c) {//设置初始的聚类核心,a,b,c分别表示一个类的核心在data中的编号
init_kernal.add(data.get(a));
init_kernal.add(data.get(b));
init_kernal.add(data.get(c));
return init_kernal;
}
public static int choose(double[] data double[] a double[] b double[] c) {//判断一个样本属于哪一个类,返回值1表示第一类,2表示第二类,3表示第三类
double ta tb tc;
//ta,tb,tc分别表示一个样本点到三个聚类核心的欧式距离的平方
ta = (data[0] - a[0]) * (data[0] - a[0]) + (data[1] - a[1]) * (data[1] - a[1]) + (data[2] - a[2]) * (data[2] - a[2]) + (data[3] - a[3]) * (data[3] - a[3]);
tb = (data[0] - b[0]) * (data[0] - b[0]) + (data[1] - b[1]) * (data[1] - b[1]) + (data[2] - b[2]) * (data[2] - b[2]) + (data[3] - b[3]) * (data[3] - b[3]);
tc = (data[0] - c[0]) * (data[0] - c[0]) + (data[1] - c[1]) * (data[1] - c[1]) + (data[2] - c[2]) * (data[2] - c[2]) + (data[3] - c[3]) * (data[3] - c[3]);
if (ta == Math.min(Math.min(ta tb) tc)) //如果到第一类的距离最小返回1
return 1;
else if (tb == Math.min(Math.min(ta tb) tc))//如果到第二类的距离最小返回2
return 2;
else if (tc == Math.min(Math.min(ta tb) tc))//如果到第三类的距离最小返回3
return 3;
return 0;
}
public static Vector onestep(Vector data Vector kernal) {//函数执行一次表示kmeans的
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2016-11-22 00:30 2014301500370-李勇志\
目录 0 2016-12-10 12:10 2014301500370-李勇志\.idea\
文件 686 2016-11-15 14:35 2014301500370-李勇志\.idea\compiler.xm
目录 0 2016-11-22 00:30 2014301500370-李勇志\.idea\copyright\
文件 76 2016-11-15 14:35 2014301500370-李勇志\.idea\copyright\profiles_settings.xm
文件 97 2016-11-15 14:35 2014301500370-李勇志\.idea\desc
文件 529 2016-11-15 14:35 2014301500370-李勇志\.idea\misc.xm
文件 283 2016-11-15 14:35 2014301500370-李勇志\.idea\modules.xm
文件 91 2016-11-15 14:35 2014301500370-李勇志\.idea\project-template.xm
文件 34495 2016-12-07 13:48 2014301500370-李勇志\.idea\workspace.xm
目录 0 2016-11-15 17:10 2014301500370-李勇志\out\
目录 0 2016-11-15 17:10 2014301500370-李勇志\out\production\
目录 0 2016-11-15 19:24 2014301500370-李勇志\out\production\数据挖掘实验\
目录 0 2016-11-15 19:24 2014301500370-李勇志\out\production\数据挖掘实验\com\
目录 0 2016-11-22 00:30 2014301500370-李勇志\out\production\数据挖掘实验\com\company\
文件 4952 2016-11-15 19:24 2014301500370-李勇志\out\production\数据挖掘实验\com\company\Main.class
目录 0 2016-11-15 17:10 2014301500370-李勇志\src\
目录 0 2016-11-15 17:10 2014301500370-李勇志\src\com\
目录 0 2016-11-22 00:30 2014301500370-李勇志\src\com\company\
文件 7562 2016-11-15 19:30 2014301500370-李勇志\src\com\company\Main.java
文件 437 2016-11-15 14:35 2014301500370-李勇志\数据挖掘实验.iml
- 上一篇:Java Swing 小工具界面框架
- 下一篇:韵达物流管理系统
评论
共有 条评论