Java实现k_means算法进行聚类分析

实验描述:

对指定数据集进行聚类分析,选择适当的聚类算法,编写程序实现,提交程序和结果报告。

数据集: Iris Data Set(见附件一) ,根据花的属性进行聚类。

数据包括四个属性:sepal length花萼长度,sepal width花萼宽度,petal length花瓣长度,petal width花瓣宽度。其中第五个值表示该样本属于哪一个类。

样本点间的距离直接用向量的欧氏距离。

实验环境和编程语言:

本实验使用的编程语言为:Java

编程环境为:Intellij idea

实现聚类的算法为:K_means算法

测试用例的样本个数为:150个

样本示例:4.9,3.0,1.4,0.2,Iris-setosa

算法分析:

这里只是简单的介绍一下k-means算法的基本思想,具体详细的设计和数学公式读者可以自行百度,这个资料很多。

可以参考这个博客http://blog.csdn.net/qll125596718/article/details/8243404/

K-means算法的基本思想是:以空间中k个点为中心进行聚类,对最靠近他们的对象归类。通过迭代的方法,逐次更新各聚类中心的值,直至得到最好的聚类结果。

假设要把样本集分为c个类别,算法描述如下:

(1)适当选择c个类的初始中心;

(2)在第k次迭代中,对任意一个样本,求其到c个中心的距离,将该样本归到距离最短的中心所在的类;

(3)利用均值等方法更新该类的中心值;

(4)对于所有的c个聚类中心,如果利用(2)(3)的迭代法更新后,值保持不变,则迭代结束,否则继续迭代。

工程和测试数据下载地址:

http://download.csdn.net/detail/qq_24369113/9711642

编程实现:

函数设计与分析

1.	public static boolean loadData(String url) 
//加载测试的数据文件
2.	public static void pretreatment(Vector<String> indata) 
//数据预处理,将原始数据中的每一个属性值提取出来存放到Vector<double[]>  data中
3.	public static Vector<double[]> set_kernal(Vector<double[]> data, int a, int b, int c) 
//设置初始的聚类核心,a,b,c分别表示一个类的核心在data中的编号
4.	public static int choose(double[] data, double[] a, double[] b, double[] c) 
//判断一个样本属于哪一个类,返回值1表示第一类,2表示第二类,3表示第三类
5.	public static Vector <double[]> onestep (Vector<double[]>data,Vector<double[]> kernal) 
//函数执行一次表示kmeans的一次迭代
6.	public static void k_means() 
//k_means算法的实现
7.	public static void show_category() 
//打印出所有的样本的属性和所属类别

程序源码:

