File: API\RunDetails\CrossValidationRunDetail.cs
Web Access
Project: src\src\Microsoft.ML.AutoML\Microsoft.ML.AutoML.csproj (Microsoft.ML.AutoML)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
 
using System;
using System.Collections.Generic;
 
namespace Microsoft.ML.AutoML
{
    /// <summary>
    /// Details about a cross validation run in an AutoML experiment.
    /// </summary>
    /// <typeparam name="TMetrics">Metrics type for the run.</typeparam>
    /// <remarks>
    /// Over the course of an experiment, many models are evaluated on a dataset
    /// using cross validation. This object contains information about each model
    /// evaluated during the AutoML experiment.
    /// </remarks>
    public sealed class CrossValidationRunDetail<TMetrics> : RunDetail
    {
        /// <summary>
        /// Results for each of the cross validation folds.
        /// </summary>
        public IEnumerable<TrainResult<TMetrics>> Results { get; private set; }
 
        internal CrossValidationRunDetail(string trainerName,
            IEstimator<ITransformer> estimator,
            Pipeline pipeline,
            IEnumerable<TrainResult<TMetrics>> results) : base(trainerName, estimator, pipeline)
        {
            Results = results;
        }
    }
 
    /// <summary>
    /// Result of a pipeline trained on a cross validation fold.
    /// </summary>
    /// <typeparam name="TMetrics">Metrics type for the run.</typeparam>
    public sealed class TrainResult<TMetrics>
    {
        /// <summary>
        /// Each fold has training data and validation data. A model trained on the
        /// folds's training data is evaluated against the validation data,
        /// and the metrics for that calculation are emitted here.
        /// </summary>
        public TMetrics ValidationMetrics { get; private set; }
 
        /// <summary>
        /// Model trained on the fold during the run.
        /// </summary>
        /// <remarks>
        /// You can use the trained model to obtain predictions on input data.
        /// </remarks>
        public ITransformer Model { get { return _modelContainer.GetModel(); } }
 
        /// <summary>
        /// Exception encountered while training the fold. This property is
        /// <see langword="null"/> if no exception was encountered.
        /// </summary>
        /// <remarks>
        /// If an exception occurred, it's possible some properties in this object
        /// (like <see cref="Model"/>) could be <see langword="null"/>.
        /// </remarks>
        public Exception Exception { get; private set; }
 
        private readonly ModelContainer _modelContainer;
 
        internal TrainResult(ModelContainer modelContainer,
            TMetrics metrics,
            Exception exception)
        {
            _modelContainer = modelContainer;
            ValidationMetrics = metrics;
            Exception = exception;
        }
    }
 
}