Esempio n. 1
0
        /// <summary>
        /// Train a model on a single example,
        /// </summary>
        /// <typeparam name="TOutput"></typeparam>
        /// <param name="trainerMaker"></param>
        /// <param name="checker"></param>
        private static void TrivialHelper <TOutput>(Func <ITrainerHost, ITrainer <Instances, IPredictorProducing <TOutput> > > trainerMaker, Action <TOutput, TOutput> checker)
        {
            // The following simple instance should result in a "trivial" predictor for binary classification, regression, and multiclass, I think.
            ListInstances instances = new ListInstances();

            instances.AddInst(new Float[] { (Float)0.0 }, (Float)0);
            instances.CopyMetadata(null);
            ITrainerHost host = new TrainHost(new Random(1), 0);

            var trainer = trainerMaker(host);

            trainer.Train(instances);
            IPredictor <Instance, TOutput> predictor       = (IPredictor <Instance, TOutput>)trainer.CreatePredictor();
            IPredictor <Instance, TOutput> loadedPredictor = default(IPredictor <Instance, TOutput>);

            using (Stream stream = new MemoryStream())
            {
                using (RepositoryWriter writer = RepositoryWriter.CreateNew(stream, false))
                {
                    ModelSaveContext.SaveModel(writer, predictor, "foo");
                    writer.Commit();
                }
                stream.Position = 0;
                using (RepositoryReader reader = RepositoryReader.Open(stream, false))
                {
                    ModelLoadContext.LoadModel(out loadedPredictor, reader, "foo");
                }
                Assert.AreNotEqual(default(IPredictor <Instance, TOutput>), loadedPredictor, "did not load expected model");
            }

            TOutput result       = predictor.Predict(instances[0]);
            TOutput loadedResult = loadedPredictor.Predict(instances[0]);

            checker(result, loadedResult);
        }
Esempio n. 2
0
        private void listInstances_ColumnClick(object sender, ColumnClickEventArgs e)
        {
            // Determine if clicked column is already the column that is being sorted.
            if (e.Column == lvwColumnSorter.ColumnToSort)
            {
                // Reverse the current sort direction for this column.
                if (lvwColumnSorter.OrderOfSort == SortOrder.Ascending)
                {
                    lvwColumnSorter.OrderOfSort = SortOrder.Descending;
                }
                else
                {
                    lvwColumnSorter.OrderOfSort = SortOrder.Ascending;
                }
            }
            else
            {
                // Set the column number that is to be sorted; default to ascending.
                lvwColumnSorter.ColumnToSort = e.Column;
                lvwColumnSorter.OrderOfSort  = SortOrder.Ascending;
            }

            // Perform the sort with these new sort options.
            ListInstances.Sort();
        }
        public void TestRandomBalancedFoldCreation()
        {
            ListInstances li          = CreateInstancesWithNKeys(5);
            var           foldCreator = new CVFoldCreation();
            var           cmd         = new TLCArguments();

            cmd.numFolds          = 5;
            cmd.command           = Command.CrossValidation;
            cmd.stratifyInstances = true;

            int[] folds           = foldCreator.CreateFoldIndicesStratified(li, cmd, new Random(1));
            int[] expectedIndices = { 1, 0, 3, 4, 2 };
            for (int i = 0; i < folds.Length; i++)
            {
                Assert.Equal <int>(folds[i], expectedIndices[i]);
            }

            li              = CreateInstancesWithNKeys(7);
            folds           = foldCreator.CreateFoldIndicesStratified(li, cmd, new Random(1));
            expectedIndices = new int[] { 1, 0, 4, 1, 0, 2, 3 };
            for (int i = 0; i < folds.Length; i++)
            {
                Assert.Equal <int>(folds[i], expectedIndices[i]);
            }

            li              = CreateInstancesWithNKeys(10);
            folds           = foldCreator.CreateFoldIndicesStratified(li, cmd, new Random(1));
            expectedIndices = new int[] { 2, 1, 0, 3, 2, 4, 0, 4, 3, 1 };
            for (int i = 0; i < folds.Length; i++)
            {
                Assert.Equal <int>(folds[i], expectedIndices[i]);
            }

            Done();
        }
        private ListInstances CreateInstancesWithNKeys(int n)
        {
            var li = new ListInstances();
            var v  = new WritableVector(new Float[] { 1, 2, 3 });

            for (int i = 0; i < n; i++)
            {
                li.Add(new Instance(v, 1, i.ToString()));
            }

            return(li);
        }
