2015-01-08 2 views
5

Хе там! Мне просто нужна помощь для реализации алгоритма классификации текста наивного байеса в Java, чтобы просто проверить набор данных для исследовательских целей. Обязательно реализовать алгоритм в Java; скорее используя инструменты Weka или Rapid Miner, чтобы получить результаты!Алгоритм классификации текста наивного байеса Наивный Байес


Мои Наборы данные имеют следующий вид данных:

Doc Words Category 

означает, что у меня есть учебные слова и категория для каждой тренировки (String), известной заранее. Некоторые из набора данных приводится ниже:

   Doc  Words                Category   
    Training 
       1  Integration Communities Process Oriented Structures...(more string)  A 
       2  Integration Communities Process Oriented Structures...(more string)  A 
       3  Theory Upper Bound Routing Estimate global routing...(more string)  B 
       4  Hardware Design Functional Programming Perfect Match...(more string)  C 
       . 
       . 
       . 
    Test 
       5  Methodology Toolkit Integrate Technological Organisational 
       6  This test contain string naive bayes test text text test 

SO Набор данных поступает из базы данных MySQL, и он может содержать несколько строк учебных и тестовых строк, как хорошо! Дело в том, что мне просто нужно реализовать алгоритм классификации текста наивного байеса в Java.

Алгоритм должен следовать следующий пример упоминается hereТаблица 13.1

Источник: Read here


Дело в том, что я могу реализовать алгоритм в Java кодекса сам, но я просто нужно знать, возможно ли, что существует какая-то библиотека Java с документацией исходного кода, которая позволяет мне просто проверять результаты.

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

Итак, расскажите, пожалуйста, о какой-либо хорошей библиотеке java, которая помогает моему коду использовать этот алгоритм на Java, и это могло бы сделать мой набор данных возможным для обработки результатов, или кто-нибудь может дать мне хорошие идеи о том, как делайте это легко ... что-то хорошее, что может мне помочь.

Буду благодарен вам за помощь. Заранее спасибо

+0

Где вы работаете? –

+1

Вопросы, предлагающие нам рекомендовать или находить книгу, инструмент, библиотеку программного обеспечения, учебник или другой ресурс вне сайта, не относятся к теме для переполнения стека. – RandomSeed

ответ

0

Пожалуйста, взгляните на Bow toolkit.

Имеет лицензию и исходный код Gnu. Некоторые из его кодов включают в себя

Установка весов векторных слов в соответствии с наивными байями, TFIDF и несколькими другими методами.

Выполнение разделов испытаний/поездов и автоматических классификационных испытаний.

Это не библиотека Java, но вы можете скомпилировать код C, чтобы убедиться, что у вас Java аналогичные результаты для данного корпуса.

Я также заметил достойный Dr. Dobbs article, который реализуется в Perl. Еще раз, не желаемая Java, но даст вам одноразовые результаты, о которых вы просите.

+0

Нет, нужно только java! –

+0

Вы сказали: «... или кто-нибудь может дать мне хорошие идеи, как сделать это легко ... что-то хорошее, что может мне помочь». Обе эти ссылки дадут вам эту идею, хороши и помогут вам. Порт с C или Perl на Java будет иметь определенную концентрацию, но это не сложно. – rajah9

0

Пожалуйста, используйте SciPy из питона. Существует уже реализация того, что вам нужно:

class sklearn.naive_bayes.MultinomialNB(alpha=1.0, fit_prior=True, class_prior=None)¶ 

scipy

0

Вы можете использовать платформу алгоритма как KNIME, он имеет множество алгоритмов классификации (Naive в ряде включен). Вы можете запустить его с помощью GUI или Java API.

2

В соответствии с вашим требованием вы можете использовать библиотеку обучения MLlib от apache. MLlib - это масштабируемая библиотека обучения Spark, состоящая из общих алгоритмов обучения и утилит. Существует также шаблон Java-кода для реализации алгоритма, использующего библиотеку. Итак, для начала вы можете:

Реализовать скелет java для Naive Bayes на их site, как показано ниже.

import org.apache.spark.api.java.JavaPairRDD; 
import org.apache.spark.api.java.JavaRDD; 
import org.apache.spark.api.java.function.Function; 
import org.apache.spark.api.java.function.PairFunction; 
import org.apache.spark.mllib.classification.NaiveBayes; 
import org.apache.spark.mllib.classification.NaiveBayesModel; 
import org.apache.spark.mllib.regression.LabeledPoint; 
import scala.Tuple2; 

JavaRDD<LabeledPoint> training = ... // training set 
JavaRDD<LabeledPoint> test = ... // test set 

final NaiveBayesModel model = NaiveBayes.train(training.rdd(), 1.0); 

JavaPairRDD<Double, Double> predictionAndLabel = 
    test.mapToPair(new PairFunction<LabeledPoint, Double, Double>() { 
    @Override public Tuple2<Double, Double> call(LabeledPoint p) { 
     return new Tuple2<Double, Double>(model.predict(p.features()), p.label()); 
    } 
    }); 
