Exemplo n.º 1
0
        public static void GoOverfit()
        {
            PointsGeneration.PointGeneration form = new PointsGeneration.PointGeneration();
            form.Hide();
            form.GenerateLinearSeparable();
            MultidimensionalPoint[] testArray = new MultidimensionalPoint[100];
            MultidimensionalPoint[] points    = PointsGeneration.PointGeneration.points;
            Random rand = new Random();

            for (int i = 0; i < 5; ++i)
            {
                for (int j = 0; j < 20; ++j)
                {
                    testArray[i * 20 + j] = new MultidimensionalPoint(2, 0);
                    do
                    {
                        testArray[i * 20 + j].coordinates[0] = points[i * 100].coordinates[0] + rand.NextDouble() * points[i * 100].radius * 1.5;
                        testArray[i * 20 + j].coordinates[1] = points[i * 100].coordinates[1] + rand.NextDouble() * points[i * 100].radius * 1.5;
                    }while(form.Distance(testArray[i * 20 + j], points[i * 100]) > points[i * 100].radius &&
                           form.Distance(testArray[i * 20 + j], points[i * 100]) < points[i * 100].radius * 1.5);
                    testArray[i * 20 + j].pointClass = i;
                }
            }
            NeuralNetwork nn = new NeuralNetwork(points, new int[4] {
                2, 15, 15, 15
            }, 1, 0, 0.7, 0.01, 2, 1, 0.1);

            nn.TrainNetwork(150, testArray);
        }
        public MultidimensionalPoint[] ReadFisher(string path, string[] splitPointsString, char[] splitCoordinatesString)
        {
            StreamReader sr      = new StreamReader(path);
            string       rawData = sr.ReadToEnd();

            string[] notParsedPoints       = rawData.Split(splitPointsString, StringSplitOptions.RemoveEmptyEntries);
            MultidimensionalPoint[] result = new MultidimensionalPoint[notParsedPoints.Length];
            // Iterate over all array
            int dimensions = notParsedPoints[0].Count(c => c == splitCoordinatesString[0]);

            for (int j = 0; j < notParsedPoints.Length; ++j)
            {
                string[] oneString = notParsedPoints[j].Split(splitCoordinatesString, StringSplitOptions.None);
                for (int i = 0; i < oneString.Length; ++i)
                {
                    oneString[i] = oneString[i].Replace('.', ',');
                }
                double[] oneStringConverted = new double[oneString.Length];
                for (int i = 0; i < oneString.Length - 1; ++i)
                {
                    oneStringConverted[i] = Convert.ToDouble(oneString[i]);
                }
                switch (oneString[oneString.Length - 1])
                {
                case "setosa": oneStringConverted[oneString.Length - 1] = 0; break;

                case "versicolor": oneStringConverted[oneString.Length - 1] = 1; break;

                case "virginica": oneStringConverted[oneString.Length - 1] = 2; break;
                }
                result[j] = new MultidimensionalPoint(oneStringConverted);
            }
            return(result);
        }
        public MultidimensionalPoint[] ReadData(string path, string[] splitPointsString, char[] splitCoordinatesString)
        {
            StreamReader sr      = new StreamReader(path);
            string       rawData = sr.ReadToEnd();

            string[] notParsedPoints       = rawData.Split(splitPointsString, StringSplitOptions.None);
            MultidimensionalPoint[] result = new MultidimensionalPoint[notParsedPoints.Length];
            // Iterate over all array
            int dimensions = notParsedPoints[0].Count(c => c == splitCoordinatesString[0]);

            for (int j = 0; j < notParsedPoints.Length; ++j)
            {
                string[] oneString = notParsedPoints[j].Split(splitCoordinatesString, StringSplitOptions.None);
                for (int i = 0; i < oneString.Length; ++i)
                {
                    oneString[i] = oneString[i].Replace('.', ',');
                }
                double[] oneStringConverted = new double[oneString.Length];
                for (int i = 0; i < oneString.Length; ++i)
                {
                    oneStringConverted[i] = Convert.ToDouble(oneString[i]);
                }
                result[j] = new MultidimensionalPoint(oneStringConverted);
            }
            return(result);
        }
Exemplo n.º 4
0
 public void InitializeDataArray(int size)
 {
     points = new MultidimensionalPoint[userPointsCountInClass * size];
     for (int i = 0; i < points.Length; ++i)
     {
         points[i] = new MultidimensionalPoint(userNumberOfDimensions, 0);
     }
 }
 public static MultidimensionalPoint[] InitializeArrayOfPoints(int size)
 {
     MultidimensionalPoint[] result = new MultidimensionalPoint[size];
     for (int i = 0; i < result.Length; ++i)
     {
         result[i] = new MultidimensionalPoint(2, 0);
     }
     return(result);
 }
Exemplo n.º 6
0
        public int CalcTrueResultForExitNode(MultidimensionalPoint point, int nodeIndex)
        {
            int result = 0;

            if (nodeIndex == point.pointClass)
            {
                result = 1;
            }
            return(result);
        }
Exemplo n.º 7
0
        public double Distance(MultidimensionalPoint a, MultidimensionalPoint b)
        {
            double sum = 0;

            Debug.Assert(a.coordinates.Length == b.coordinates.Length);
            for (int i = 0; i < a.coordinates.Length; ++i)
            {
                sum += Math.Pow(a.coordinates[i] - b.coordinates[i], 2);
            }
            return(Math.Sqrt(sum));
        }
Exemplo n.º 8
0
        public void GeneratePointsOfClass(int startingIndex_, int pointClass_, Random random)
        {
            int sign   = 1;
            int length = points[startingIndex_].coordinates.Length;

            if (thoroughGenerationOfPoints || userNumberOfDimensions < 4)
            {
                for (int i = 1; i < userPointsCountInClass; ++i)
                {
                    points[startingIndex_ + i].pointClass = pointClass_;
                    do
                    {
                        for (int j = 0; j < points[startingIndex_].coordinates.Length; ++j)
                        {
                            sign = (random.NextDouble() > 0.5) ? 1 : -1;
                            points[startingIndex_ + i].coordinates[j] = points[startingIndex_].coordinates[j] + sign * random.NextDouble() * points[startingIndex_].radius;
                        }
                        double dist = Distance(points[startingIndex_], points[startingIndex_ + i]);
                        double rad  = points[startingIndex_].radius;
                    }while(Distance(points[startingIndex_], points[startingIndex_ + i]) > points[startingIndex_].radius);
                }
            }
            else
            {
                MultidimensionalPoint a  = new MultidimensionalPoint(userNumberOfDimensions, 0);
                MultidimensionalPoint b  = new MultidimensionalPoint(userNumberOfDimensions, points[startingIndex_].radius);
                double dist              = Distance(a, b);
                double transformingValue = points[startingIndex_].radius / dist;

                for (int j = 1; j < userPointsCountInClass; ++j)
                {
                    points[startingIndex_ + j].pointClass = pointClass_;
                    for (int i = 0; i < points[startingIndex_].coordinates.Length; ++i)
                    {
                        sign = (random.NextDouble() > 0.5) ? 1 : -1;
                        points[startingIndex_ + j].coordinates[i] = sign * random.NextDouble() * points[startingIndex_].radius * transformingValue + points[startingIndex_].coordinates[i];
                    }
                    Debug.Assert(Distance(points[startingIndex_ + j], points[startingIndex_]) <= points[startingIndex_].radius);
                }
            }
        }
Exemplo n.º 9
0
 public int CalcTrueOverallResult(MultidimensionalPoint point)
 {
     return(point.pointClass);
 }