特定のデータを、その内容に基づいてさまざまなクラスに分類したいと考えています。私は単純なベイズ分類器を使用してそれを行い、それが属する最良のカテゴリとして出力を取得します。しかし、ここで、トレーニング セット以外のニュースを「その他」のクラスに分類したいと考えています。トレーニング データ以外の各データを特定のクラスに手動で追加することはできません。これは、他にも膨大な数のカテゴリがあるためです。他のデータを分類する方法はありますか?
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);
}
}
}