亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

詳解Java實現的k-means聚類算法

2024-07-13 10:16:36
字體:
來源:轉載
供稿:網友

需求

對MySQL數據庫中某個表的某個字段執行k-means算法,將處理后的數據寫入新表中。

源碼及驅動

kmean.rar

源碼

import java.sql.*;import java.util.*;/** * @author tianshl * @version 2018/1/13 上午11:13 */public class Kmeans {  // 源數據  private List<Integer> origins = new ArrayList<>();  // 分組數據  private Map<Double, List<Integer>> grouped;  // 初始質心列表  private List<Double> cores;  // 數據源  private String tableName;  private String colName;  /**   * 構造方法   *   * @param tableName 源數據表名稱   * @param colName  源數據列名稱   * @param cores   質心列表   */  private Kmeans(String tableName, String colName,List<Double> cores){    this.cores = cores;    this.tableName = tableName;    this.colName = colName;  }  /**   * 重新計算質心   *   * @return 新的質心列表   */  private List<Double> newCores(){    List<Double> newCores = new ArrayList<>();    for(List<Integer> 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<Double> _cores = newCores();    for(int i=0, len=cores.size(); i<len; 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<Double> 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指向要訪問的數據庫名mydata      String url = "jdbc:mysql://localhost:3306/data_analysis_dev";      // 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();    }    return null;  }  /**   * 關閉數據庫連接   *   * @param conn 連接   */  private void close(Connection conn){    try {      if(conn != null && !conn.isClosed()) conn.close();    } catch (Exception e){      e.printStackTrace();    }  }  /**   * 獲取源數據   */  private void getOrigins(){    Connection conn = null;    try {      conn = getConn();      if(conn == null) return;      Statement statement = conn.createStatement();      ResultSet rs = statement.executeQuery(String.format("select %s from %s", colName, tableName));      while(rs.next()){        origins.add(rs.getInt(1));      }      conn.close();    } catch (Exception e){      e.printStackTrace();    } finally {     close(conn);    }  }  /**   * 向新表中寫數據   */  private void write(){    Connection conn = null;    try {      conn = getConn();      if(conn == null) return;            // 創建表      Statement statement = conn.createStatement();      // 刪除舊數據表      statement.execute("DROP TABLE IF EXISTS k_means; ");      // 創建新表      statement.execute("CREATE TABLE IF NOT EXISTS k_means(`core` DECIMAL(11, 7), `col` INTEGER(11));");      // 禁止自動提交      conn.setAutoCommit(false);      PreparedStatement ps = conn.prepareStatement("INSERT INTO k_means VALUES (?, ?)");      for(Map.Entry<Double, List<Integer>> entry: grouped.entrySet()){        Double core = entry.getKey();        for(Integer value: entry.getValue()){          ps.setDouble(1, core);          ps.setInt(2, value);          ps.addBatch();        }      }      // 批量執行      ps.executeBatch();      // 提交事務      conn.commit();      // 關閉連接      conn.close();    } catch (Exception e){      e.printStackTrace();    } finally {      close(conn);    }  }  /**   * 處理數據   */  private void run(){    System.out.println("獲取源數據");    // 獲取源數據    getOrigins();    // 停止分組    Boolean isOver = false;    System.out.println("數據分組處理");    while(!isOver) {      // 數據分組      setGrouped();      // 判斷是否停止分組      isOver = isOver();    }    System.out.println("將處理好的數據寫入數據庫");    // 將分組數據寫入新表    write();    System.out.println("寫數據完畢");  }  public static void main(String[] args){    List<Double> cores = new ArrayList<>();    cores.add(260.0);    cores.add(600.0);    // 表名, 列名, 質心列表    new Kmeans("attributes", "attr_length", cores).run();  }}

源文件

Kmeans.java

編譯

javac Kmeans.java 

運行

# 指定依賴庫java -Djava.ext.dirs=./lib Kmeans

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩一级裸体免费视频| 国产69精品久久久久9| 久久天天躁狠狠躁夜夜爽蜜月| 91在线观看免费高清完整版在线观看| 欧美专区日韩视频| 国产精品久久久久久久久久久新郎| 欧美久久精品一级黑人c片| 最近日韩中文字幕中文| 亚洲精品一区二三区不卡| 中文字幕综合在线| 热99精品只有里视频精品| 97久久国产精品| 国产在线观看精品| 68精品久久久久久欧美| 亚洲欧美日韩视频一区| 久久影院模特热| 国产精品亚洲精品| 欧美精品在线免费观看| 91中文精品字幕在线视频| 久久视频国产精品免费视频在线| 国产在线久久久| 国产精品久久久久久久7电影| 久久国产精品亚洲| 日本精品久久中文字幕佐佐木| 久久久久久久久久婷婷| 中文字幕精品av| 69久久夜色精品国产7777| 色综合天天狠天天透天天伊人| 国产精品女主播视频| 热门国产精品亚洲第一区在线| 国色天香2019中文字幕在线观看| 久久免费少妇高潮久久精品99| 5278欧美一区二区三区| 丝袜亚洲另类欧美重口| 亚洲第一中文字幕| 92看片淫黄大片欧美看国产片| 日韩人在线观看| 亚洲日本欧美中文幕| 深夜福利国产精品| 高清亚洲成在人网站天堂| 亚洲美腿欧美激情另类| 精品美女久久久久久免费| 欧美久久精品午夜青青大伊人| 国产精品电影观看| 国产欧美日韩丝袜精品一区| 日韩电影大全免费观看2023年上| 国产精品麻豆va在线播放| 日韩高清免费在线| 亚洲第一黄色网| 亚洲男女自偷自拍图片另类| 国产精品ⅴa在线观看h| 亚洲国产另类久久精品| 日产精品99久久久久久| 精品国产自在精品国产浪潮| 国产精品爽黄69天堂a| 亚洲精品久久久久久久久久久| 成人免费自拍视频| 久久成人18免费网站| 亚洲国产精久久久久久| 欧美色视频日本版| 992tv在线成人免费观看| 国产激情久久久| 久久久久国色av免费观看性色| 亚洲影院污污.| 欧美极品美女电影一区| 国产精品高潮视频| 日韩电视剧在线观看免费网站| 欧美日韩在线视频一区| 久久亚洲精品毛片| 国产精品日韩在线| 国产日韩欧美另类| 国产精品久久77777| 国产成人在线一区二区| 少妇高潮久久久久久潘金莲| 久久久久一本一区二区青青蜜月| 91产国在线观看动作片喷水| 欧美一级免费视频| 97国产在线观看| 亚洲**2019国产| 在线午夜精品自拍| 亚洲欧美视频在线| 亚洲毛片在线观看.| 一本色道久久88综合亚洲精品ⅰ| 欧美激情一二三| 中文字幕欧美日韩精品| 亚洲一区二区三区四区在线播放| 欧美性猛交xxx| 久久99国产精品自在自在app| 国产精品久久久久久久午夜| 国产99久久精品一区二区永久免费| 久久精品99久久久久久久久| 日韩网站免费观看| 色婷婷亚洲mv天堂mv在影片| 欧美国产在线视频| 色偷偷9999www| 国精产品一区一区三区有限在线| 美女视频久久黄| 国产精品久久久久久av下载红粉| 亚洲精品美女在线| 成人性生交大片免费看视频直播| 欧美视频国产精品| 92看片淫黄大片欧美看国产片| 亚洲一区中文字幕在线观看| 91欧美日韩一区| 成人黄色影片在线| 欧美性极品xxxx做受| 色av吧综合网| 欧美激情亚洲综合一区| 亚洲www视频| 日韩中文字幕视频在线观看| 日韩高清av一区二区三区| 中文字幕亚洲综合| 久久香蕉频线观| 亚洲韩国日本中文字幕| 欧美成aaa人片在线观看蜜臀| 亚洲欧美精品伊人久久| 久久综合亚洲社区| 亚洲bt欧美bt日本bt| 91系列在线观看| 国产一区二区三区毛片| 91在线网站视频| 91av视频在线免费观看| 久久偷看各类女兵18女厕嘘嘘| 国产精品丝袜久久久久久不卡| 羞羞色国产精品| 久久精品夜夜夜夜夜久久| 久久在精品线影院精品国产| 91香蕉嫩草神马影院在线观看| 欧美性资源免费| 久久99久国产精品黄毛片入口| 俺去啦;欧美日韩| 久久精品国产96久久久香蕉| 精品国产乱码久久久久酒店| 欧美性xxxxx极品| www.亚洲成人| 久久99精品久久久久久青青91| 日韩中文字幕在线| 国产一区二区三区精品久久久| 国产精品手机播放| 97国产精品免费视频| 久久中文字幕国产| 欧美日韩国产综合视频在线观看中文| 欧美在线观看网站| 亚洲欧美激情视频| 精品国产一区二区三区四区在线观看| 在线成人中文字幕| 精品久久香蕉国产线看观看gif| 亚洲无限乱码一二三四麻| 欧美日韩中文字幕日韩欧美| 亚洲成人网av| 6080yy精品一区二区三区| 国产精品极品美女在线观看免费| 亚洲欧美在线看| 777国产偷窥盗摄精品视频| 精品爽片免费看久久| 一夜七次郎国产精品亚洲| 久久久成人的性感天堂| 久久久久久欧美| 久久久久久69| 欧美日韩成人在线观看| 久久精视频免费在线久久完整在线看| 国产一区二区三区在线播放免费观看| 亚洲免费小视频| 欧美在线日韩在线|