public void ReconfigurablePredictionNoPipeline() { var mlContext = new MLContext(seed: 1); var data = mlContext.Data.LoadFromEnumerable(TypeTestData.GenerateDataset()); var pipeline = mlContext.BinaryClassification.Trainers.LbfgsLogisticRegression( new Trainers.LbfgsLogisticRegressionBinaryTrainer.Options { NumberOfThreads = 1 }); var model = pipeline.Fit(data); var newModel = mlContext.BinaryClassification.ChangeModelThreshold(model, -2.0f); var rnd = new Random(1); var randomDataPoint = TypeTestData.GetRandomInstance(rnd); var engine = mlContext.Model.CreatePredictionEngine <TypeTestData, Prediction>(model); var pr = engine.Predict(randomDataPoint); // Score is -1.38 so predicted label is false. Assert.False(pr.PredictedLabel); Assert.True(pr.Score <= 0); var newEngine = mlContext.Model.CreatePredictionEngine <TypeTestData, Prediction>(newModel); pr = newEngine.Predict(randomDataPoint); // Score is still -1.38 but since threshold is no longer 0 but -2 predicted label now is true. Assert.True(pr.PredictedLabel); Assert.True(pr.Score <= 0); }
public void ReadFromIEnumerable() { var mlContext = new MLContext(seed: 1, conc: 1); // Read the dataset from an enumerable. var data = mlContext.Data.ReadFromEnumerable(TypeTestData.GenerateDataset()); Common.AssertTypeTestDataset(data); }
public void WriteAndReadAFromABinaryFile() { var mlContext = new MLContext(seed: 1, conc: 1); var dataBefore = mlContext.Data.ReadFromEnumerable(TypeTestData.GenerateDataset()); // Serialize a dataset with a known schema to a file. var filePath = SerializeDatasetToBinaryFile(mlContext, dataBefore); var dataAfter = mlContext.Data.ReadFromBinary(filePath); Common.AssertTestTypeDatasetsAreEqual(mlContext, dataBefore, dataAfter); }
public void ExportToIEnumerable() { var mlContext = new MLContext(seed: 1, conc: 1); // Read the dataset from an enumerable. var enumerableBefore = TypeTestData.GenerateDataset(); var data = mlContext.Data.ReadFromEnumerable(enumerableBefore); // Export back to an enumerable. var enumerableAfter = mlContext.CreateEnumerable <TypeTestData>(data, true); Common.AssertEqual(enumerableBefore, enumerableAfter); }
public void WriteToAndReadASchemaFromADelimitedFile() { var mlContext = new MLContext(seed: 1, conc: 1); var dataBefore = mlContext.Data.ReadFromEnumerable(TypeTestData.GenerateDataset()); foreach (var separator in _separators) { // Serialize a dataset with a known schema to a file. var filePath = SerializeDatasetToFile(mlContext, dataBefore, separator); var dataAfter = mlContext.Data.ReadFromTextFile <TypeTestData>(filePath, hasHeader: true, separatorChar: separator); Common.AssertTestTypeDatasetsAreEqual(mlContext, dataBefore, dataAfter); } }
public void WriteToAndReadFromADelimetedFile() { var mlContext = new MLContext(seed: 1); var dataBefore = mlContext.Data.LoadFromEnumerable(TypeTestData.GenerateDataset()); foreach (var separator in _separators) { // Serialize a dataset with a known schema to a file. var filePath = SerializeDatasetToFile(mlContext, dataBefore, separator); var dataAfter = TypeTestData.GetTextLoader(mlContext, separator).Load(filePath); Common.AssertTestTypeDatasetsAreEqual(mlContext, dataBefore, dataAfter); } }
public void PredictionEngineModelDisposal() { var mlContext = new MLContext(seed: 1); var data = mlContext.Data.LoadFromEnumerable(TypeTestData.GenerateDataset()); var pipeline = mlContext.BinaryClassification.Trainers.LbfgsLogisticRegression( new Trainers.LbfgsLogisticRegressionBinaryTrainer.Options { NumberOfThreads = 1 }); var model = pipeline.Fit(data); var engine = mlContext.Model.CreatePredictionEngine <TypeTestData, Prediction>(model, new PredictionEngineOptions()); // Dispose of prediction engine, should dispose of model engine.Dispose(); // Get disposed flag using reflection var bfIsDisposed = BindingFlags.Instance | BindingFlags.NonPublic; var field = model.GetType().BaseType.BaseType.GetField("_disposed", bfIsDisposed); // Make sure the model is actually disposed Assert.True((bool)field.GetValue(model)); // Make a new model/prediction engine. Set the options so prediction engine doesn't dispose model = pipeline.Fit(data); var options = new PredictionEngineOptions() { OwnsTransformer = false }; engine = mlContext.Model.CreatePredictionEngine <TypeTestData, Prediction>(model, options); // Dispose of prediction engine, shouldn't dispose of model engine.Dispose(); // Make sure model is not disposed of. Assert.False((bool)field.GetValue(model)); // Dispose of the model for test cleanliness model.Dispose(); }