k-means算法又称k-均值算法,是机器学习聚类算法中的一种,是一种基于形心的划分方法,其中每个簇的中心都用簇中所有对象的均值来表示。其思想如下:
输入:
- k:簇的数目;
- D:包含n个对象的数据集。
方法:
- 从D中随机选择几个对象作为起始质心;
- 对每个质心,计算每个数据到各个质心的距离,并把这些点分配到离该质心最短的距离的簇;
- 对每个簇,计算簇中所有点的均值并将此均值作为新的质心;
- 将数据点按照新的中心重新聚类;
- 重复【步骤3】,直到质心不再发生变化(新的质心和原来的质心相等);
- 输出聚类结果。
木羊的k-means算法实现包括5各类。其中,DBConnection.java用于连接数据库,SelectData.java用于从数据库里读取数据,Point.java存放点对象模型,ManagePoint.java是对点的操作,Kmeans.java是算法的核心思想及主函数入口。以下分别给出各个类的详细代码:
DBConnection.java
数据集获取,在机器学习数据集获取官方网站UCI中点击打开链接,木羊已经把该数据集从txt文档中插入到数据库,并去除了最后一列(花类别)。读者若不熟悉数据库的读写,请百度。若木羊有时间,会在后面的博文中补充把txt文档内容读到数据库中的内容。
<span style="font-size:18px;">package db;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
/**
*
* 数据库连接类
*
*/
public class DBConnection {
public static final String driver = "com.mysql.jdbc.Driver"