Example #1
0
        /// <summary>
        /// The input vector cannot be sparse. Method returns 0 if class does not exist
        /// </summary>
        /// <param name="row"></param>
        /// <returns></returns>
        public double MahalanobisDistance(PatternTools.sparseMatrixRow row)
        {
            //Term 1 (xi - mi)Transposed
            //Term 2 Inverse Cov Matrix
            //Term 3 (xi - mi)
            //M Squared = Math.Sqrt (t1 * t2 * t3)

            //Eliminate unstable dims

            if (classLableClassPackageDic.ContainsKey(row.Lable))
            {
                Matrix t1 = new CSML.Matrix(row.Values.ToArray()) - classLableClassPackageDic[row.Lable].MatrixMeanVector;
                t1 = t1.Transpose();

                Matrix t2 = classLableClassPackageDic[row.Lable].InverseCovarianceMatrix;

                Matrix t3 = new CSML.Matrix(row.Values.ToArray()) - classLableClassPackageDic[row.Lable].MatrixMeanVector;

                Matrix product = t1 * t2 * t3;

                double det = Math.Abs(product.Determinant().Re);

                return(Math.Pow(det, 0.5));
            }
            else
            {
                return(0);
            }
        }
Example #2
0
        private double[] Unsparse(PatternTools.sparseMatrixRow r)
        {
            //Lets unsparse the point
            double[] point = new double[r.Dims.Count];

            for (int i = 0; i < point.Length; i++)
            {
                point[i] = r.Values[i];
            }

            return(point);
        }
Example #3
0
        //----------------------------

        public int SimpleClassification(PatternTools.sparseMatrixRow r)
        {
            return(SimpleClassification(Unsparse(r)));
        }