Классификация текстов NaiveBayes Accord.NET

Я особенно новичок в согласии.net

Мой случай: классификация коротких текстов разной длины по более чем 100 различным категориям.

Образец входных данных (10 000 записей в файле .csv)

Текст ------------------------- Категория

Шкаф -------------------- Мебель и фурнитура

Журнальный столик -------------- Мебель и фурнитура

Стол из нержавеющей стали ----- Мебель и фурнитура

private static void bagOfWords(int[][] inputs, int[] outputs)
{
    var bow = new BagOfWords<int>();
    var quantizer = bow.Learn(inputs);
    string filenamebow = Path.Combine(Application.StartupPath, "News_BOW.accord");
    Serializer.Save(obj: bow, path: filenamebow);
    double[][] histograms = quantizer.Transform(inputs);

    // One way to perform sequence classification with an SVM is to use
    // a kernel defined over sequences, such as DynamicTimeWarping.

    // Create the multi-class learning algorithm as one-vs-one with DTW:
    var teacher = new MulticlassSupportVectorLearning<ChiSquare, double[]>()
    {
        Learner = (p) => new SequentialMinimalOptimization<ChiSquare, double[]>()
        {
           // Complexity = 100 // Create a hard SVM
        }
    };

    // Learn a multi-label SVM using the teacher
    var svm = teacher.Learn(histograms, outputs);

    // Get the predictions for the inputs
    int[] predicted = svm.Decide(histograms);

    // Create a confusion matrix to check the quality of the predictions:
    var cm = new GeneralConfusionMatrix(predicted: predicted, expected: outputs);

    // Check the accuracy measure:
    double accuracy = cm.Accuracy;

    string filename = Path.Combine(Application.StartupPath, "News_SVM.accord");
    Serializer.Save(obj: svm, path: filename);
}

private void Form1_Load(object sender, EventArgs e)
{
    ...........
    ..........
    ...........
    dTable = worksheet.ExportDataTable();
    /////////////////////////////////////////////////

    StringBuilder sWords = new StringBuilder();
    string[][] swords = new string[dTable.Rows.Count][];
    int i = 0;

    foreach (DataRowView dr in dTable.DefaultView)
    {
        swords[i] = Tokenize(dr[0].ToString());
        i++;
    }

    Codification codebook = new Codification(dTable, new string[] { "Title", "Category" });
    DataTable symbols = codebook.Apply(dTable);
    int[][] inputs = symbols.ToJagged<int>(new string[] { "Title" });
    int[] outputs = symbols.ToArray<int>("Category");

    bagOfWords(inputs, outputs);
    DataTable input_dTable = worksheetInput.ExportDataTable();
    //How to continue from here and get the batch result as output DataTable
}

Как мы передаем DataTable в качестве входных данных и получаем пакетные результаты в качестве выходных данных в виде DataTable после обучения модели?

Аналогичный проект github: Текстовая классификация NaiveBayes


person Paiseh99    schedule 01.12.2019    source источник