Ejemplo n.º 1
0
        // ref for sample mode: https://stats.stackexchange.com/a/3934/289542
        public static double CalculateVariance(List <double> values, VarianceCalculationMode mode = VarianceCalculationMode.Sample)
        {
            if (values.Count < 0)
            {
                throw new ZeroSizeArrayException();
            }

            double result = 0;

            double mean = Statistics.CalculateMean(values);

            foreach (double item in values)
            {
                result += (item - mean) * (item - mean);
            }


            if (mode == VarianceCalculationMode.Sample)
            {
                return(result / (values.Count - 1));
            }
            else if (mode == VarianceCalculationMode.Population)
            {
                return(result / values.Count);
            }
            else
            {
                throw new NotImplementedException("Statistics > CalculateVariance");
            }
        }
Ejemplo n.º 2
0
        // **********************************************************************
        // Z score standardization is one of the most popular
        // method to normalize data. In this case, we rescale
        // an original variable to have a mean of zero and
        // standard deviation of one.
        // **********************************************************************
        public static double[] NormalizeUsingZScore(double[] values, VarianceCalculationMode mode)
        {
            if (values.IsNullOrEmpty())
            {
                return(null);
            }

            double[] result = new double[values.Length];

            //values.CopyTo(result, 0);

            var mean = IRI.Msh.Statistics.Statistics.CalculateMean(values);

            var std = IRI.Msh.Statistics.Statistics.CalculateStandardDeviation(values, mode);

            // 1399.12.12
            // to prevent divide by zero
            if (std == 0)
            {
                std = 1;
            }

            for (int i = 0; i < values.Length; i++)
            {
                result[i] = (values[i] - mean) / std;
            }

            return(result);
        }
Ejemplo n.º 3
0
        public static double CalculateStandardDeviation(List <double> values, VarianceCalculationMode mode = VarianceCalculationMode.Sample)
        {
            if (values.Count < 0)
            {
                throw new ZeroSizeArrayException();
            }

            return(Math.Sqrt(Statistics.CalculateVariance(values, mode)));
        }
Ejemplo n.º 4
0
        public static Matrix NormalizeColumnsUsingZScore(Matrix values, VarianceCalculationMode mode)
        {
            if (values == null)
            {
                return(null);
            }

            int numberOfColumns = values.NumberOfColumns;

            Matrix result = new Matrix(values.NumberOfRows, values.NumberOfColumns);

            for (int i = 0; i < numberOfColumns; i++)
            {
                var columnValues = values.GetColumn(i);

                result.SetColumn(i, NormalizeUsingZScore(columnValues, mode));
            }

            return(result);
        }
Ejemplo n.º 5
0
        // **********************************************************************
        // In this method, we divide each value by the standard deviation.
        // The idea is to have equal variance, but different means and ranges.
        // **********************************************************************
        public static double[] NormalizeUsingStandardDeviation(double[] values, VarianceCalculationMode mode)
        {
            if (values.IsNullOrEmpty())
            {
                return(null);
            }

            double[] result = new double[values.Length];

            var std = Statistics.CalculateStandardDeviation(values, mode);

            // to prevent divide by zero
            if (std == 0)
            {
                std = 1;
            }

            for (int i = 0; i < values.Length; i++)
            {
                result[i] = (values[i]) / std;
            }

            return(result);
        }