Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dowiedz się, jak używać wytrenowanego modelu do przewidywania.
Tworzenie modeli danych
Dane wejściowe
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; }
}
Dane wyjściowe
Podobnie jak w przypadku nazw kolumn wejściowych Features i Label, ML.NET ma domyślne nazwy dla kolumn przewidywanych wartości generowanych przez model. Nazwy mogą się różnić w zależności od zadania.
Ponieważ algorytm używany w tym przykładzie jest algorytmem regresji liniowej, domyślną nazwą kolumny wyjściowej jest Score, która jest zdefiniowana przez ColumnName atrybut właściwości PredictedPrice .
class HousingPrediction
{
[ColumnName("Score")]
public float PredictedPrice { get; set; }
}
Skonfiguruj potok predykcji
Niezależnie od tego, czy jest to przewidywanie pojedyncze, czy wsadowe, potok przewidywania musi zostać załadowany do aplikacji. Ten potok zawiera zarówno transformacje wstępnego przetwarzania danych, jak i wytrenowany model. Poniższy fragment kodu ładuje potok predykcji z pliku o nazwie model.zip.
Ważna
Ładuj tylko modele z zaufanych źródeł. Ładowanie modeli z niezaufanych źródeł jest zagrożeniem bezpieczeństwa.
//Create MLContext
MLContext mlContext = new MLContext();
// Load Trained Model
DataViewSchema predictionPipelineSchema;
ITransformer predictionPipeline = mlContext.Model.Load("model.zip", out predictionPipelineSchema);
Pojedyncze przewidywanie
Aby wykonać pojedynczą predykcję, utwórz PredictionEngine za pomocą załadowanego potoku predykcji.
// Create PredictionEngines
PredictionEngine<HousingData, HousingPrediction> predictionEngine = mlContext.Model.CreatePredictionEngine<HousingData, HousingPrediction>(predictionPipeline);
Następnie użyj Predict metody i przekaż dane wejściowe jako parametr. Zwróć uwagę, że użycie metody Predict nie wymaga, aby dane wejściowe były elementem IDataView. Dzieje się tak dlatego, że wygodnie internalizuje manipulowanie typem danych wejściowych, dzięki czemu można przekazać obiekt typu danych wejściowych. Ponadto, ponieważ CurrentPrice jest zmienną docelową lub etykietą, którą próbujesz przewidzieć na podstawie nowych danych, zakłada się, że obecnie nie ma jeszcze przypisanej wartości.
// Input Data
HousingData inputData = new HousingData
{
Size = 900f,
HistoricalPrices = new float[] { 155000f, 190000f, 220000f }
};
// Get Prediction
HousingPrediction prediction = predictionEngine.Predict(inputData);
Jeśli uzyskujesz dostęp do Score właściwości prediction obiektu, należy uzyskać wartość podobną do 150079.
Napiwek
PredictionEngine nie jest bezpieczny dla wątków. Ponadto należy utworzyć jego instancję wszędzie tam, gdzie jest to potrzebne w aplikacji. W miarę rozwoju aplikacji ten proces może stać się niezarządzany. W celu zwiększenia wydajności i bezpieczeństwa wątków należy użyć kombinacji wstrzykiwania zależności i usługi PredictionEnginePool , która tworzy ObjectPoolPredictionEngine obiekty do użytku w całej aplikacji.
Aby zapoznać się z przykładami korzystania z usługi PredictionEnginePool, zobacz wdrażanie modelu do internetowego interfejsu API i wdrażanie modelu do usługi Azure Functions.
Aby uzyskać więcej informacji, zobacz Wstrzykiwanie zależności na platformie ASP.NET Core.
Wiele przewidywań (IDataView)
Biorąc pod uwagę następujące dane, załaduj je do obiektu IDataView. W takim przypadku nazwa elementu IDataView to inputData. Ponieważ CurrentPrice jest zmienną docelową lub etykietą, którą próbujesz przewidzieć na podstawie nowych danych, przyjmuje się, że obecnie nie ma ona żadnej wartości.
// 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 }
}
};
Następnie użyj Transform metody , aby zastosować przekształcenia danych i wygenerować przewidywania.
// Predicted Data
IDataView predictions = predictionPipeline.Transform(inputData);
Sprawdź przewidywane wartości przy użyciu GetColumn metody .
// Get Predictions
float[] scoreColumn = predictions.GetColumn<float>("Score").ToArray();
Przewidywane wartości w kolumnie score powinny przypominać następujące wartości:
| Obserwacja | Prediction |
|---|---|
| 1 | 144638,2 |
| 2 | 150079.4 |
| 3 | 107789.8 |
Wiele przewidywań (PredictionEnginePool)
Aby wykonać wiele predykcji przy użyciu składnika PredictionEnginePool, możesz użyć obiektu IEnumerable, który zawiera wiele wystąpień danych wejściowych modelu. Na przykład zastosuj metodę IEnumerable<HousingInput> i zastosuj metodę Predict do każdego elementu przy użyciu metody LINQ Select .
W tym przykładzie kodu zakłada się, że masz PredictionEnginePool o nazwie predictionEnginePool oraz obiekt IEnumerable<HousingData> o nazwie housingData.
IEnumerable<HousingPrediction> predictions = housingData.Select(input => predictionEnginePool.Predict(input));
Wynikiem jest element IEnumerable zawierający instancje Twoich przewidywań. W tym przypadku będzie to IEnumerable<HousingPrediction>.