コード例 #1
0
        protected void ManageMemoryBuffer(List <IState>[] plans)
        {
            List <TrainingInstance> trainingInstances = new List <TrainingInstance>();

            foreach (var plan in plans)
            {
                for (int i = 0; i < plan.Count; i++)
                {
                    double           pathCost         = Global.CostOfPath(plan.GetRange(i, plan.Count - i).ToArray());
                    TrainingInstance trainingInstance = new TrainingInstance(plan[i], pathCost);
                    trainingInstances.Add(trainingInstance);
                }
            }

            for (int i = 0; i < trainingInstances.Count; i++)
            {
                TrainingInstance trainingInstance = trainingInstances[i];

                if (!memoryBuffer.Any(x => x.Equals(trainingInstance)))
                {
                    memoryBuffer.Add(trainingInstance);
                }
            }


            if (memoryBuffer.Count > memoryBufferMaxRecords)
            {
                int numIter = memoryBuffer.Count - memoryBufferMaxRecords;
                memoryBuffer.RemoveRange(0, numIter);
            }
        }
コード例 #2
0
ファイル: SVM.cs プロジェクト: nes1983/cc
 /** Given a training instance it returns the result of sign(weights'instanceFeatures). */
 int Classify(TrainingInstance ti)
 {
     RealVector features = ti.GetFeatures();
     double result = features.DotProduct(weights);
     if (result >= 0) {
     return 1;
     }
     return -1;
 }
コード例 #3
0
ファイル: SVM.cs プロジェクト: nes1983/cc
            private TrainingInstance[] SelectSubset(int k)
            {
                var result = new TrainingInstance[k];
                var visited = new HashSet<int>();

                for (int i = 0; i < k; i++) {
                while (true)
                {
                    int nextIdx = rand.Next(0, k);

                    if (visited.Add(nextIdx)) {
                        result[i] = trainingSet[nextIdx];
                        break;
                    }
                }
                }

                return result;
            }
コード例 #4
0
ファイル: SVM.cs プロジェクト: nes1983/cc
            private TrainingInstance[] CreateBatch(TrainingInstance[] subset, RealVector weights)
            {
                TrainingInstance[] misclassified = Misclassified(subset, weights);
                var ret = new TrainingInstance[subset.Length + 3* misclassified.Length];

                for (int i = 0; i < ret.Length; i++) {
                if (i < subset.Length) {
                    ret[i] = subset[i];
                } else {
                    ret[i] = misclassified[(i - subset.Length) % misclassified.Length];
                }
                }

                return ret;
            }
コード例 #5
0
ファイル: SVM.cs プロジェクト: nes1983/cc
            private int classify(TrainingInstance ti, RealVector w)
            {
                RealVector features = ti.GetFeatures();
                double result = features.DotProduct(w);

                if (result >= 0) {
                return 1;
                }
                return -1;
            }
コード例 #6
0
ファイル: SVM.cs プロジェクト: nes1983/cc
            /** Calculates the logloss for every object in batch. */
            private static double[] LogisticLoss(TrainingInstance[] batch, RealVector weights)
            {
                double[] result = new double[batch.Length];
                double[] raw = new double[batch.Length];

                for (int i = 0; i < batch.Length; i++) {
                RealVector cur = batch[i].GetFeatures();
                raw[i] = cur.DotProduct(weights);
                }

                for (int i = 0; i < result.Length; i++) {
                double exp = Math.Exp(raw[i]);
                result[i] = exp / (1 + exp);
                }

                return (result);
            }
コード例 #7
0
ファイル: SVM.cs プロジェクト: 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;
            }