2012-03-10 1 views
-2

私は、Weka API、Java、MySQL DB接続を備えたデータマイニングアプリケーションを開発しています。私はデータベースからアルゴリズムにデータを供給したい。私はhttp://weka.wikispaces.com/Use+Weka+in+your+Java+code#Instances-Databaseを使用しました。HibernateからWeka Java APIにどのようにデータを供給できますか?

私はHibernateを使用しており、hibernate.cfg.xmlファイルにデータベース接続情報があるため、DAOクラスに通常のメソッドを書き込んでデータを取得し、それをアルゴリズムに渡すことはできませんか?

+0

はあなたの提案を試してみましたが、失敗したことがありますか?私はここで最小限の問題を解決するのに失敗していますか? – aviad

+0

はい。あなたはあなたが提案したものを正確に行うことができます。 (これを行うには、どうすればよいのかについての助けが必要な場合は、現在動作している動作と動作していない動作、動作しない動作、動作しない動作、動作しない動作、 –

答えて

1

残念ながら、いくつかの点でWeka APIはかなり制約されています。そのため、Instancesオブジェクトが必要です。 IIRCこれはあなたがそうでなければ実装できるインターフェースではなく、実際に作成しなければならないオブジェクトです。

したがって、すべてのデータベースを照会して、Instanceを生成する必要があります。休止状態ではなく、データベースへの未加工のアクセスを使用しないと、2回実行する必要がなくなるため、2倍のメモリが必要になります。

0

私は最近これを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今、適切なフォーマットを持っており、アルゴリズムはそれに取り組むことができます(あなたはGUIで作業したい場合にも.arffファイルにそれを救うことができる)