源码实现:
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<String> indata = new Vector<>();  //存储从文件中读取的原始数据
    public static Vector<double[]> data = new Vector<>();  //存储经过处理后的每一个样本的各个属性值和所属分类
    public static Vector<double[]> 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<String> indata) {   //数据预处理,将原始数据中的每一个属性值提取出来存放到Vector<double[]>  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<double[]> set_kernal(Vector<double[]> 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<double[]> onestep(Vector<double[]> data, Vector<double[]> kernal) {//函数执行一次表示kmeans的一次迭代
        Vector<double[]> newkernal = new Vector<>();//用于存放一次迭代后新的类的核心的各属性值
        int i = 0;
        double[] a = kernal.get(0); //a赋值为当前第一个类的核心
        double[] b = kernal.get(1); //b赋值为当前第二类的核心
        double[] c = kernal.get(2); //c赋值为当前第三类的核心
        double[] temp;

        while (i < data.size()) {//取出data中的每一个样本存放在temp中
            temp = data.get(i);
            temp[4] = (double) choose(temp, a, b, c);//调用choose函数判断当前样本属于哪一个类
            i++;
        }


        double[] suma = {0, 0, 0, 0};
        int al = 0;//表示当前第一类的样本个数
        double[] sumb = {0, 0, 0, 0};
        int bl = 0;//当前第二类的样本个数
        double[] sumc = {0, 0, 0, 0};
        int cl = 0;//当前第三类的样本个数
        i = 0;
        while (i < data.size()) {
            double[] t = data.get(i);
            if (t[4] == 1.0) {     //如果当前样本属于第一类
                for (int j = 0; j < 4; j++) {
                    suma[j] = suma[j] + t[j];
                }
                al++;             //该类的样本个数加一
            } else if (t[4] == 2.0) {
                for (int j = 0; j < 4; j++) {
                    sumb[j] = sumb[j] + t[j];

                }
                bl++;
            } else if (t[4] == 3.0) {
                for (int j = 0; j < 4; j++) {
                    sumc[j] = sumc[j] + t[j];

                }
                cl++;
            }
            i++;//指向下一个样本继续循环
        }

        for (int j = 0; j < 4; j++) {//计算出本次迭代后的每个类的核心的坐标
            suma[j] = suma[j] / al;
            sumb[j] = sumb[j] / bl;
            sumc[j] = sumc[j] / cl;

        }
        //将新的类的核心添加入到newkernal中
        newkernal.add(suma);
        newkernal.add(sumb);
        newkernal.add(sumc);
        return newkernal;//返回本次迭代后的新的类的核心
    }


    public static void k_means() {//k_means算法的实现

        while (true) {
            boolean con = true;
            Vector<double[]> t = onestep(data, init_kernal);//将 data和当前的init_kernal传入onestep函数进行一次迭代,返回值为迭代后的类的核心

            //判断本次迭代后返回的类的核心是不是和迭代之前的类的核心相同,如果不相同con被设为false,继续迭代。
            for (int i = 0; i < t.size(); i++) {
                for (int j = 0; j < 4; j++) {
                    if (t.get(i)[j] != init_kernal.get(i)[j])
                        con = false;
                }
            }
            if (con)//如果con为true说明本次迭代的核心和迭代之前的核心相同,说明聚类完成,退出循环
                break;
            else
                init_kernal = t;//如果本次迭代返回的新的核心和迭代之前的不同,则当前核心设置为返回的新的核心,继续循环迭代
        }

    }

    public static void show_category() {//打印出所有的样本的属性和所属类别
        for (int i = 0; i < data.size(); i++) {
            System.out.print((i + 1) + "  ");
            for (int j = 0; j < 5; j++) {
                System.out.print(data.get(i)[j] + "  ");
            }
            System.out.println();
        }

    }

    public static void main(String[] args){
        Main.loadData("e:/bezdekIris.data");
        pretreatment(indata);//预处理
        set_kernal(data, 20, 80, 130);//设置初始核心
        k_means();
        show_category();


    }
}




 

实验结果分析:

根据程序运行的结果(见附件二)显示,以及与初始测试样本的类别进行比较发现,聚类正确结果样本数为135,错误的样本数为15,正确率为90%,可以认为聚类成功。

思考与改进:

本次实验编程利用k_means算法的时候没有对数据进行归一化处理,由于不同的属性值其值域有较大的差别,因此在计算距离的时候不同属性的权值就不一致,从而导致最后的聚类结果出现了一定的错误率。如果将所有的数据归一化到[0,1.0]的区间内,所有的属性值所占权重就会变成一样的,可能聚类的结果将会更加准确!


附件一:(测试数据)

