2012-03-10 28 views
-2

我正在開發一個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類中編寫一個常規方法來檢索數據,然後將其傳遞給算法?

+0

你想你的建議和失敗?我在這裏看不到最小的解決問題的努力? – aviad 2012-03-10 16:42:58

+0

是的。你可以完全按照你的建議去做。 (如果您在如何執行此操作方面需要幫助,請提供更多關於當前工作和不工作的信息,以及不在何處,爲什麼不。) – 2012-03-10 16:38:58

回答

1

不幸的是Weka API在某些方面相當有限。因此,您將需要有Instances對象。 IIRC這不是你可以實現的接口,而是你必須創建的實際對象。

因此,您可能需要查詢您的所有數據庫並生成Instance。不使用休眠,但原始數據庫訪問將使您無法做兩件事,因此需要兩倍的內存。

0

我最近用Hibernate做了這個,但是沒有辦法讓一個Hibernate類可以簡單地放入WEKA中。我已經這樣做了:

  • 產生在具有可根據你的需要的模型信息數據庫中的表(我已經做到了這一點,因爲我會需要做的很複雜,耗時的查詢每一行。這樣一來,我做重活一次,從一個簡單的表格只是閱讀)
  • 創建你的POJO,DAO,什麼不可以
  • 只需要設置好你的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工作)

相關問題