Ejemplo n.º 1
0
        public KMeans(HashSet <double[]> dataSet, bool hasClass)
        {
            patternMatrix = new PatternMatrix();

            if (hasClass)
            {
                foreach (var item in dataSet)
                {
                    pattern    = new Pattern();
                    pattern.Id = index;
                    pattern.AddAttributes(item);
                    pattern.RemoveAttributeAt(pattern.GetDimension() - 1);                  //remove o atributo classe da colecao de atributos
                    pattern.ClassAttribute = Convert.ToInt32(item[pattern.GetDimension()]); //guarda a classe do padrao
                    patternMatrix.AddPattern(pattern);
                    index++;
                }
            }
            else
            {
                foreach (var item in dataSet)
                {
                    pattern    = new Pattern();
                    pattern.Id = index;
                    pattern.AddAttributes(item);
                    patternMatrix.AddPattern(pattern);
                    index++;
                }
            }
        }
        // 1 passo: calcular o centro de cada grupo.
        private static Pattern ReturnClusterCenter(Cluster cluster)
        {
            double attributeSum  = 0;
            double attributeMean = 0;

            double[] centroidAttribute = new double[cluster.GetPatterns()[0].GetDimension()];

            for (int j = 0; j < cluster.GetPattern(0).GetDimension(); j++)
            {
                // -- percorre cada padrao do grupo
                foreach (Pattern pattern in cluster.GetPatterns())
                {
                    attributeSum += pattern.GetAttribute(j);
                }

                attributeMean        = attributeSum / cluster.QuantityOfPatterns();
                centroidAttribute[j] = attributeMean;
                attributeSum         = 0;
            }

            Pattern newCentroid = new Pattern();

            newCentroid.AddAttributes(centroidAttribute);

            return(newCentroid);
        }
Ejemplo n.º 3
0
        private int index = 0;               // identificador do padrao

        public KMeans(HashSet <double[]> dataSet)
        {
            patternMatrix = new PatternMatrix();

            foreach (var item in dataSet)
            {
                pattern    = new Pattern();
                pattern.Id = index;
                pattern.AddAttributes(item);
                patternMatrix.AddPattern(pattern);

                index++;
            }
        }