5.1,3.5,1.4,0.2,Iris-setosa
4.9,3.0,1.4,0.2,Iris-setosa
4.7,3.2,1.3,0.2,Iris-setosa
4.6,3.1,1.5,0.2,Iris-setosa
5.0,3.6,1.4,0.2,Iris-setosa
5.4,3.9,1.7,0.4,Iris-setosa
4.6,3.4,1.4,0.3,Iris-setosa
5.0,3.4,1.5,0.2,Iris-setosa
4.4,2.9,1.4,0.2,Iris-setosa
4.9,3.1,1.5,0.1,Iris-setosa
5.4,3.7,1.5,0.2,Iris-setosa
4.8,3.4,1.6,0.2,Iris-setosa
4.8,3.0,1.4,0.1,Iris-setosa
4.3,3.0,1.1,0.1,Iris-setosa
5.8,4.0,1.2,0.2,Iris-setosa
5.7,4.4,1.5,0.4,Iris-setosa
5.4,3.9,1.3,0.4,Iris-setosa
5.1,3.5,1.4,0.3,Iris-setosa
5.7,3.8,1.7,0.3,Iris-setosa
5.1,3.8,1.5,0.3,Iris-setosa
5.4,3.4,1.7,0.2,Iris-setosa
5.1,3.7,1.5,0.4,Iris-setosa
4.6,3.6,1.0,0.2,Iris-setosa
5.1,3.3,1.7,0.5,Iris-setosa
4.8,3.4,1.9,0.2,Iris-setosa
5.0,3.0,1.6,0.2,Iris-setosa
5.0,3.4,1.6,0.4,Iris-setosa
5.2,3.5,1.5,0.2,Iris-setosa
5.2,3.4,1.4,0.2,Iris-setosa
4.7,3.2,1.6,0.2,Iris-setosa
4.8,3.1,1.6,0.2,Iris-setosa
5.4,3.4,1.5,0.4,Iris-setosa
5.2,4.1,1.5,0.1,Iris-setosa
5.5,4.2,1.4,0.2,Iris-setosa
4.9,3.1,1.5,0.2,Iris-setosa
5.0,3.2,1.2,0.2,Iris-setosa
5.5,3.5,1.3,0.2,Iris-setosa
4.9,3.6,1.4,0.1,Iris-setosa
4.4,3.0,1.3,0.2,Iris-setosa
5.1,3.4,1.5,0.2,Iris-setosa
5.0,3.5,1.3,0.3,Iris-setosa
4.5,2.3,1.3,0.3,Iris-setosa
4.4,3.2,1.3,0.2,Iris-setosa
5.0,3.5,1.6,0.6,Iris-setosa
5.1,3.8,1.9,0.4,Iris-setosa
4.8,3.0,1.4,0.3,Iris-setosa
5.1,3.8,1.6,0.2,Iris-setosa
4.6,3.2,1.4,0.2,Iris-setosa
5.3,3.7,1.5,0.2,Iris-setosa
5.0,3.3,1.4,0.2,Iris-setosa
7.0,3.2,4.7,1.4,Iris-versicolor
6.4,3.2,4.5,1.5,Iris-versicolor
6.9,3.1,4.9,1.5,Iris-versicolor
5.5,2.3,4.0,1.3,Iris-versicolor
6.5,2.8,4.6,1.5,Iris-versicolor
5.7,2.8,4.5,1.3,Iris-versicolor
6.3,3.3,4.7,1.6,Iris-versicolor
4.9,2.4,3.3,1.0,Iris-versicolor
6.6,2.9,4.6,1.3,Iris-versicolor
5.2,2.7,3.9,1.4,Iris-versicolor
5.0,2.0,3.5,1.0,Iris-versicolor
5.9,3.0,4.2,1.5,Iris-versicolor
6.0,2.2,4.0,1.0,Iris-versicolor
6.1,2.9,4.7,1.4,Iris-versicolor
5.6,2.9,3.6,1.3,Iris-versicolor
6.7,3.1,4.4,1.4,Iris-versicolor
5.6,3.0,4.5,1.5,Iris-versicolor
5.8,2.7,4.1,1.0,Iris-versicolor
6.2,2.2,4.5,1.5,Iris-versicolor
5.6,2.5,3.9,1.1,Iris-versicolor
5.9,3.2,4.8,1.8,Iris-versicolor
6.1,2.8,4.0,1.3,Iris-versicolor
6.3,2.5,4.9,1.5,Iris-versicolor
6.1,2.8,4.7,1.2,Iris-versicolor
6.4,2.9,4.3,1.3,Iris-versicolor
6.6,3.0,4.4,1.4,Iris-versicolor
6.8,2.8,4.8,1.4,Iris-versicolor
6.7,3.0,5.0,1.7,Iris-versicolor
6.0,2.9,4.5,1.5,Iris-versicolor
5.7,2.6,3.5,1.0,Iris-versicolor
5.5,2.4,3.8,1.1,Iris-versicolor
5.5,2.4,3.7,1.0,Iris-versicolor
5.8,2.7,3.9,1.2,Iris-versicolor
6.0,2.7,5.1,1.6,Iris-versicolor
5.4,3.0,4.5,1.5,Iris-versicolor
6.0,3.4,4.5,1.6,Iris-versicolor
6.7,3.1,4.7,1.5,Iris-versicolor
6.3,2.3,4.4,1.3,Iris-versicolor
5.6,3.0,4.1,1.3,Iris-versicolor
5.5,2.5,4.0,1.3,Iris-versicolor
5.5,2.6,4.4,1.2,Iris-versicolor
6.1,3.0,4.6,1.4,Iris-versicolor
5.8,2.6,4.0,1.2,Iris-versicolor
5.0,2.3,3.3,1.0,Iris-versicolor
5.6,2.7,4.2,1.3,Iris-versicolor
5.7,3.0,4.2,1.2,Iris-versicolor
5.7,2.9,4.2,1.3,Iris-versicolor
6.2,2.9,4.3,1.3,Iris-versicolor
5.1,2.5,3.0,1.1,Iris-versicolor
5.7,2.8,4.1,1.3,Iris-versicolor
6.3,3.3,6.0,2.5,Iris-virginica
5.8,2.7,5.1,1.9,Iris-virginica
7.1,3.0,5.9,2.1,Iris-virginica
6.3,2.9,5.6,1.8,Iris-virginica
6.5,3.0,5.8,2.2,Iris-virginica
7.6,3.0,6.6,2.1,Iris-virginica
4.9,2.5,4.5,1.7,Iris-virginica
7.3,2.9,6.3,1.8,Iris-virginica
6.7,2.5,5.8,1.8,Iris-virginica
7.2,3.6,6.1,2.5,Iris-virginica
6.5,3.2,5.1,2.0,Iris-virginica
6.4,2.7,5.3,1.9,Iris-virginica
6.8,3.0,5.5,2.1,Iris-virginica
5.7,2.5,5.0,2.0,Iris-virginica
5.8,2.8,5.1,2.4,Iris-virginica
6.4,3.2,5.3,2.3,Iris-virginica
6.5,3.0,5.5,1.8,Iris-virginica
7.7,3.8,6.7,2.2,Iris-virginica
7.7,2.6,6.9,2.3,Iris-virginica
6.0,2.2,5.0,1.5,Iris-virginica
6.9,3.2,5.7,2.3,Iris-virginica
5.6,2.8,4.9,2.0,Iris-virginica
7.7,2.8,6.7,2.0,Iris-virginica
6.3,2.7,4.9,1.8,Iris-virginica
6.7,3.3,5.7,2.1,Iris-virginica
7.2,3.2,6.0,1.8,Iris-virginica
6.2,2.8,4.8,1.8,Iris-virginica
6.1,3.0,4.9,1.8,Iris-virginica
6.4,2.8,5.6,2.1,Iris-virginica
7.2,3.0,5.8,1.6,Iris-virginica
7.4,2.8,6.1,1.9,Iris-virginica
7.9,3.8,6.4,2.0,Iris-virginica
6.4,2.8,5.6,2.2,Iris-virginica
6.3,2.8,5.1,1.5,Iris-virginica
6.1,2.6,5.6,1.4,Iris-virginica
7.7,3.0,6.1,2.3,Iris-virginica
6.3,3.4,5.6,2.4,Iris-virginica
6.4,3.1,5.5,1.8,Iris-virginica
6.0,3.0,4.8,1.8,Iris-virginica
6.9,3.1,5.4,2.1,Iris-virginica
6.7,3.1,5.6,2.4,Iris-virginica
6.9,3.1,5.1,2.3,Iris-virginica
5.8,2.7,5.1,1.9,Iris-virginica
6.8,3.2,5.9,2.3,Iris-virginica
6.7,3.3,5.7,2.5,Iris-virginica
6.7,3.0,5.2,2.3,Iris-virginica
6.3,2.5,5.0,1.9,Iris-virginica
6.5,3.0,5.2,2.0,Iris-virginica
6.2,3.4,5.4,2.3,Iris-virginica
5.9,3.0,5.1,1.8,Iris-virginica 

