membutuhkan
Jalankan algoritma K-Means pada bidang tabel dalam database MySQL dan tulis data yang diproses ke dalam tabel baru.
Kode Sumber dan Driver
kmeans_jb51.rar
Kode Sumber
Impor java.sql.*; impor java.util.*;/***@author tianshl*@Version 2018/1/13 11:13 AM*/Kelas Publik Kmeans {// Data Sumber DAFTAR PRIBADI <Integer> Origins = New ArrayList <> (); // dikelompokkan data peta pribadi <ganda, daftar <integer>> dikelompokkan; // Daftar Centroid Awal Daftar Pribadi <Bouble> Core; // Sumber Data Tablename Private String; Private String Colname; / *** Metode Konstruktor** @param Tablename Sumber Data Tabel Nama Tabel* @param Colname Sumber Data Nama kolom* @param core Pusat Daftar Massal*/ Private Kmeans (String Tablename, String Colname, Daftar <Wouble> Core) {this.cores = core; this.tablename = tableName; this.colname = colname; } / ** * Hitung ulang pusat massa * * @return Daftar baru centroid * / daftar pribadi <mouble> newCores () {Daftar <Wouble> newCores = new ArrayList <> (); untuk (daftar <integer> v: grouped.values ()) {newcores.add (v.stream (). reduksi (0, (jumlah, num) -> jumlah + num) / (v.size () + 0.0)); } Collections.sort (newcores); mengembalikan Newcore; } / ** * Tentukan apakah itu berakhir * * @return bool * / private boolean isover () {list <double> _cores = newCores (); untuk (int i = 0, len = core. mengembalikan false; }} return true; } / *** Pengelompokan data* / private void setGrouped () {grouped = new HashMap <> (); Inti ganda; untuk (Integer Origin: Origins) {core = getCore (Origin); if (! Grouped.containsKey (core)) {Grouped.put (Core, New ArrayList <> ()); } Grouped.get (core) .add (asal); }} / *** Pilih centroid** @param num data yang akan dikelompokkan* @return centroid* / private double getCore (integer num) {// daftar perbedaan <mouble> diffs = arraylist baru <> (); // Hitung perbedaan untuk (inti ganda: core) {diffs.add (math.abs (num - core)); } // Perbedaan minimum-> indeks-> centroid core core core yang sesuai (diffs.indexof (collections.min (diffs))); }/*** Tetapkan koneksi basis data* @Return Connection*/koneksi pribadi getConn () {coba {// URL menunjuk ke nama database yang akan diakses mydata string url = "jdbc: mysql: // localhost: 3306/data_analysis_dev"; // nama pengguna selama string konfigurasi mySQL user = "root"; // Kata sandi selama MySQL Configuration String Password = "Root"; // Muat driver class.forname ("com.mysql.jdbc.driver"); // Nyatakan koneksi koneksi koneksi conn = driverManager.getConnection (url, pengguna, kata sandi); if (conn.isclosed ()) {System.out.println ("Menghubungkan ke database gagal!"); kembali nol; } System.out.println ("Menghubungkan ke database berhasil!"); return conn; } catch (Exception e) {System.out.println ("Koneksi Conn Gagal!"); e.printstacktrace (); } return null; } / *** Tutup koneksi database** @param conn koneksi* / private void tutup (koneksi kon) {coba {if (conn! = Null &&! Conn.isclosed ()) conn.close (); } catch (Exception e) {E.PrintStackTrace (); }} / *** Dapatkan data sumber* / private void getorigins () {connection conn = null; coba {conn = getConn (); if (conn == null) kembali; Pernyataan pernyataan = conn.createStatement (); Hasil rs = pernyataan.executeQuery (string.format ("Select %s dari %s", colname, tableName)); while (rs.next ()) {origins.add (rs.getint (1)); } conn.close (); } catch (Exception e) {E.PrintStackTrace (); } akhirnya {tutup (conn); }} / *** Tulis data ke tabel baru* / private void write () {connection conn = null; coba {conn = getConn (); if (conn == null) kembali; // Buat pernyataan pernyataan tabel = conn.createStatement (); // hapus pernyataan tabel data lama.Execute ("Jatuhkan tabel jika ada K_means;"); // Buat pernyataan tabel baru. Execute ("Buat tabel jika tidak ada K_Means (` core` desimal (11, 7), `col` integer (11));"); // Pengajuan Otomatis dari Conn.setAutocommit (false); Disiapkan ps = conn.preparestatement ("masukkan ke dalam nilai k_means (?,?)"); untuk (map.entry <ganda, daftar <integer>> entri: grouped.entryset ()) {double core = entry.getKey (); untuk (nilai integer: entry.getValue ()) {ps.setDouble (1, core); ps.setint (2, nilai); ps.addbatch (); }} // eksekusi batch ps.executebatch (); // melakukan transaksi conn.commit (); // tutup koneksi conn.close (); } catch (Exception e) {E.PrintStackTrace (); } akhirnya {tutup (conn); }} / *** Proses data* / private void run () {System.out.println ("Dapatkan data sumber"); // Dapatkan sumber data getorigins (); // berhenti mengelompokkan boolean isover = false; System.out.println ("Pemrosesan Pengelompokan Data"); while (! Isover) {// Pengelompokan data setGrouped (); // Tentukan apakah akan menghentikan pengelompokan isover = isover (); } System.out.println ("Tulis data yang diproses ke database"); // tulis data yang dikelompokkan ke tabel baru write (); System.out.println ("Tulis data untuk menyelesaikan"); } public static void main (string [] args) {list <double> core = new ArrayList <> (); core.add (260.0); core.add (600.0); // Nama Tabel, Nama Kolom, Daftar Centroid Kmeans Baru ("Atribut", "Attr_length", Core) .run (); }}File sumber
Kmeans.java
Kompilasi
Javac Kmeans.java
berlari
# Tentukan Perpustakaan Ketergantungan Java -djava.ext.dirs =./Lib Kmeans
Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.