Esempio n. 5
0
        [Ignore] // REVIEW: OVA no longer implements BulkPredict.
        public void MulticlassExampleTest()
        {
            string dataFilename = GetDataPath(TestDatasets.msm.trainFilename);

            ///*********  Training a model *******//
            // assume data is in memory in matrix/vector form. Sparse format also supported.
            Float[][] data;
            Float[]   labels;
            // below just reads some actual data into these arrays
            PredictionUtil.ReadInstancesAsArrays(dataFilename, out data, out labels);

            // Create an Instances dataset.
            ListInstances instances = new ListInstances();

            for (int i = 0; i < data.Length; i++)
            {
                instances.AddInst(data[i], labels[i]);
            }
            instances.CopyMetadata(null);

            // Create a predictor and specify some non-default settings
            var args = new OVA.OldArguments();

            PredictionUtil.ParseArguments(args, "p=FR ps=iter:20");
            ITrainer <Instances, IPredictor <Instance, Float[]> > trainer = new OVA(args, new TrainHost(new Random(1), 0));

            // Train a predictor
            trainer.Train(instances);
            var predictor = trainer.CreatePredictor();

            ///*********  Several ways to save models. Only binary can be used to-reload in TLC. *******//

            // Save the model in internal binary format that can be used for loading it.
            string modelFilename = Path.GetTempFileName();

            PredictorUtils.Save(modelFilename, predictor, instances, null);

            // Save the model as a plain-text description
            string modelFilenameText = Path.GetTempFileName();

            PredictorUtils.SaveText(predictor, instances.Schema.FeatureNames, modelFilenameText);

            // Save the model in Bing's INI format
            string modelFilenameIni = Path.GetTempFileName();

            PredictorUtils.SaveIni(predictor, instances.Schema.FeatureNames, modelFilenameIni);

            ///*********  Loading and making predictions with a previously saved model *******//
            // Note:   there are several alternative ways to construct instances
            // For example, see FactoryExampleTest  below that demonstrates named-feature : value pairs.

            // Load saved model
            IDataModel dataModel;
            IDataStats dataStats;
            var        pred = PredictorUtils.LoadPredictor <Float[]>(out dataModel, out dataStats, modelFilename);

            // Get predictions for instances
            Float[][] predictions = new Float[instances.Count][];

            for (int i = 0; i < instances.Count; i++)
            {
                predictions[i] = pred.Predict(instances[i]);
            }

            // REVIEW: This looks like it wasn't doing what was expected - OVA didn't override
            // BulkPredict, so this wasn't using FastRank's BulkPredict.
            Float[][] bulkPredictions = ((IBulkPredictor <Instance, Instances, Float[], Float[][]>)pred).BulkPredict(instances);

            Assert.Equal(predictions.Length, bulkPredictions.Length);
            for (int i = 0; i < predictions.Length; i++)
            {
                Assert.Equal(predictions[i].Length, bulkPredictions[i].Length);
                for (int j = 0; j < predictions[i].Length; j++)
                {
                    Assert.Equal(predictions[i][j], bulkPredictions[i][j]);
                }
            }

            //test new testers
            {
                var results = new MulticlassTester(new MulticlassTesterArguments()).Test(pred, instances);

                // Get metric names and print them alongside numbers
                for (int i = 0; i < results.Length; i++)
                {
                    Log("{0,-30} {1}", results[i].Name, results[i].Value);
                }

                // sanity check vs. original predictor
                var results2 = new MulticlassTester(new MulticlassTesterArguments()).Test(predictor, instances);
                Assert.Equal(results.Length, results2.Length);
                for (int i = 0; i < results.Length; i++)
                {
                    Assert.Equal(results[i].Name, results2[i].Name);
                    Assert.Equal(results[i].Value, results2[i].Value);
                }
            }
            File.Delete(modelFilename);
            File.Delete(modelFilenameText);
            File.Delete(modelFilenameIni);

            Done();
        }
