具体算法可以参考
http://www.aboutyun.com/thread-18178-1-1.html
本文用K_means算法实现鸢尾花的识别
鸢尾花卉数据集,是一类多重变量分析的数据集。
每个数据包含4个属性。
可通过花萼长度,花萼宽度,花瓣长度,花瓣宽度4个属性预测鸢尾花卉属于(Setosa,Versicolour,Virginica)三个种类中的哪一类
最后通过K_means算法识别的类别和数据中给定的类别对比计算正确率
实现过程
- 定K值及初始质心
- 计算距离并划分数据
- 使用均值作为新质心
- 新的质心和原质心相等算法停止
Java代码
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.List;
public class K_means {
//将花分为三类
private List<float[]> K1 = new ArrayList<>();
private List<float[]> K2 = new ArrayList<>();
private List<float[]> K3 = new ArrayList<>();
public static int num;
private static List<float[]> flowerList = new ArrayList<>();
/**
* 输入流导入实验数据
*/
private void initData(){
FileReader reader = null;
try {
reader = new FileReader("input.txt");
} catch (FileNotFoundException e1) {
e1.printStackTrace();
}
BufferedReader br = new BufferedReader(reader);
String str;
try {
while((str = br.readLine()) != null){
float[] flower = new float[6];
String[] strArray =str.split("\\s+");
flower[0] = Float.parseFloat(strArray[0]);
flower[1] = Float.parseFloat(strArray[1]);
flower[2] = Float.parseFloat(strArray[2]);
flower[3] = Float.parseFloat(strArray[3]);
flower[4] = Float.parseFloat(strArray[4]);
flower[5] = Float.parseFloat