附件二:(运行结果)

类别1.0表示Iris-setosa

类别2.0表示Iris-versicolor

类别3.0表示Iris-virginica

号 属性 属性 属性 属性 类别
1  5.1  3.5  1.4  0.2  1.0  
2  4.9  3.0  1.4  0.2  1.0  
3  4.7  3.2  1.3  0.2  1.0  
4  4.6  3.1  1.5  0.2  1.0  
5  5.0  3.6  1.4  0.2  1.0  
6  5.4  3.9  1.7  0.4  1.0  
7  4.6  3.4  1.4  0.3  1.0  
8  5.0  3.4  1.5  0.2  1.0  
9  4.4  2.9  1.4  0.2  1.0  
10  4.9  3.1  1.5  0.1  1.0  
11  5.4  3.7  1.5  0.2  1.0  
12  4.8  3.4  1.6  0.2  1.0  
13  4.8  3.0  1.4  0.1  1.0  
14  4.3  3.0  1.1  0.1  1.0  
15  5.8  4.0  1.2  0.2  1.0  
16  5.7  4.4  1.5  0.4  1.0  
17  5.4  3.9  1.3  0.4  1.0  
18  5.1  3.5  1.4  0.3  1.0  
19  5.7  3.8  1.7  0.3  1.0  
20  5.1  3.8  1.5  0.3  1.0  
21  5.4  3.4  1.7  0.2  1.0  
22  5.1  3.7  1.5  0.4  1.0  
23  4.6  3.6  1.0  0.2  1.0  
24  5.1  3.3  1.7  0.5  1.0  
25  4.8  3.4  1.9  0.2  1.0  
26  5.0  3.0  1.6  0.2  1.0  
27  5.0  3.4  1.6  0.4  1.0  
28  5.2  3.5  1.5  0.2  1.0  
29  5.2  3.4  1.4  0.2  1.0  
30  4.7  3.2  1.6  0.2  1.0  
31  4.8  3.1  1.6  0.2  1.0  
32  5.4  3.4  1.5  0.4  1.0  
33  5.2  4.1  1.5  0.1  1.0  
34  5.5  4.2  1.4  0.2  1.0  
35  4.9  3.1  1.5  0.2  1.0  
36  5.0  3.2  1.2  0.2  1.0  
37  5.5  3.5  1.3  0.2  1.0  
38  4.9  3.6  1.4  0.1  1.0  
39  4.4  3.0  1.3  0.2  1.0  
40  5.1  3.4  1.5  0.2  1.0  
41  5.0  3.5  1.3  0.3  1.0  
42  4.5  2.3  1.3  0.3  1.0  
43  4.4  3.2  1.3  0.2  1.0  
44  5.0  3.5  1.6  0.6  1.0  
45  5.1  3.8  1.9  0.4  1.0  
46  4.8  3.0  1.4  0.3  1.0  
47  5.1  3.8  1.6  0.2  1.0  
48  4.6  3.2  1.4  0.2  1.0  
49  5.3  3.7  1.5  0.2  1.0  
50  5.0  3.3  1.4  0.2  1.0  
51  7.0  3.2  4.7  1.4  3.0  
52  6.4  3.2  4.5  1.5  2.0  
53  6.9  3.1  4.9  1.5  3.0  
54  5.5  2.3  4.0  1.3  2.0  
55  6.5  2.8  4.6  1.5  2.0  
56  5.7  2.8  4.5  1.3  2.0  
57  6.3  3.3  4.7  1.6  2.0  
58  4.9  2.4  3.3  1.0  2.0  
59  6.6  2.9  4.6  1.3  2.0  
60  5.2  2.7  3.9  1.4  2.0  
61  5.0  2.0  3.5  1.0  2.0  
62  5.9  3.0  4.2  1.5  2.0  
63  6.0  2.2  4.0  1.0  2.0  
64  6.1  2.9  4.7  1.4  2.0  
65  5.6  2.9  3.6  1.3  2.0  
66  6.7  3.1  4.4  1.4  2.0  
67  5.6  3.0  4.5  1.5  2.0  
68  5.8  2.7  4.1  1.0  2.0  
69  6.2  2.2  4.5  1.5  2.0  
70  5.6  2.5  3.9  1.1  2.0  
71  5.9  3.2  4.8  1.8  2.0  
72  6.1  2.8  4.0  1.3  2.0  
73  6.3  2.5  4.9  1.5  2.0  
74  6.1  2.8  4.7  1.2  2.0  
75  6.4  2.9  4.3  1.3  2.0  
76  6.6  3.0  4.4  1.4  2.0  
77  6.8  2.8  4.8  1.4  2.0  
78  6.7  3.0  5.0  1.7  3.0  
79  6.0  2.9  4.5  1.5  2.0  
80  5.7  2.6  3.5  1.0  2.0  
81  5.5  2.4  3.8  1.1  2.0  
82  5.5  2.4  3.7  1.0  2.0  
83  5.8  2.7  3.9  1.2  2.0  
84  6.0  2.7  5.1  1.6  2.0  
85  5.4  3.0  4.5  1.5  2.0  
86  6.0  3.4  4.5  1.6  2.0  
87  6.7  3.1  4.7  1.5  2.0  
88  6.3  2.3  4.4  1.3  2.0  
89  5.6  3.0  4.1  1.3  2.0  
90  5.5  2.5  4.0  1.3  2.0  
91  5.5  2.6  4.4  1.2  2.0  
92  6.1  3.0  4.6  1.4  2.0  
93  5.8  2.6  4.0  1.2  2.0  
94  5.0  2.3  3.3  1.0  2.0  
95  5.6  2.7  4.2  1.3  2.0  
96  5.7  3.0  4.2  1.2  2.0  
97  5.7  2.9  4.2  1.3  2.0  
98  6.2  2.9  4.3  1.3  2.0  
99  5.1  2.5  3.0  1.1  2.0  
100  5.7  2.8  4.1  1.3  2.0  
101  6.3  3.3  6.0  2.5  3.0  
102  5.8  2.7  5.1  1.9  2.0  
103  7.1  3.0  5.9  2.1  3.0  
104  6.3  2.9  5.6  1.8  3.0  
105  6.5  3.0  5.8  2.2  3.0  
106  7.6  3.0  6.6  2.1  3.0  
107  4.9  2.5  4.5  1.7  2.0  
108  7.3  2.9  6.3  1.8  3.0  
109  6.7  2.5  5.8  1.8  3.0  
110  7.2  3.6  6.1  2.5  3.0  
111  6.5  3.2  5.1  2.0  3.0  
112  6.4  2.7  5.3  1.9  3.0  
113  6.8  3.0  5.5  2.1  3.0  
114  5.7  2.5  5.0  2.0  2.0  
115  5.8  2.8  5.1  2.4  2.0  
116  6.4  3.2  5.3  2.3  3.0  
117  6.5  3.0  5.5  1.8  3.0  
118  7.7  3.8  6.7  2.2  3.0  
119  7.7  2.6  6.9  2.3  3.0  
120  6.0  2.2  5.0  1.5  2.0  
121  6.9  3.2  5.7  2.3  3.0  
122  5.6  2.8  4.9  2.0  2.0  
123  7.7  2.8  6.7  2.0  3.0  
124  6.3  2.7  4.9  1.8  2.0  
125  6.7  3.3  5.7  2.1  3.0  
126  7.2  3.2  6.0  1.8  3.0  
127  6.2  2.8  4.8  1.8  2.0  
128  6.1  3.0  4.9  1.8  2.0  
129  6.4  2.8  5.6  2.1  3.0  
130  7.2  3.0  5.8  1.6  3.0  
131  7.4  2.8  6.1  1.9  3.0  
132  7.9  3.8  6.4  2.0  3.0  
133  6.4  2.8  5.6  2.2  3.0  
134  6.3  2.8  5.1  1.5  2.0  
135  6.1  2.6  5.6  1.4  3.0  
136  7.7  3.0  6.1  2.3  3.0  
137  6.3  3.4  5.6  2.4  3.0  
138  6.4  3.1  5.5  1.8  3.0  
139  6.0  3.0  4.8  1.8  2.0  
140  6.9  3.1  5.4  2.1  3.0  
141  6.7  3.1  5.6  2.4  3.0  
142  6.9  3.1  5.1  2.3  3.0  
143  5.8  2.7  5.1  1.9  2.0  
144  6.8  3.2  5.9  2.3  3.0  
145  6.7  3.3  5.7  2.5  3.0  
146  6.7  3.0  5.2  2.3  3.0  
147  6.3  2.5  5.0  1.9  2.0  
148  6.5  3.0  5.2  2.0  3.0  
149  6.2  3.4  5.4  2.3  3.0  
150  5.9  3.0  5.1  1.8  2.0  





    原文作者:聚类算法
    原文地址: https://blog.csdn.net/qq_24369113/article/details/53176822
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