weka使用Java API 從mysql中讀取數據

1.前言

Weka是一個機器學習的算法庫,它支持從文件中讀取數據,也支持從數據庫中讀取數據.java

從實際開發上來看,從數據庫讀取數據,更符合實際要求.mysql

2.pom.xml

建立一個maven工程,添加依賴算法

<dependencies>
        <!--weka算法庫-->
        <dependency>
            <groupId>nz.ac.waikato.cms.weka</groupId>
            <artifactId>weka-stable</artifactId>
            <version>3.8.3</version>
        </dependency>
        <!--mysql驅動包-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.31</version>
        </dependency>
    </dependencies>

3.Java代碼

import weka.core.Instances;
import weka.core.converters.ConverterUtils;
import weka.experiment.InstanceQuery;

public class Test {
    public static void main(String[] args) {
        ConverterUtils.DataSource source = null;
        try {
            InstanceQuery query = new InstanceQuery();
            query.setUsername("root");
            query.setPassword("123456");
            query.setQuery("select * from regression");
            Instances data = query.retrieveInstances();
            System.out.println(data);
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

4.一些問題

  • 運行後會出現以下問題

  • 這個是由於jdbc的驅動不符合,網上給出的解決方案並不適合maven工程
  • 解決方案以下:
  • 找到本地Maven倉庫下weka的地址,個人地址以下

  • 將weka-stable-3.8.3.jar備份一份,解壓

  • 解壓後在weka-stable-3.8.3\weka\experiment目錄下,編輯DatabaseUtils.props文件

  • 編輯如下內容
#將其餘的jdbcDriver 和jdbcURL註釋掉,留下你的數據庫驅動和地址
jdbcDriver=org.gjt.mm.mysql.Driver
jdbcURL=jdbc:mysql://localhost:3306/algorithm
# specific data types,具體的數據類型修改以下,主要是去掉註釋

string, getString() = 0;    --> nominal

boolean, getBoolean() = 1;  --> nominal

double, getDouble() = 2;    --> numeric

byte, getByte() = 3;        --> numeric

short, getByte()= 4;        --> numeric

int, getInteger() = 5;      --> numeric

long, getLong() = 6;        --> numeric

float, getFloat() = 7;      --> numeric

date, getDate() = 8;        --> date

text, getString() = 9;      --> string

time, getTime() = 10;       --> date

BigDecimal,getBigDecimal()=11;   -->nominal 
#查看如下內容是否添加進去,尤爲是int類型
TINYINT=3

SMALLINT=4

SHORT=5

INTEGER=5

INT=5

INT_UNSIGNED=6

BIGINT=6

LONG=6

REAL=7

NUMERIC=2

DECIMAL=2

FLOAT=2

DOUBLE=2

CHAR=0

TEXT=0

VARCHAR=0

LONGVARCHAR=9

BINARY=0

VARBINARY=0

LONGVARBINARY=9

BIT=1

BLOB=8

DATE=8

TIME=8

DATETIME=8

TIMESTAMP=8
  • 編輯完成後保存,將修改後的DatabaseUtils.props覆蓋到原來的jar中

5.運行結果

能夠看到,weka的已經將數據庫的數據轉換爲其專有的格式ARFFsql

相關文章
相關標籤/搜索