• 大小: 955KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-06-01
  • 语言: Java
  • 标签: k-means  算法  java  mysql  

资源简介

java语言实现对mysql数据库表中某个字段实现k-means算法,并将处理后的数据写入新表

资源截图

代码片段和文件信息

import java.sql.*;
import java.util.*;

/**
 * @author tianshl
 * @version 2018/1/13 上午11:13
 */
public class Kmeans {
    // 源数据
    private List origins = new ArrayList<>();

    // 分组数据
    private Map> grouped;

    // 初始质心列表
    private List cores;

    // 数据源
    private String tableName;
    private String colName;

    /**
     * 构造方法
     *
     * @param tableName 源数据表名称
     * @param colName   源数据列名称
     * @param cores     质心列表
     */
    private Kmeans(String tableName String colNameList cores){
        this.cores = cores;
        this.tableName = tableName;
        this.colName = colName;
    }

    /**
     * 重新计算质心
     *
     * @return 新的质心列表
     */
    private List newCores(){
        List newCores = new ArrayList<>();

        for(List v: grouped.values()){
            newCores.add(v.stream().reduce(0 (sum num) -> sum + num) / (v.size() + 0.0));
        }

        Collections.sort(newCores);
        return newCores;
    }

    /**
     * 判断是否结束
     *
     * @return bool
     */
    private Boolean isOver(){
        List _cores = newCores();
        for(int i=0 len=cores.size(); i            if(!cores.get(i).toString().equals(_cores.get(i).toString())){
                // 使用新质心
                cores = _cores;
                return false;
            }
        }
        return true;
    }

    /**
     * 数据分组
     */
    private void setGrouped(){
        grouped = new HashMap<>();

        Double core;
        for (Integer origin: origins) {
            core = getCore(origin);

            if (!grouped.containsKey(core)) {
                grouped.put(core new ArrayList<>());
            }

            grouped.get(core).add(origin);
        }
    }

    /**
     * 选择质心
     *
     * @param num   要分组的数据
     * @return      质心
     */
    private Double getCore(Integer num){

        // 差 列表
        List diffs = new ArrayList<>();

        // 计算差
        for(Double core: cores){
            diffs.add(Math.abs(num - core));
        }

        // 最小差 -> 索引 -> 对应的质心
        return cores.get(diffs.indexOf(Collections.min(diffs)));
    }

    /**
     *  建立数据库连接
     * @return  connection
     */
    private Connection getConn(){
        try {
            // URL指向要访问的数据库名analysis
            String url = “jdbc:mysql://localhost:3306/analysis“;
            // MySQL配置时的用户名
            String user = “root“;
            // MySQL配置时的密码
            String password = “root“;

            Class.forName(“com.mysql.jdbc.Driver“);

            //声明Connection对象
            Connection conn = DriverManager.getConnection(url user password);

            if(conn.isClosed()){
                System.out.println(“连接数据库失败!“);
                return null;
            }
            System.out.println(“连接数据库成功!“);

            return conn;

        } catch (Exception e) {
            System.out.println(“连接数据库失败!“);
            e.printStackTrace();
  

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2018-01-13 12:28  kmeans\
     文件        7002  2018-01-13 12:28  kmeans\Kmeans.class
     文件        6377  2018-01-13 12:25  kmeans\Kmeans.java
     目录           0  2018-01-13 12:29  __MACOSX\
     目录           0  2018-01-13 12:29  __MACOSX\kmeans\
     文件         172  2018-01-13 12:25  __MACOSX\kmeans\._Kmeans.java
     目录           0  2018-01-13 12:06  kmeans\lib\
     文件      999810  2017-11-22 15:31  kmeans\lib\mysql-connector-java-5.1.45-bin.jar
     目录           0  2018-01-13 12:29  __MACOSX\kmeans\lib\
     文件         222  2017-11-22 15:31  __MACOSX\kmeans\lib\._mysql-connector-java-5.1.45-bin.jar
     文件       22194  2018-01-13 12:27  kmeans\README.pdf
     文件         270  2018-01-13 12:27  __MACOSX\kmeans\._README.pdf

评论

共有 条评论