double accuracy = predictionAndLabel.filter(new Function<Tuple2<Double, Double>, Boolean>() { 
    @Override public Boolean call(Tuple2<Double, Double> pl) { 
     return pl._1().equals(pl._2()); 
    } 
    }).count()/(double) test.count(); 

Для тестирования ваших наборов данных, не лучшее решение здесь, чем использовать Spark SQL. MLlib отлично вписывается в API Spark. Чтобы начать использовать его, я бы рекомендовал сначала пройти через MLlib API, реализуя Алгоритм в соответствии с вашими потребностями. Это довольно просто, используя библиотеку. Чтобы сделать следующий шаг, чтобы разрешить обработку ваших наборов данных, просто используйте Spark SQL. Я порекомендую вам придерживаться этого. Я также много охотился за множеством опций, прежде чем приступать к этой простой в использовании библиотеке, и это полная поддержка для взаимодействия с некоторыми другими технологиями. Я бы разместил полный код здесь, чтобы полностью соответствовать вашему ответу. Но я думаю, что тебе хорошо.

+0

Пробовал, получил тот же ответ, но я не смог найти приемлемое решение (пример документации кода), чтобы начать с него, как то, что должно быть типом переменной обучения! и так далее, если вы знаете что-то более хорошее сообщение, спасибо –

+0

Используете ли вы Spark SQL для хранения ваших данных обучения? Поскольку вы упомянули в своем вопросе, что обучение и тест поступают из MySQL, который содержит несколько строк и категорий. Поэтому я не понимаю, почему вам трудно реализовать набор тренировок непосредственно в SQL. Могу ли я узнать, где именно вы столкнулись с проблемой? В противном случае я бы опубликовал весь блок кода для вас. Но на самом деле это вполне осуществимо, используя этот подход, просто немного изучите его, он есть в документах mllib и Spark SQL. Благодаря! – Anurag

+0

Дело в том, что я пытался, но я не смог пройти через него. Мне нужно использовать java, и я не могу определить, как начать работу, можете ли вы указать шаги в seqeunce! –

1

Вы можете использовать API-интерфейс Weka Java и включить его в свой проект, если вы не хотите использовать графический интерфейс.

Вот ссылка на документацию, чтобы включить классификатор в вашем коде: https://weka.wikispaces.com/Use+WEKA+in+your+Java+code

0

Если вы хотите реализовать Наивный байесовский классификации текста Алгоритм в Java, то WEKA Java API будет лучшим решением. Набор данных должен быть в формате .arff. Создание файла .arff из базы данных mySql очень просто. Вот вложение java-кода для классификатора - ссылка образца файла .arff.

Создайте новый текстовый документ. Откройте его с помощью Блокнота. Скопируйте и вставьте все тексты под ссылкой. Сохраните его как DataSet.arff. http://storm.cis.fordham.edu/~gweiss/data-mining/weka-data/weather.arff

Скачать Weka Java API: http://www.java2s.com/Code/Jar/w/weka.htm

Код для классификатора:

public static void main(String[] args) { 

    try { 
     StringBuilder txtAreaShow = new StringBuilder(); 

     //reads the arff file 
     BufferedReader breader = null; 
     breader = new BufferedReader(new FileReader("DataSet.arff")); 

     //if 40 attributes availabe then 39 will be the class index/attribuites(yes/no) 
     Instances train = new Instances(breader); 
     train.setClassIndex(train.numAttributes() - 1); 
     breader.close(); 

     // 
     NaiveBayes nB = new NaiveBayes(); 
     nB.buildClassifier(train); 

     Evaluation eval = new Evaluation(train); 
     eval.crossValidateModel(nB, train, 10, new Random(1)); 

     System.out.println("Run Information\n====================="); 
     System.out.println("Scheme: " + train.getClass().getName()); 
     System.out.println("Relation: "); 

     System.out.println("\nClassifier Model(full training set)\n==============================="); 
     System.out.println(nB); 

     System.out.println(eval.toSummaryString("\nSummary Results\n==================", true)); 
     System.out.println(eval.toClassDetailsString()); 
     System.out.println(eval.toMatrixString()); 


     //txtArea output 
     txtAreaShow.append("\n\n\n"); 
     txtAreaShow.append("Run Information\n===================\n"); 
     txtAreaShow.append("Scheme: " + train.getClass().getName()); 

     txtAreaShow.append("\n\nClassifier Model(full training set)" 
       + "\n======================================\n"); 
     txtAreaShow.append("" + nB); 

     txtAreaShow.append(eval.toSummaryString("\n\nSummary Results\n==================\n", true)); 
     txtAreaShow.append(eval.toClassDetailsString()); 
     txtAreaShow.append(eval.toMatrixString()); 
     txtAreaShow.append("\n\n\n"); 

     System.out.println(txtAreaShow.toString()); 

    } catch (FileNotFoundException ex) { 
     System.err.println("File not found"); 
     System.exit(1); 
    } catch (IOException ex) { 
     System.err.println("Invalid input or output."); 
     System.exit(1); 
    } catch (Exception ex) { 
     System.err.println("Exception occured!"); 
     System.exit(1); 
    } 
Смежные вопросы