public Prediction Classify(DataMining.Data.Example example)
        {
            example       = example.Clone() as DataMining.Data.Example;
            example.Label = -1;

            this._classProbabilities = new double[this._metadata.Target.Values.Length];
            int resultIndex = 0;

            for (int classIndex = 0; classIndex < this._metadata.Target.Values.Length; classIndex++)
            {
                BayesianNetwork bayesianNetwork = this._bayesianNetworks[classIndex];
                double          probability     = this._metadata.Target.ValueCounts[classIndex] / (double)this._metadata.Size;
                probability *= bayesianNetwork.GetProbability(example);

                this._classProbabilities[classIndex] = probability;

                if (probability > this._classProbabilities[resultIndex])
                {
                    resultIndex = classIndex;
                }
            }

            double sum = this._classProbabilities.Sum();

            for (int i = 0; i < this._classProbabilities.Length; i++)
            {
                this._classProbabilities[i] /= sum;
            }

            return(new Prediction(resultIndex, this._classProbabilities[resultIndex]));
        }
Exemple #2
0
        public Prediction Classify(DataMining.Data.Example example)
        {
            example       = example.Clone() as DataMining.Data.Example;
            example.Label = -1;

            double[] classProbabilities = new double[this._metadata.Target.Values.Length];
            int      resultIndex        = 0;

            for (int classIndex = 0; classIndex < classProbabilities.Length; classIndex++)
            {
                double probability = this.GetProbability(example, classIndex);

                classProbabilities[classIndex] = probability;

                if (probability > classProbabilities[resultIndex])
                {
                    resultIndex = classIndex;
                }
            }

            double sum = classProbabilities.Sum();

            for (int i = 0; i < classProbabilities.Length; i++)
            {
                classProbabilities[i] /= sum;
            }

            return(new Prediction(resultIndex, classProbabilities[resultIndex]));
        }
Exemple #3
0
        public Prediction Classify(DataMining.Data.Example example)
        {
            example       = example.Clone() as DataMining.Data.Example;
            example.Label = -1;
            int        clusterIndex = this._clusteringSolution.GetExampleNativeCluster(example);
            Prediction prediction   = this._bayesianNetworkClassfiers[clusterIndex].Classify(example);

            return(prediction);
        }
Exemple #4
0
        public double GetProbability(DataMining.Data.Example example, int classValueIndex)
        {
            //initial proir class probability
            double probability     = this._metadata.Target.ValueCounts[classValueIndex] / (double)this._metadata.Size;
            double termProbability = 0;

            Variable classVariable = this.Variables[this._metadata.Target.Index];

            if (classVariable.Parents != null)
            {
                List <Term> parentValues = new List <Term>();
                foreach (Variable parent in classVariable.Parents)
                {
                    parentValues.Add(new Term(parent.Index, example[parent.Index]));
                }

                //proir class probability when it has parents
                probability = this.GetConditionalProbability(new Term(classVariable.Index, classValueIndex), parentValues);
            }

            //------------------------------------------------------------------------------------
            //liklihood (probability of child varibales)


            for (int attributeIndex = 0; attributeIndex < example.Values.Length; attributeIndex++)
            {
                Variable variable   = this.Variables[attributeIndex];
                int      valueIndex = example[attributeIndex];

                if (variable.Parents == null)
                {
                    continue;
                }

                List <Term> parentValues = new List <Term>();
                foreach (Variable parent in variable.Parents)
                {
                    if (parent.Index == this._metadata.Target.Index)
                    {
                        parentValues.Add(new Term(parent.Index, classValueIndex));
                    }
                    else
                    {
                        parentValues.Add(new Term(parent.Index, example[parent.Index]));
                    }
                }

                termProbability = this.GetConditionalProbability(new Term(attributeIndex, example[attributeIndex]), parentValues);
                probability    *= termProbability;
            }

            return(probability);
        }
Exemple #5
0
        public Prediction Classify(DataMining.Data.Example example)
        {
            for (int i = 0; i < this._inputLayer.Length; i++)
            {
                this._inputLayer[i].Output = example[i];
            }

            for (int i = 0; i < this._hiddenLayer.Length; i++)
            {
                SetOutput(this._hiddenLayer[i]);
            }

            for (int i = 0; i < this._outputLayer.Length; i++)
            {
                SetOutput(this._outputLayer[i]);
            }
            ;


            int maxLabel = 0;

            double [] scores = new double[_outputLayer.Length];

            for (int i = 0; i < this._outputLayer.Length; i++)
            {
                scores[i] = this._outputLayer[i].Output;

                if (scores[i] > scores[maxLabel])
                {
                    maxLabel = i;
                }
            }


            Prediction prediction = new Prediction(maxLabel, scores);

            return(prediction);
        }
Exemple #6
0
        public double GetProbability(DataMining.Data.Example example)
        {
            double probability     = 1;
            double termProbability = 0;

            for (int attributeIndex = 0; attributeIndex < example.Values.Length; attributeIndex++)
            {
                Variable variable   = this.Variables[attributeIndex];
                int      valueIndex = example[attributeIndex];

                if (variable.Parents == null)
                {
                    termProbability = variable.Attribute.ValueCounts[valueIndex] / (double)this._metadata.Size;
                    if (termProbability == 0)
                    {
                        termProbability = BayesianNetwork.default_value;
                    }
                }

                else
                {
                    List <Term> parentValues = new List <Term>();
                    foreach (Variable parent in variable.Parents)
                    {
                        if (parent.Index != this._metadata.Target.Index)
                        {
                            parentValues.Add(new Term(parent.Index, example[parent.Index]));
                        }
                    }

                    termProbability = this.GetConditionalProbability(new Term(attributeIndex, example[attributeIndex]), parentValues);
                }

                probability *= termProbability;
            }

            return(probability);
        }