Я особенно новичок в согласии.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