Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Узнайте, как использовать обученную модель для прогнозирования.
Создание моделей данных
Входные данные
public class HousingData
{
[LoadColumn(0)]
public float Size { get; set; }
[LoadColumn(1, 3)]
[VectorType(3)]
public float[] HistoricalPrices { get; set; }
[LoadColumn(4)]
[ColumnName("Label")]
public float CurrentPrice { get; set; }
}
Выходные данные
Features Как и Label имена входных столбцов, ML.NET имеет имена по умолчанию для столбцов прогнозируемых значений, созданных моделью. Имена могут отличаться в зависимости от задачи.
Так как алгоритм, используемый в этом примере, является алгоритмом линейной регрессии, имя по умолчанию выходного столбца определяется Scoreатрибутом ColumnName свойства PredictedPrice .
class HousingPrediction
{
[ColumnName("Score")]
public float PredictedPrice { get; set; }
}
Настройка конвейера прогнозирования
Независимо от того, выполняется ли одно или пакетное прогнозирование, конвейер прогнозирования необходимо загрузить в приложение. Этот конвейер содержит преобразования предварительной обработки данных и обученную модель. Следующий фрагмент кода загружает конвейер прогнозирования из файла с именем model.zip.
Important
Загружает только модели из доверенных источников. Загрузка моделей из ненадежных источников является угрозой безопасности.
//Create MLContext
MLContext mlContext = new MLContext();
// Load Trained Model
DataViewSchema predictionPipelineSchema;
ITransformer predictionPipeline = mlContext.Model.Load("model.zip", out predictionPipelineSchema);
Одно прогнозирование
Чтобы сделать один прогноз, создайте PredictionEngine с помощью загруженного конвейера прогнозирования.
// Create PredictionEngines
PredictionEngine<HousingData, HousingPrediction> predictionEngine = mlContext.Model.CreatePredictionEngine<HousingData, HousingPrediction>(predictionPipeline);
Затем используйте Predict метод и передайте входные данные в качестве параметра. Обратите внимание, что использование Predict метода не требует ввода IDataView. Это потому, что он удобно берёт на себя преобразование входного типа данных, поэтому вы можете передавать объект входного типа данных. Кроме того, так как CurrentPrice это целевой объект или метка, которую вы пытаетесь прогнозировать с помощью новых данных, предполагается, что на данный момент для него нет значения.
// Input Data
HousingData inputData = new HousingData
{
Size = 900f,
HistoricalPrices = new float[] { 155000f, 190000f, 220000f }
};
// Get Prediction
HousingPrediction prediction = predictionEngine.Predict(inputData);
Если обратиться к свойству Score объекта prediction, вы должны получить значение, аналогичное 150079.
Подсказка
PredictionEngine не является потокобезопасным. Кроме того, необходимо создать его экземпляр везде, где он понадобится в вашем приложении. По мере увеличения размера приложения этот процесс может стать неуправляемым. Для повышения производительности и безопасности потоков используйте сочетание внедрения зависимостей и службы PredictionEnginePool , которая создает ObjectPoolPredictionEngine объекты для использования во всем приложении.
Примеры использования службы PredictionEnginePool см. в статье о развертывании модели в веб-API и развертываниимодели для Функции Azure.
Дополнительные сведения см. в статье Внедрение зависимостей в ASP.NET Core.
Несколько прогнозов (IDataView)
Учитывая следующие данные, загрузите его в объект IDataView. В этом случае имя IDataView имеет значение inputData. Так как CurrentPrice это целевой объект или метка, которую вы пытаетесь прогнозировать с помощью новых данных, предполагается, что в данный момент для него нет значения.
// Actual data
HousingData[] housingData = new HousingData[]
{
new HousingData
{
Size = 850f,
HistoricalPrices = new float[] { 150000f, 175000f, 210000f }
},
new HousingData
{
Size = 900f,
HistoricalPrices = new float[] { 155000f, 190000f, 220000f }
},
new HousingData
{
Size = 550f,
HistoricalPrices = new float[] { 99000f, 98000f, 130000f }
}
};
Затем используйте Transform метод для применения преобразований данных и создания прогнозов.
// Predicted Data
IDataView predictions = predictionPipeline.Transform(inputData);
Проверьте прогнозируемые значения с помощью GetColumn метода.
// Get Predictions
float[] scoreColumn = predictions.GetColumn<float>("Score").ToArray();
Прогнозируемые значения в столбце оценки должны выглядеть следующим образом:
| Наблюдение | Prediction |
|---|---|
| 1 | 144638,2 |
| 2 | 150079.4 |
| 3 | 107789.8 |
Несколько прогнозов (PredictionEnginePool)
Чтобы выполнить несколько прогнозов с помощью PredictionEnginePool, можно использовать IEnumerable, содержащий несколько экземпляров входных данных модели. Например, возьмите IEnumerable<HousingInput> и примените метод Predict к каждому элементу с помощью метода LINQ Select.
В этом примере кода предполагается, что у вас есть PredictionEnginePool с именем predictionEnginePool и IEnumerable<HousingData> с именем housingData.
IEnumerable<HousingPrediction> predictions = housingData.Select(input => predictionEnginePool.Predict(input));
В результате получается IEnumerable, содержащий экземпляры ваших прогнозов. В этом случае это будет IEnumerable<HousingPrediction>.