brauchen
Führen Sie den K-Means-Algorithmus in einer Tabelle in einer MySQL-Datenbank aus und schreiben Sie die verarbeiteten Daten in die neue Tabelle.
Quellcode und Treiber
kmeans_jb51.rar
Quellcode
Java.sql.*; Java.util importieren. // gruppy data private map <double, list <Integer >> gruppiert; // Initial Centroid List Private List <Double> Cores; // Datenquelle private String Tableame; private String colname; / *** Konstruktor -Methode** @param tableName Quelldatentabelle Name* @param colname Quelldaten -Spaltenname* @param Cores Center of Mass List*/ private kmeans (String TablName, String Colname, Liste <Double> Cores) {this.cores = cores; this.tableName = tableName; this.colname = colname; } / ** * berechnen die Massenzentrale * * @return Neue Liste der Zentroiden * / private Liste <Double> newcores () {list <double> newcores = new ArrayList <> (); für (list <Integer> v: grupped.values ()) {newcores.add (v.stream (). Reduzieren (0, (sum, num) -> sum + num) / (v.size () + 0,0)); } Collections.sort (Newcores); Newcores zurückgeben; } / ** * Bestimmen Sie, ob es endet * * @return bool * / private boolean isover () {list <double> _cores = newcores (); für (int i = 0, len = cores.size (); i <len; i ++) {if (! cores.get (i) .toString (). Equals (_cores.get (i) .ToString ())) {// neue Zentroidkores = _cores; false zurückgeben; }} return true; } / *** Datengruppierung* / private void setGrouped () {gruppeed = new HashMap <> (); Doppelkern; für (ganzzahliger Ursprung: Origins) {core = getCore (Origin); if (! grupped.containsKey (core)) {grupped.put (core, new ArrayList <> ()); } grupped.get (core) .add (Origin); }} / *** Wählen Sie die Centroid** @param num -Daten aus, die gruppiert werden soll // Berechnen Sie die Differenz für (Doppelkern: Cores) {diffs.add (math.abs (num - core)); } // Mindestdifferenz-> index-> entsprechende Zentroid-Return Cores.get (Diffs.Indexof (collections.min (Diffs))); }/*** eine Datenbankverbindung festlegen* @return Verbindung*/private Verbindung getConn () {try {// Die URL zeigt auf den Datenbanknamen, zu dem zugegriffen werden soll, mydata String url = "jdbc: mysql: // localhost: 3306/data_analysis_dev"; // Benutzername während mySQL configuration String user = "root"; // Passwort während der mySQL -Konfiguration String Passwort = "root"; // laden Sie die Treiberklasse.forname ("com.mysql.jdbc.driver"); // Die Verbindungsobjektverbindung deklarieren conn = driverManager.getConnection (URL, Benutzer, Kennwort); if (conn.isclosed ()) {System.out.println ("Verbindung mit der Datenbank fehlgeschlagen!"); null zurückkehren; } System.out.println ("erfolgreich mit der Datenbank herstellen!"); Conn zurückgeben; } catch (Ausnahme e) {System.out.println ("Conn -Verbindung fehlgeschlagen!"); E. printstacktrace (); } return null; } / *** Schließen Sie die Datenbankverbindung** @param conn Verbindung* / private void close (Verbindung conn) {try {if (conn! = Null &&! Conn.isclosed ()) conn.close (); } catch (Ausnahme e) {e.printstacktrace (); }} / *** Quelldaten abrufen* / private void getorigins () {Verbindung conn = null; try {conn = getConn (); if (conn == null) return; Anweisung Anweisung = Conn.CreateStatement (); ResultSet rs = Anweisung.executeQuery (String.Format ("Select %s aus %s", colname, tableName)); while (rs.Next ()) {Origins.Add (rs.getint (1)); } conn.close (); } catch (Ausnahme e) {e.printstacktrace (); } endlich {close (conn); }} / *** Schreiben Sie Daten in die neue Tabelle* / private void write () {Connection conn = null; try {conn = getConn (); if (conn == null) return; // Tabelle Anweisung erstellen Anweisung = conn.CreateStatement (); // die alte Datentabellenanweisung löschen.execute ("Droptabelle, wenn es k_means existiert;"); // Neue Tabellenanweisung erstellen.execute ("Tabelle erstellen, wenn nicht existiert K_means (" Core "Dezimal (11, 7)," col "Integer (11));"); // Automatische Einreichung von Conn.SetAutoCommit (Falsch); PrepectStatement ps = conn.preparestatement ("In k_means Werte einfügen (?,?)"); für (map.Entry <double, list <Integer >> Eintrag: grupped.EntrySet ()) {double core = Eintrag.getKey (); für (Ganzzahlwert: Eintrag.getValue ()) {ps.setDouble (1, Core); ps.Setint (2, Wert); ps.addbatch (); }} // Batch -Ausführung von ps.executeBatch (); // Transaktion Conn.Commit () begehen; // Verbindung conn.close () schließen; } catch (Ausnahme e) {e.printstacktrace (); } endlich {close (conn); }} / *** Prozessdaten* / private void run () {System.out.println ("Quelldaten abrufen"); // Quelldaten getorigines () abrufen; // Aufhören, boolean isover = false zu gruppieren; System.out.println ("Datengruppierungsverarbeitung"); while (! isover) {// Datengruppierungsgruppierung setgrouped (); // Bestimmen Sie, ob die Gruppierung von isover = isover () aufhören soll; } System.out.println ("Verarbeitete Daten in die Datenbank schreiben"); // Gruppierte Daten in eine neue Tabelle schreiben (); System.out.println ("Daten schreiben, um zu vervollständigen"); } public static void main (string [] args) {list <double> cores = new ArrayList <> (); cores.add (260.0); cores.add (600,0); // Tabellenname, Spaltenname, Centroid -Liste neue Kmeans ("Attribute", "Attr_length", Cores) .run (); }}Quelldatei
KMEANS.JAVA
Zusammenstellung
Javac Kmeans.Java
laufen
# Abhängigkeitsbibliothek Java -djava.ext.dirs =./Lib Kmeans angeben
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.