Example #1
0
        /**Compute the median of the pairwise distance. The distance is
         * |mu_p - mu_q|^2 where mu_p is the mean embedding.
         */

        public static double MedianPairwise <D>(
            List <D> dists, double[] embedSquaredWidths)
            where D : IKEPDist
        {
            KEGaussian <D> ke = new KEGaussian <D>(embedSquaredWidths);
            int            n  = dists.Count;

            double[]      selfKers  = dists.Select(di => ke.Eval(di, di)).ToArray();
            List <double> pairDists = new List <double>();

            for (int i = 0; i < n; i++)
            {
                D      p  = dists[i];
                double pp = selfKers[i];
                for (int j = i; j < n; j++)             // include j=i just like in Matlab
                {
                    D      q     = dists[j];
                    double qq    = selfKers[j];
                    double dist2 = pp - 2 * ke.Eval(p, q) + qq;
                    Debug.Assert(dist2 >= 0);
                    pairDists.Add(dist2);
                }
            }
            double med = MatrixUtils.Median(pairDists.ToArray());

            return(med);
        }
Example #2
0
        public override double Eval(T p, T q)
        {
            double dist2 = keGauss.Eval(p, p) - 2 * keGauss.Eval(p, q)
                           + keGauss.Eval(q, q);
            double eval = Math.Exp(-0.5 * dist2 / squaredWidth);

            return(eval);
        }