Ejemplo n.º 1
0
        // 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);
            }
        }
Ejemplo n.º 2
0
        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);
            }
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        // 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);
        }