我正在開發一個Weka API,Java和MySQL數據庫連接的數據挖掘應用程序。我想將數據庫中的數據提供給算法。我用http://weka.wikispaces.com/Use+Weka+in+your+Java+code#Instances-Database。如何將數據從Hibernate提供給Weka Java API?
由於我使用Hibernate和hibernate.cfg.xml
文件有數據庫連接信息,我不能只是在DAO類中編寫一個常規方法來檢索數據,然後將其傳遞給算法?
我正在開發一個Weka API,Java和MySQL數據庫連接的數據挖掘應用程序。我想將數據庫中的數據提供給算法。我用http://weka.wikispaces.com/Use+Weka+in+your+Java+code#Instances-Database。如何將數據從Hibernate提供給Weka Java API?
由於我使用Hibernate和hibernate.cfg.xml
文件有數據庫連接信息,我不能只是在DAO類中編寫一個常規方法來檢索數據,然後將其傳遞給算法?
不幸的是Weka API在某些方面相當有限。因此,您將需要有Instances對象。 IIRC這不是你可以實現的接口,而是你必須創建的實際對象。
因此,您可能需要查詢您的所有數據庫並生成Instance
。不使用休眠,但原始數據庫訪問將使您無法做兩件事,因此需要兩倍的內存。
我最近用Hibernate做了這個,但是沒有辦法讓一個Hibernate類可以簡單地放入WEKA中。我已經這樣做了:
樣品代碼(WEKA 3.7)
ArrayList<Attribute> atts = new ArrayList<Attribute>();
atts.add(new Attribute("attribute1"));
atts.add(new Attribute("attribute1"));
atts.add(new Attribute("id", (ArrayList<String>) null));
data = new Instances("yourData", atts, 0);
DAOModel dao = getYourDaoModelHereFromHibernateHoweverYouWantIt();
for (Model m : dao.findAll()) {
vals = new double[data.numAttributes()];
vals[0] = m.getAttribute1();
vals[1] = m.getAttribute2();
vals[2] = data.attribute(2).addStringValue(m.getId());
data.add(new DenseInstance(1.0, vals));
}
data
現在有正確的格式和算法,可以使用它(你也可以將它保存到一個文件.arff如果你想使用GUI工作)
你想你的建議和失敗?我在這裏看不到最小的解決問題的努力? – aviad 2012-03-10 16:42:58
是的。你可以完全按照你的建議去做。 (如果您在如何執行此操作方面需要幫助,請提供更多關於當前工作和不工作的信息,以及不在何處,爲什麼不。) – 2012-03-10 16:38:58