java - Clasificando datos con bayes ingenuos usando LingPipe
machine-learning classification (2)
Quiero clasificar ciertos datos en diferentes clases en función de su contenido. Lo hice usando el clasificador de bayes naive y obtuve un resultado como la mejor categoría a la que pertenece. Pero ahora quiero clasificar las noticias distintas a las del conjunto de capacitación en la clase "otros". No puedo agregar manualmente todos y cada uno de los datos que no sean los datos de capacitación en una clase determinada, ya que tiene un gran número de otras categorías. Entonces, ¿hay alguna manera de clasificar los demás datos?
private static File TRAINING_DIR = new File("4news-train");
private static File TESTING_DIR = new File("4news-test");
private static String[] CATEGORIES = { "c1", "c2", "c3", "others" };
private static int NGRAM_SIZE = 6;
public static void main(String[] args) throws ClassNotFoundException, IOException {
DynamicLMClassifier<NGramProcessLM> classifier = DynamicLMClassifier.createNGramProcess(CATEGORIES, NGRAM_SIZE);
for (int i = 0; i < CATEGORIES.length; ++i) {
File classDir = new File(TRAINING_DIR, CATEGORIES[i]);
if (!classDir.isDirectory()) {
String msg = "Could not find training directory=" + classDir + "/nTraining directory not found";
System.out.println(msg); // in case exception gets lost in shell
throw new IllegalArgumentException(msg);
}
String[] trainingFiles = classDir.list();
for (int j = 0; j < trainingFiles.length; ++j) {
File file = new File(classDir, trainingFiles[j]);
String text = Files.readFromFile(file, "ISO-8859-1");
System.out.println("Training on " + CATEGORIES[i] + "/" + trainingFiles[j]);
Classification classification = new Classification(CATEGORIES[i]);
Classified<CharSequence> classified = new Classified<CharSequence>(text, classification);
classifier.handle(classified);
}
}
}
Naive Bayes le da la "confianza" en cada clasificación, ya que calcula
P(y|x) ~ P(y)P(x|y)
Hasta la normalización por P(x)
es una probabilidad de que x
sea una parte de la clase y
. Simplemente puede cortar este valor y decir que
cl(x) = "other" iff max_{over y}(P(y|x)) < T
donde T
puede ser, por ejemplo, confianza mínima en el conjunto de entrenamiento
T = min_{over x and y in Training set}( P(y|x) )
Solo serialice el objeto ... significa escribir el objeto intermedio en un archivo y ese será su modelo ...
Luego, para las pruebas, solo tiene que pasar los datos al modelo, sin necesidad de entrenar cada vez ... Será más fácil para usted