コード例 #1
0
ファイル: Model.cs プロジェクト: vcfriend/svmnet
        public override bool Equals(object obj)
        {
            Model test = obj as Model;

            if (test == null)
            {
                return(false);
            }

            bool same = ClassLabels.IsEqual(test.ClassLabels);

            same = same && NumberOfClasses == test.NumberOfClasses;
            same = same && NumberOfSVPerClass.IsEqual(test.NumberOfSVPerClass);
            if (PairwiseProbabilityA != null)
            {
                same = same && PairwiseProbabilityA.IsEqual(test.PairwiseProbabilityA);
            }
            if (PairwiseProbabilityB != null)
            {
                same = same && PairwiseProbabilityB.IsEqual(test.PairwiseProbabilityB);
            }
            same = same && Parameter.Equals(test.Parameter);
            same = same && Rho.IsEqual(test.Rho);
            same = same && SupportVectorCoefficients.IsEqual(test.SupportVectorCoefficients);
            same = same && SupportVectorCount == test.SupportVectorCount;
            same = same && SupportVectors.IsEqual(test.SupportVectors);
            return(same);
        }
コード例 #2
0
        public override void Algorithm()
        {
            SupportVectors.Clear();
            SupportVectors.Capacity = 0;
            // Save support vectors indexes
            for (int i = 0; i < Solver.lagrangians.Length; ++i)
            {
                if (Solver.lagrangians[i] > 0)
                {
                    SupportVectors.Add(i);
                }
            }

            foreach (var i in SupportVectors)
            {
                foreach (var j in SupportVectors)
                {
                    Lambda += Labels[i] * Labels[j] * Solver.lagrangians[i] * Solver.lagrangians[j] * KernelMatrix[i, j];
                }
            }

            int chosen = SupportVectors.FirstOrDefault();

            B = Labels[chosen] * Lambda;

            foreach (var i in SupportVectors)
            {
                B -= Solver.lagrangians[i] * Labels[i] * KernelMatrix[chosen, i];
            }

            Margin = Math.Sqrt(Lambda);
        }
コード例 #3
0
        /// <summary>
        /// Creates a new object that is a copy of the current instance.
        /// </summary>
        /// <returns>
        /// A new object that is a copy of this instance.
        /// </returns>
        public override object Clone()
        {
            var clone = new SupportVectorMachine <TKernel>(NumberOfInputs, Kernel);

            clone.SupportVectors  = SupportVectors.MemberwiseClone();
            clone.Weights         = (double[])Weights.Clone();
            clone.IsProbabilistic = IsProbabilistic;
            clone.Threshold       = Threshold;
            return(clone);
        }
コード例 #4
0
        /// <summary>
        /// Creates a new object that is a copy of the current instance.
        /// </summary>
        /// <returns>
        /// A new object that is a copy of this instance.
        /// </returns>
        public virtual object Clone()
        {
            var clone = new SupportVectorMachine <TKernel, TInput>(NumberOfInputs, Kernel);

            clone.SupportVectors  = (TInput[])SupportVectors.Clone();
            clone.Weights         = (double[])Weights.Clone();
            clone.IsProbabilistic = IsProbabilistic;
            clone.Threshold       = Threshold;
            return(clone);
        }
コード例 #5
0
ファイル: Model.cs プロジェクト: vcfriend/svmnet
 public override int GetHashCode()
 {
     return(ClassLabels.ComputeHashcode() +
            NumberOfClasses.GetHashCode() +
            NumberOfSVPerClass.ComputeHashcode() +
            PairwiseProbabilityA.ComputeHashcode() +
            PairwiseProbabilityB.ComputeHashcode() +
            Parameter.GetHashCode() +
            Rho.ComputeHashcode() +
            SupportVectorCoefficients.ComputeHashcode() +
            SupportVectorCount.GetHashCode() +
            SupportVectors.ComputeHashcode());
 }
コード例 #6
0
ファイル: SoftSVM.cs プロジェクト: dbeti/SVM
        public override void Algorithm()
        {
            SupportVectors.Clear();
            SupportVectors.Capacity = 0;
            // Save support vectors indexes
            for (int i = 0; i < Solver.lagrangians.Length; ++i)
            {
                if (Solver.lagrangians[i] > 0)
                {
                    SupportVectors.Add(i);
                }
            }

            int indexi = -1, indexj = -1;

            foreach (var i in SupportVectors)
            {
                if ((-1.0) / (Nu * Values.Length) < Solver.lagrangians[i] * Labels[i] && Solver.lagrangians[i] * Labels[i] < 0)
                {
                    indexi = i;
                }
                if (0 < Solver.lagrangians[i] * Labels[i] && Solver.lagrangians[i] * Labels[i] < 1.0 / (Nu * Values.Length))
                {
                    indexj = i;
                }

                foreach (var j in SupportVectors)
                {
                    Lambda += Labels[i] * Labels[j] * Solver.lagrangians[i] * Solver.lagrangians[j] * KernelMatrix[i, j];
                }
            }

            Lambda = Math.Sqrt(Lambda) / 2.0;

            double left = 0, right = 0;

            foreach (var k in SupportVectors)
            {
                left  += Solver.lagrangians[k] * Labels[k] * KernelMatrix[k, indexi];
                right += Solver.lagrangians[k] * Labels[k] * KernelMatrix[k, indexj];
            }

            B      = -Lambda * (left + right);
            Margin = 2 * Lambda * right + B;
        }