【问题标题】:How can I feed data from Hibernate to the Weka Java API?如何将数据从 Hibernate 提供给 Weka Java API?
【发布时间】:2012-03-27 17:38:47
【问题描述】:

我正在开发一个具有 Weka API、Java 和 MySQL DB 连接性的数据挖掘应用程序。我想将数据库中的数据提供给算法。我用http://weka.wikispaces.com/Use+Weka+in+your+Java+code#Instances-Database

由于我使用 Hibernate 并且hibernate.cfg.xml 文件有数据库连接信息,我不能在 DAO 类中编写一个普通方法来检索数据,然后将其传递给算法吗?

【问题讨论】:

  • 是的。你可以完全按照你的建议去做。 (如果您在如何执行此操作方面需要帮助,请提供更多信息,说明目前哪些可行,哪些不可行,哪些地方不可行,为什么不可行。)
  • 您尝试过您的建议并失败了吗?我在这里看不到最小的问题解决工作?

标签: data-mining java weka


【解决方案1】:

不幸的是,Weka API 在某些方面受到很大限制。因此,您将需要有 Instances 对象。 IIRC 这不是您可以通过其他方式实现的接口,而是您必须创建的实际对象。

因此,您可能需要查询所有数据库并从中生成Instances。不使用休眠但原始数据库访问将使您免于做两次事情,因此需要两倍的内存。

【讨论】:

    【解决方案2】:

    我最近使用 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 现在具有正确的格式,算法可以使用它(如果您想使用 GUI,也可以将其保存到 .arff 文件)

    【讨论】:

      猜你喜欢
      • 2018-03-06
      • 2020-06-04
      • 2018-06-19
      • 2013-03-29
      • 1970-01-01
      • 1970-01-01
      • 2019-01-05
      • 2019-08-18
      • 2022-01-09
      相关资源
      最近更新 更多