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