Beispiel #1
0
Datei: SVM.cs Projekt: nes1983/cc
            private static RealVector BatchGradient(double[] logloss, TrainingInstance[] batch)
            {
                int dimensions = batch[0].GetFeatureCount();
                int batchSize = batch.Length;

                RealVector toReplicate =  new RealVector(logloss);

                RealVector labels = new RealVector(batchSize);

                for (int i = 0 ; i < batchSize; i++)
                {
                labels.GetFeatures()[i] = batch[i].GetLabel();
                }

                labels.Add(1).ScaleThis(0.5);
                toReplicate.Subtract(labels);

                RealVector[] repmat = new RealVector[dimensions];
                for (int i = 0; i < dimensions; i++) {
                repmat[i] = new RealVector(toReplicate);
                }

                for (int i = 0; i < dimensions; i++) {
                for(int j = 0; j < batchSize; j++) {
                    repmat[i].w[j] *= batch[j].GetFeatures().w[i];
                }
                }

                RealVector result = new RealVector(dimensions);

                for (int i = 0; i < dimensions;i++) {
                result.w[i] = repmat[i].Average();
                }
                return result;
            }
Beispiel #2
0
Datei: SVM.cs Projekt: nes1983/cc
            public RealVector Train(int maxIter)
            {
                var w = new RealVector(defaultWeights);

                for (int i = 0; i < maxIter; i++) {
                TrainingInstance[] batch = CreateBatch(SelectSubset(subsampleSize), w);
                RealVector grad = BatchGradient(LogisticLoss(batch, w), batch);

                w.Subtract(grad);

                if(grad.GetNorm() < epsilon) {
                    break;
                }
                }

                return w;
            }