Ejemplo n.º 4
0
        private void RecomputeCentroids(Cluster[] clusters, out bool changed)
        {
            double attributeSum  = 0;
            double attributeMean = 0;

            Pattern newCentroid;

            double[] centroidAttribute = new double[clusters[0].Centroid.GetDimension()];

            changed = false;

            // -- Percorre os grupos
            for (int i = 0; i < clusters.Count(); i++)
            {
                // -- percorre cada atributo do padrao
                for (int j = 0; j < clusters[0].GetPattern(0).GetDimension(); j++)
                {
                    // -- percorre cada padrao do grupo
                    foreach (Pattern pattern in clusters[i].GetPatterns())
                    {
                        attributeSum += pattern.GetAttribute(j);
                    }

                    attributeMean        = attributeSum / clusters[i].QuantityOfPatterns();
                    centroidAttribute[j] = attributeMean;
                    attributeSum         = 0;
                }

                newCentroid = new Pattern();
                newCentroid.AddAttributes(centroidAttribute);
                newCentroid.Id = i;

                // verifica se o centroide do grupo mudou. Se sim, entao atribui o novo centroide ao grupo.
                if (!clusters[i].Centroid.GetAttributes().SequenceEqual(newCentroid.GetAttributes()))
                {
                    changed = true;
                    clusters[i].Centroid = newCentroid; //atribui novo centroide ao grupo.
                }
            }
        }
        public PatternMatrix Transform(HashSet <double[]> dataSet)
        {
            Pattern       patternTemp = new Pattern(); // padrao
            PatternMatrix patternMatrix;               // matriz de padroes
            int           index = 0;                   // identificador do padrao

            PatternMatrix zPatternMatrix;              //matriz de padroes normalizados

            patternMatrix  = new PatternMatrix();
            zPatternMatrix = new PatternMatrix();

            foreach (var item in dataSet)
            {
                patternTemp    = new Pattern();
                patternTemp.Id = index;
                patternTemp.AddAttributes(item);
                patternMatrix.AddPattern(patternTemp);

                index++;
            }

            index = 0;

            double attributeSum  = 0;
            double attributeMean = 0;
            double variance      = 0;
            double attributeStandardDeviation = 0;

            double zAttribute = 0;

            double[] zpatternAttributes = new double[patternTemp.GetDimension()];

            Pattern zPattern; //armazena o valor normalizado do padrao

            foreach (Pattern pattern in patternMatrix)
            {
                for (int i = 0; i < pattern.GetDimension(); i++)
                {
                    foreach (Pattern patternx in patternMatrix)
                    {
                        attributeSum += patternx.GetAttribute(i);
                    }

                    // calcula a media do atributo
                    attributeMean = attributeSum / patternMatrix.Size();
                    attributeSum  = 0;

                    foreach (Pattern patterny in patternMatrix)
                    {
                        variance += Math.Pow((patterny.GetAttribute(i) - attributeMean), 2);
                    }


                    // calcula a variancia do atributo
                    variance = variance / patternMatrix.Size();

                    attributeStandardDeviation = Math.Sqrt(variance);                                               // o desvio padrao eh a raiz quadrada da variancia

                    zAttribute            = (pattern.GetAttribute(i) - attributeMean) / attributeStandardDeviation; //atributo normalizado
                    zpatternAttributes[i] = Math.Round(zAttribute, 2);

                    attributeSum  = 0;
                    attributeMean = 0;
                    variance      = 0;
                    attributeStandardDeviation = 0;
                }

                zPattern = new Pattern();
                zPattern.AddAttributes(zpatternAttributes);
                zPattern.Id = index;
                zPatternMatrix.AddPattern(zPattern);
                index++;
            }

            return(zPatternMatrix);
        }
Ejemplo n.º 6
0
        public PatternMatrix Transform(HashSet <double[]> dataSet)
        {
            Pattern       patternTemp = new Pattern(); // padrao
            PatternMatrix patternMatrix;               // matriz de padroes
            int           index = 0;                   // identificador do padrao

            PatternMatrix MinMaxPatternMatrix;         //matriz de padroes normalizados
            double        minValue        = Double.MaxValue;
            double        maxValue        = Double.MinValue;
            double        minMaxAttribute = 0;

            patternMatrix       = new PatternMatrix();
            MinMaxPatternMatrix = new PatternMatrix();
            Pattern minMaxPattern; //armazena o padrao normalizado

            foreach (var item in dataSet)
            {
                patternTemp    = new Pattern();
                patternTemp.Id = index;
                patternTemp.AddAttributes(item);
                patternMatrix.AddPattern(patternTemp);

                index++;
            }

            double[] minMaxAttributes = new double[patternTemp.GetDimension()];

            foreach (Pattern pattern in patternMatrix)
            {
                for (int i = 0; i < pattern.GetDimension(); i++)
                {
                    foreach (Pattern patternx in patternMatrix)
                    {
                        if (patternx.GetAttribute(i) < minValue)
                        {
                            minValue = patternx.GetAttribute(i);
                        }

                        if (patternx.GetAttribute(i) > maxValue)
                        {
                            maxValue = patternx.GetAttribute(i);
                        }
                    }


                    minMaxAttribute     = (pattern.GetAttribute(i) - minValue) / (maxValue - minValue);
                    minValue            = Double.MaxValue;
                    maxValue            = Double.MinValue;
                    minMaxAttributes[i] = Math.Round(minMaxAttribute, 2);
                }

                minMaxPattern = new Pattern();
                minMaxPattern.AddAttributes(minMaxAttributes);
                minMaxPattern.Id = index;
                MinMaxPatternMatrix.AddPattern(minMaxPattern);
                index++;
            }



            return(MinMaxPatternMatrix);
        }