Esempio n. 6
0
        public void SimpleExampleTest()
        {
            RunMTAThread(() =>
            {
                string dataFilename = GetDataPath(TestDatasets.msm.trainFilename);

                ///*********  Training a model *******//
                // assume data is in memory in matrix/vector form. Sparse format also supported.
                Float[][] data;
                Float[] labels;
                // below just reads some actual data into these arrays
                PredictionUtil.ReadInstancesAsArrays(dataFilename, out data, out labels);

                // Create an Instances dataset.
                ListInstances instances = new ListInstances();
                for (int i = 0; i < data.Length; i++)
                {
                    instances.AddInst(data[i], labels[i]);
                }
                instances.CopyMetadata(null);

                // Create a predictor and specify some non-default settings
                var sub = new SubComponent <ITrainer <Instances, IPredictor <Instance, Float> >, SignatureOldBinaryClassifierTrainer>(
                    "FastRank", "nl=5 lr =0.25 iter= 20");
                var trainer = sub.CreateInstance(new TrainHost(new Random(1), 0));

                // Train a predictor
                trainer.Train(instances);
                var predictor = trainer.CreatePredictor();

                ///*********  Several ways to save models. Only binary can be used to-reload in TLC. *******//

                // Save the model in internal binary format that can be used for loading it.
                string modelFilename = Path.GetTempFileName();
                PredictorUtils.Save(modelFilename, predictor, instances, null);

                // Save the model as a plain-text description
                string modelFilenameText = Path.GetTempFileName();
                PredictorUtils.SaveText(predictor, instances.Schema.FeatureNames, modelFilenameText);

                // Save the model in Bing's INI format
                string modelFilenameIni = Path.GetTempFileName();
                PredictorUtils.SaveIni(predictor, instances.Schema.FeatureNames, modelFilenameIni);

                ///*********  Loading and making predictions with a previously saved model *******//
                // Note:   there are several alternative ways to construct instances
                // For example, see FactoryExampleTest  below that demonstrates named-feature : value pairs.

                // Load saved model
                IDataModel dataModel;
                IDataStats dataStats;
                var pred = PredictorUtils.LoadPredictor <Float>(out dataModel, out dataStats, modelFilename);
                var dp   = pred as IDistributionPredictor <Instance, Float, Float>;

                // Get predictions for instances
                Float[] probPredictions = new Float[instances.Count];
                Float[] rawPredictions  = new Float[instances.Count];
                Float[] rawPredictions1 = new Float[instances.Count];
                for (int i = 0; i < instances.Count; i++)
                {
                    probPredictions[i] = dp.PredictDistribution(instances[i], out rawPredictions[i]);
                    rawPredictions1[i] = dp.Predict(new Instance(data[i]));
                }

                Float[] bulkPredictions = ((IBulkPredictor <Instance, Instances, Float, Float[]>)pred).BulkPredict(instances);

                Assert.Equal(rawPredictions.Length, bulkPredictions.Length);
                Assert.Equal(rawPredictions.Length, rawPredictions1.Length);
                for (int i = 0; i < rawPredictions.Length; i++)
                {
                    Assert.Equal(rawPredictions[i], bulkPredictions[i]);
                }
                for (int i = 0; i < rawPredictions.Length; i++)
                {
                    Assert.Equal(rawPredictions[i], rawPredictions1[i]);
                }

                //test new testers
                {
                    var results = new ClassifierTester(new ProbabilityPredictorTesterArguments()).Test(pred, instances);

                    // Get metric names and print them alongside numbers
                    for (int i = 0; i < results.Length; i++)
                    {
                        Log("{0,-30} {1}", results[i].Name, results[i].Value);
                    }

                    // sanity check vs. original predictor
                    var results2 = new ClassifierTester(new ProbabilityPredictorTesterArguments()).Test(predictor, instances);
                    Assert.Equal(results.Length, results2.Length);
                    for (int i = 0; i < results.Length; i++)
                    {
                        Assert.Equal(results[i].Name, results2[i].Name);
                        Assert.Equal(results[i].Value, results2[i].Value);
                    }
                }
                File.Delete(modelFilename);
                File.Delete(modelFilenameText);
                File.Delete(modelFilenameIni);
            });
            Done();
        }
