Как передать данные из Hibernate в API Weka Java? - PullRequest
0 голосов
/ 10 марта 2012

Я занимаюсь разработкой приложения для интеллектуального анализа данных с подключением Weka API, Java и MySQL DB.Я хочу передать данные из базы данных в алгоритм.Я использовал http://weka.wikispaces.com/Use+Weka+in+your+Java+code#Instances-Database.

Поскольку я использую Hibernate, а файл hibernate.cfg.xml содержит информацию о соединении с базой данных, я не могу просто написать обычный метод в классе DAO для извлечения данных, а затем передать его алгоритму

Ответы [ 2 ]

1 голос
/ 11 марта 2012

API Weka, к сожалению, в некоторых отношениях весьма ограничен.Таким образом, вам понадобятся объекты Instances.IIRC - это не интерфейс, который вы могли бы реализовать иначе, а реальный объект, который вы должны создать.

Поэтому вам, вероятно, потребуется запросить всю вашу базу данных и получить из нее Instance s.Не использование гибернации, но доступ к базе данных в чистом виде избавит вас от необходимости делать что-то дважды, что потребует вдвое больше памяти.

0 голосов
/ 15 марта 2012

Я недавно сделал это с 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, если вы хотите работать с графическим интерфейсом)

...