Exemple #1
0
        public static double logarytm(Obiekt obiekt1, Obiekt obiekt2)
        {
            double suma = 0;

            for (int i = 0; i < obiekt1.parametry.Count; i++)
            {
                suma += Math.Abs(Math.Log(obiekt1.parametry[i]) - Math.Log(obiekt2.parametry[i]));
            }
            return(suma);
        }
Exemple #2
0
        public static double euklides(Obiekt obiekt1, Obiekt obiekt2)
        {
            double suma = 0;

            for (int i = 0; i < obiekt1.parametry.Count; i++)
            {
                suma += Math.Pow(obiekt1.parametry[i] - obiekt2.parametry[i], 2);
            }
            return(Math.Sqrt(suma));
        }
Exemple #3
0
        public static double minkowski(Obiekt obiekt1, Obiekt obiekt2, double p)
        {
            double suma = 0;

            for (int i = 0; i < obiekt1.parametry.Count; i++)
            {
                suma += Math.Pow(Math.Abs(obiekt1.parametry[i] - obiekt2.parametry[i]), p);
            }
            return(Math.Pow(suma, 1 / p));
        }
Exemple #4
0
        public static double manhattan(Obiekt obiekt1, Obiekt obiekt2)
        {
            double suma = 0;

            for (int i = 0; i < obiekt1.parametry.Count; i++)
            {
                suma += Math.Abs(obiekt1.parametry[i] - obiekt2.parametry[i]);
            }
            return(suma);
        }
Exemple #5
0
        public static double czebyszew(Obiekt obiekt1, Obiekt obiekt2)
        {
            double suma = 0;

            for (int i = 0; i < obiekt1.parametry.Count; i++)
            {
                if (suma < Math.Abs(obiekt1.parametry[i] - obiekt2.parametry[i]))
                {
                    suma = Math.Abs(obiekt1.parametry[i] - obiekt2.parametry[i]);
                }
            }
            return(suma);
        }
Exemple #6
0
        public static List <Obiekt> importData(string fileName)
        {
            string line;

            string[]      lineSplit;
            List <Obiekt> allData = new List <Obiekt>();

            System.IO.StreamReader file = new System.IO.StreamReader(fileName);
            while ((line = file.ReadLine()) != null)
            {
                List <double> parametry = new List <double>();
                lineSplit = line.Split('\t');
                for (int i = 0; i < (lineSplit.Length - 1); i++)
                {
                    parametry.Add(double.Parse(lineSplit[i], CultureInfo.InvariantCulture));
                }
                Obiekt data = new Obiekt(parametry, int.Parse(lineSplit[lineSplit.Length - 1]));
                allData.Add(data);
            }

            file.Close();
            return(allData);
        }
Exemple #7
0
        public static int knn(List <Obiekt> lista, Obiekt obiekt, int k, int metryka, double p = 2)
        {
            List <Obiekt> posortowane = new List <Obiekt>();

            posortowane.Add(lista[0]);

            switch (metryka)
            {
            case 1:
                for (int i = 1; i < lista.Count; i++)
                {
                    bool flag = false;
                    for (int j = 0; j < posortowane.Count; j++)
                    {
                        if (euklides(obiekt, lista[i]) < euklides(obiekt, posortowane[j]))
                        {
                            posortowane.Insert(j, lista[i]);
                            flag = true;
                            break;
                        }
                    }
                    if (flag == false)
                    {
                        posortowane.Add(lista[i]);
                    }
                }
                break;

            case 2:
                for (int i = 1; i < lista.Count; i++)
                {
                    bool flag = false;
                    for (int j = 0; j < posortowane.Count; j++)
                    {
                        if (manhattan(obiekt, lista[i]) < manhattan(obiekt, posortowane[j]))
                        {
                            posortowane.Insert(j, lista[i]);
                            flag = true;
                            break;
                        }
                    }
                    if (flag == false)
                    {
                        posortowane.Add(lista[i]);
                    }
                }
                break;

            case 3:
                for (int i = 1; i < lista.Count; i++)
                {
                    bool flag = false;
                    for (int j = 0; j < posortowane.Count; j++)
                    {
                        if (czebyszew(obiekt, lista[i]) < czebyszew(obiekt, posortowane[j]))
                        {
                            posortowane.Insert(j, lista[i]);
                            flag = true;
                            break;
                        }
                    }
                    if (flag == false)
                    {
                        posortowane.Add(lista[i]);
                    }
                }
                break;

            case 4:
                for (int i = 1; i < lista.Count; i++)
                {
                    bool flag = false;
                    for (int j = 0; j < posortowane.Count; j++)
                    {
                        if (minkowski(obiekt, lista[i], p) < minkowski(obiekt, posortowane[j], p))
                        {
                            posortowane.Insert(j, lista[i]);
                            flag = true;
                            break;
                        }
                    }
                    if (flag == false)
                    {
                        posortowane.Add(lista[i]);
                    }
                }
                break;

            case 5:
                for (int i = 1; i < lista.Count; i++)
                {
                    bool flag = false;
                    for (int j = 0; j < posortowane.Count; j++)
                    {
                        if (euklides(obiekt, lista[i]) < euklides(obiekt, posortowane[j]))
                        {
                            posortowane.Insert(j, lista[i]);
                            flag = true;
                            break;
                        }
                    }
                    if (flag == false)
                    {
                        posortowane.Add(lista[i]);
                    }
                }
                break;
            }

            Dictionary <int, int> klasyDec = new Dictionary <int, int>();

            for (int i = 0; i < k; i++)
            {
                if (klasyDec.ContainsKey(posortowane[i].klasa))
                {
                    klasyDec[posortowane[i].klasa]++;
                }
                else
                {
                    klasyDec.Add(posortowane[i].klasa, 1);
                }
            }
            int klasa = klasyDec.Aggregate((x, y) => x.Value < y.Value ? x : y).Key; //znalezione na stackoverflow, wyszukuje klucz o najmniejszej wartości

            return(klasa);
        }