Esempio n. 7
0
        private void listInstances_MouseClick(object sender, MouseEventArgs e)
        {
            // main
            // internal
            // global
            // crawler
            // graph
            // packets
            // search
            // operation
            // console
            // ---
            // Disconnect

            if (e.Button != MouseButtons.Right)
            {
                return;
            }

            ListInstanceItem item = ListInstances.GetItemAt(e.X, e.Y) as ListInstanceItem;

            if (item == null)
            {
                return;
            }

            ContextMenu menu = new ContextMenu();

            if (item.Core == null)
            {
                menu.MenuItems.Add(new MenuItem("Login", new EventHandler(Click_Connect)));
            }
            else
            {
                MenuItem global = null;

                if (item.Instance.Context.Lookup != null)
                {
                    global = new MenuItem("Lookup");
                    global.MenuItems.Add(new MenuItem("Crawler", new EventHandler(Click_GlobalCrawler)));
                    global.MenuItems.Add(new MenuItem("Graph", new EventHandler(Click_GlobalGraph)));
                    global.MenuItems.Add(new MenuItem("Packets", new EventHandler(Click_GlobalPackets)));
                    global.MenuItems.Add(new MenuItem("Search", new EventHandler(Click_GlobalSearch)));
                }

                MenuItem operation = new MenuItem("Organization");
                operation.MenuItems.Add(new MenuItem("Crawler", new EventHandler(Click_OpCrawler)));
                operation.MenuItems.Add(new MenuItem("Graph", new EventHandler(Click_OpGraph)));
                operation.MenuItems.Add(new MenuItem("Packets", new EventHandler(Click_OpPackets)));
                operation.MenuItems.Add(new MenuItem("Search", new EventHandler(Click_OpSearch)));

                MenuItem firewall = new MenuItem("Firewall");
                firewall.MenuItems.Add(new MenuItem("Open", new EventHandler(Click_FwOpen)));
                firewall.MenuItems.Add(new MenuItem("NAT", new EventHandler(Click_FwNAT)));
                firewall.MenuItems.Add(new MenuItem("Blocked", new EventHandler(Click_FwBlocked)));


                menu.MenuItems.Add(new MenuItem("Main", new EventHandler(Click_Main)));
                menu.MenuItems.Add(new MenuItem("Internal", new EventHandler(Click_Internal)));
                menu.MenuItems.Add(new MenuItem("Bandwidth", new EventHandler(Click_Bandwidth)));
                menu.MenuItems.Add(new MenuItem("Transfers", new EventHandler(Click_Transfers)));
                if (global != null)
                {
                    menu.MenuItems.Add(global);
                }
                menu.MenuItems.Add(operation);
                menu.MenuItems.Add(firewall);
                menu.MenuItems.Add(new MenuItem("Console", new EventHandler(Click_Console)));
                menu.MenuItems.Add(new MenuItem("-"));
                menu.MenuItems.Add(new MenuItem("Logout", new EventHandler(Click_Disconnect)));
            }

            menu.Show(ListInstances, e.Location);
        }