// Funkcja klasyfikująca public bool Classyfi(string request) { SVMDataManager data = new SVMDataManager(); C_SVC model = new C_SVC(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"WAF\model.model")); // Buduje wektor na podstawie wprowadzonego tekstu var newX = SVMProblemBuilder.CreateVector(SVMDataManager.SeparateNonAlphanumeric(request), data.Vocabulary); //var predictedYProb = model.PredictProbabilities(newX); // Start analizy czasu na potrzeby testów //Stopwatch stopWatch = new Stopwatch(); //stopWatch.Start(); // Klasyfikacja nowo utworzonego wektora na podstawie modelu var predictedY = model.Predict(newX); // Logowanie czasu na potrzeby testów //File.WriteAllText(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"WAF\log.txt"), string.Format("The prediction is {0}. Time is {1}.", _predictionDictionary[(int)predictedY], stopWatch.ElapsedMilliseconds)); // Zwracanie wyniku if (predictedY == -1) { return(false); } else { return(true); } }
public bool Classyfi(string request) { SVMDataManager data = new SVMDataManager(); C_SVC model = new C_SVC(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"model.model")); request = request.Replace("&", " "); request = request.Replace("+", " "); request = request.Replace("%20", " "); request = request.Replace("/", " "); request = request.Replace("?", " "); request = request.Replace("Filter", " "); request = request.Replace("Test.aspx", " "); var newX = SVMProblemBuilder.CreateNode(request, data.Vocabulary); //var predictedYProb = model.PredictProbabilities(newX); Stopwatch stopWatch = new Stopwatch(); stopWatch.Start(); var predictedY = model.Predict(newX); File.WriteAllText(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"log.txt"), string.Format("The prediction is {0}. Time is {1}.", _predictionDictionary[(int)predictedY], stopWatch.ElapsedMilliseconds)); if (predictedY == -1) { return(false); } else { return(true); } }
public void Train() { SVMDataManager data = new SVMDataManager(); var problemBuilder = new SVMProblemBuilder(); var problem = problemBuilder.CreateProblem(data.RequestText, data.ClassValue, data.Vocabulary.ToList()); const double C = 0.5; C_SVC model = new C_SVC(problem, KernelHelper.LinearKernel(), C); // Train is called automatically here accuracy = model.GetCrossValidationAccuracy(100); model.Export(string.Format(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, string.Format(@"bin\model_{0}_accuracy.model", accuracy)))); System.IO.File.WriteAllLines(string.Format(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, string.Format(@"bin\model_{0}_vocabulary.txt", accuracy))), data.Vocabulary); }
// Uczenie algorytmu public void Train() { // Pobieranie danych z zestawów do trenowanie algorytmu znajduje się w konstruktorze klasy SVMDataManager -> SVMDataManager data = new SVMDataManager(); // Tworzenie macierzy (wraz z wektorami) var problemBuilder = new SVMProblemBuilder(); var problem = problemBuilder.CreateMatrix(data.RequestText, data.ClassValue, data.Vocabulary.ToList()); // Parametrem C dokonywana jest optymalizacja marginesu. Oznacza on wartość straty/kary błędnej klasyfikacji. const double C = 0.5; C_SVC model = new C_SVC(problem, KernelHelper.LinearKernel(), C); // Dokładność liczona jest procentowo na bazie danych treningowych. // Po wyznaczeniu przez algorytm najlepszej dostępnej hiperpłaszczyzny oddzielającej cechy od siebie, // przez stworzony model przepuszczane są jeszcze raz dane treningowe i liczony jest odsetek błędnych klasyfikacji na tej podstawie. accuracy = model.GetCrossValidationAccuracy(100); // Export modelu oraz słownika model.Export(string.Format(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, string.Format(@"WAF\model_{0}_accuracy.model", accuracy)))); System.IO.File.WriteAllLines(string.Format(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, string.Format(@"WAF\model_{0}_vocabulary.txt", accuracy))), data.Vocabulary); }