Ejemplo n.º 1
0
        public void GetLikelyhood(DataSample sample, double[] result)
        {
            var probabilities = result;

            for (int index = 0; index < probabilities.Length; index++)
            {
                probabilities[index] = _classesProbablityDistribution.GetLogProbability(index);

                foreach (var dataPoint in sample.DataPoints)
                {
                    var value = Convert.ToDouble(dataPoint.Value);

                    probabilities[index] = probabilities[index] +
                                           _distribution[index, dataPoint.ColumnId].GetLogProbability(value);
                }
            }
        }
Ejemplo n.º 2
0
        public void GetLikelyhoodNaiveBayes(DataSample sample, ClassLikelyhood[] result)
        {
            var probabilities = result;

            for (int index = 0; index < Classes; index++)
            {
                probabilities[index].Value   = _classesProbablityDistribution.GetLogProbability(index);
                probabilities[index].ClassId = index;

                foreach (var dataPoint in sample.DataPoints)
                {
                    var value = Convert.ToDouble(dataPoint.Value);

                    probabilities[index].Value = probabilities[index].Value +
                                                 _distribution[index, dataPoint.ColumnId].GetLogProbability(value);
                }
            }

            Array.Sort(result, 0, Classes, _comparerLikelyhood);
        }
Ejemplo n.º 3
0
        public string Compute(IDataRow datarow)
        {
            var probabilities       = new double[_data.ClassesValue.Length];
            var attributes          = datarow.Attributes.ToArray();
            var doubleConverter     = new DoubleConverter();
            var maxProbabilityIndex = 0;

            for (int index = 0; index < probabilities.Length; index++)
            {
                probabilities[index] = 1;

                for (int columnIndex = 0; columnIndex < _data.Attributes.Length; columnIndex++)
                {
                    if (attributes[columnIndex] == TableData.ClassAttributeName)
                    {
                        probabilities[index] = _classesProbablityDistribution.GetLogProbability(index);
                        continue;
                    }

                    var value = datarow[attributes[columnIndex]];
                    if (!value.IsNumeric())
                    {
                        probabilities[index] = probabilities[index] + _distribution[index, columnIndex].GetLogProbability(_data.GetSymbol((string)value, columnIndex));
                    }
                    else
                    {
                        probabilities[index] = probabilities[index] + _distribution[index, columnIndex].GetLogProbability(doubleConverter.Convert(value));
                    }
                }
                if (probabilities[maxProbabilityIndex] < probabilities[index])
                {
                    maxProbabilityIndex = index;
                }
            }

            return(_data.ClassesValue[maxProbabilityIndex]);
        }