Vorbereiten von Daten für die ModellerstellungPrepare data for building a model

Erfahren Sie, wie Sie ML.NET verwenden können, um Daten für die weitere Verarbeitung oder die Erstellung eines Modells aufzubereiten.Learn how to use ML.NET to prepare data for additional processing or building a model.

Die Daten sind oft unsauber und haben eine geringe Dichte.Data is often unclean and sparse. Für Machine-Learning-Algorithmen in ML.NET sind Eingaben oder Features in einem einzigen numerischen Vektor erforderlich.ML.NET machine learning algorithms expect input or features to be in a single numerical vector. Analog dazu muss der Wert, der vorhersagt werden soll (Label), codiert werden. Dies gilt insbesondere für kategorische Daten.Similarly, the value to predict (label), especially when it's categorical data, has to be encoded. Daher besteht eines der Ziele der Datenaufbereitung darin, die Daten in das von ML.NET-Algorithmen erwartete Format zu bringen.Therefore one of the goals of data preparation is to get the data into the format expected by ML.NET algorithms.

Filtern von DatenFilter data

Manchmal sind nicht alle Daten in einem Dataset für die Analyse relevant.Sometimes, not all data in a dataset is relevant for analysis. Ein Ansatz zur Entfernung irrelevanter Daten ist das Filtern.An approach to remove irrelevant data is filtering. Der DataOperationsCatalog enthält eine Reihe von Filtervorgängen, der eine IDataView mit allen Daten aufnehmen und eine IDataView zurückgeben kann, die nur die Datenpunkte von Interesse enthält.The DataOperationsCatalog contains a set of filter operations that take in an IDataView containing all of the data and return an IDataView containing only the data points of interest. Es ist wichtig zu beachten, dass Filtervorgänge nicht als Teil einer EstimatorChain- oder TransformerChain-Datenaufbereitungspipeline aufgenommen werden können, da sie kein IEstimator oder ITransformer wie im TransformsCatalog sind.It's important to note that because filter operations are not an IEstimator or ITransformer like those in the TransformsCatalog, they cannot be included as part of an EstimatorChain or TransformerChain data preparation pipeline.

Verwenden die folgenden Eingabedaten, die in eine IDataView geladen werden:Using the following input data which is loaded into an IDataView:

HomeData[] homeDataList = new HomeData[]
{
    new HomeData
    {
        NumberOfBedrooms=1f,
        Price=100000f
    },
    new HomeData
    {
        NumberOfBedrooms=2f,
        Price=300000f
    },
    new HomeData
    {
        NumberOfBedrooms=6f,
        Price=600000f
    }
};

Um Daten nach dem Wert einer Spalte zu filtern, verwenden Sie die FilterRowsByColumn-Methode.To filter data based on the value of a column, use the FilterRowsByColumn method.

// Apply filter
IDataView filteredData = mlContext.Data.FilterRowsByColumn(data, "Price", lowerBound: 200000, upperBound: 1000000);

Das obige Beispiel zeigt Zeilen im Dataset mit einem Preis zwischen 20.0000 und 100.000.000.The sample above takes rows in the dataset with a price between 200000 and 1000000. Das Ergebnis der Anwendung dieses Filters würde nur die letzten beiden Zeilen in den Daten zurückgeben und die erste Zeile ausschließen, da der Preis den Wert 100000 hat und nicht im angegebenen Bereich liegt.The result of applying this filter would return only the last two rows in the data and exclude the first row because its price is 100000 and not between the specified range.

Ersetzen fehlender WerteReplace missing values

Fehlende Werte kommen in Datasets häufig vor.Missing values are a common occurrence in datasets. Ein Ansatz für den Umgang mit fehlenden Daten, besteht darin, sie durch den Standardwert für den gegebenen Typ zu ersetzen, falls vorhanden, oder durch einen anderen sinnvollen Wert, wie beispielsweise den Mittelwert der Daten.One approach to dealing with missing values is to replace them with the default value for the given type if any or another meaningful value such as the mean value in the data.

Verwenden die folgenden Eingabedaten, die in eine IDataView geladen werden:Using the following input data which is loaded into an IDataView:

HomeData[] homeDataList = new HomeData[]
{
    new HomeData
    {
        NumberOfBedrooms=1f,
        Price=100000f
    },
    new HomeData
    {
        NumberOfBedrooms=2f,
        Price=300000f
    },
    new HomeData
    {
        NumberOfBedrooms=6f,
        Price=float.NaN
    }
};

Beachten Sie, dass im letzten Element in unserer Liste ein Wert für Price fehlt.Notice that the last element in our list has a missing value for Price. Um die fehlenden Werte in der Price-Spalte zu ersetzen, verwenden Sie die -Methode ReplaceMissingValues, um diesen fehlenden Wert einzugeben.To replace the missing values in the Price column, use the ReplaceMissingValues method to fill in that missing value.

Wichtig

ReplaceMissingValue funktioniert nur mit numerischen Daten.ReplaceMissingValue only works with numerical data.

// Define replacement estimator
var replacementEstimator = mlContext.Transforms.ReplaceMissingValues("Price", replacementMode: MissingValueReplacingEstimator.ReplacementMode.Mean);

// Fit data to estimator
// Fitting generates a transformer that applies the operations of defined by estimator
ITransformer replacementTransformer = replacementEstimator.Fit(data);

// Transform data
IDataView transformedData = replacementTransformer.Transform(data);

ML.NET unterstützt verschiedene Ersetzungsmodi.ML.NET supports various replacement modes. Das obige Beispiel verwendet den Mean-Ersetzungsmodus, der den fehlenden Wert mit dem Durchschnittswert dieser Spalte ausfüllt.The sample above uses the Mean replacement mode which will fill in the missing value with that column's average value. Das Ergebnis der Ersetzung trägt für die Price-Eigenschaft für das letzte Element in unseren Daten mit 200.000 ein, da dies der Durchschnitt von 100.000 und 300.000 ist.The replacement 's result fills in the Price property for the last element in our data with 200,000 since it's the average of 100,000 and 300,000.

Verwenden von NormalisierungsfunktionenUse normalizers

Die Normalisierung ist eine Datenvorverarbeitungstechnik, die verwendet wird, um Features zu standardisieren, die nicht in der gleichen Größenordnung liegen. Da können Algorithmen schneller konvergieren.Normalization is a data pre-processing technique used to standardize features that are not on the same scale which helps algorithms converge faster. So variieren beispielsweise die Bereiche für Werte wie Alter und Einkommen stark, wobei das Alter im Allgemeinen im Bereich von 0-100 und das Einkommen im Allgemeinen im Bereich von Null bis Tausend liegt.For example, the ranges for values like age and income vary significantly with age generally being in the range of 0-100 and income generally being in the range of zero to thousands. Eine detailliertere Liste und Beschreibung der Normalisierungstransformationen finden Sie auf der Seite zu Datentransformationen.Visit the transforms page for a more detailed list and description of normalization transforms.

Min-Max-NormalisierungMin-Max normalization

Verwenden die folgenden Eingabedaten, die in eine IDataView geladen werden:Using the following input data which is loaded into an IDataView:

HomeData[] homeDataList = new HomeData[]
{
    new HomeData
    {
        NumberOfBedrooms = 2f,
        Price = 200000f
    },
    new HomeData
    {
        NumberOfBedrooms = 1f,
        Price = 100000f
    }
};

Auf Spalten mit einzelnen numerischen Werten sowie auf Vektoren kann Normalisierung angewendet werden.Normalization can be applied to columns with single numerical values as well as vectors. Verwenden Sie die Min-Max-Normalisierung mit der NormalizeMinMax-Methode, um die Daten in der Spalte Price zu normalisieren.Normalize the data in the Price column using min-max normalization with the NormalizeMinMax method.

// Define min-max estimator
var minMaxEstimator = mlContext.Transforms.NormalizeMinMax("Price");

// Fit data to estimator
// Fitting generates a transformer that applies the operations of defined by estimator
ITransformer minMaxTransformer = minMaxEstimator.Fit(data);

// Transform data
IDataView transformedData = minMaxTransformer.Transform(data);

Die ursprünglichen Preiswerte [200000,100000] werden unter Verwendung der Normalisierungsformel MinMax in [ 1, 0.5 ] umgewandelt, wodurch Ausgabewerte im Bereich von 0-1 generiert werden.The original price values [200000,100000] are converted to [ 1, 0.5 ] using the MinMax normalization formula which generates output values in the range of 0-1.

QuantisierungBinning

Die Quantisierung konvertiert kontinuierliche Werte in eine diskrete Darstellung der Eingabe.Binning converts continuous values into a discrete representation of the input. Nehmen wir beispielsweise an, dass eines Ihrer Features das Alter ist.For example, suppose one of your features is age. Anstatt den tatsächlichen Alterswert zu verwenden, werden durch die Quantisierung Bereiche für diesen Wert erstellt.Instead of using the actual age value, binning creates ranges for that value. 0 bis 18 könnte dabei einer der Bereiche sein, ein anderer könnte 19 bis 35 sein usw.0-18 could be one bin, another could be 19-35 and so on.

Verwenden die folgenden Eingabedaten, die in eine IDataView geladen werden:Using the following input data which is loaded into an IDataView:

HomeData[] homeDataList = new HomeData[]
{
    new HomeData
    {
        NumberOfBedrooms=1f,
        Price=100000f
    },
    new HomeData
    {
        NumberOfBedrooms=2f,
        Price=300000f
    },
    new HomeData
    {
        NumberOfBedrooms=6f,
        Price=600000f
    }
};

Normalisieren Sie die Daten mit der NormalizeBinning-Methode in Bereiche.Normalize the data into bins using the NormalizeBinning method. Mit dem maximumBinCount-Parameter können Sie die Anzahl der Bereiche angeben, die zur Klassifizierung Ihrer Daten benötigt werden.The maximumBinCount parameter enables you to specify the number of bins needed to classify your data. In diesem Beispiel werden Daten in zwei Bereiche aufgeteilt.In this example, data will be put into two bins.

// Define binning estimator
var binningEstimator = mlContext.Transforms.NormalizeBinning("Price", maximumBinCount: 2);

// Fit data to estimator
// Fitting generates a transformer that applies the operations of defined by estimator
var binningTransformer = binningEstimator.Fit(data);

// Transform Data
IDataView transformedData = binningTransformer.Transform(data);

Durch die Quantisierung werden Bereichsbegrenzungen von [0,200000,Infinity] erstellt.The result of binning creates bin bounds of [0,200000,Infinity]. Daher sind die resultierenden Bereiche [0,1,1], weil die erste beobachteten Werte zwischen 0 und 200.000 liegen und die anderen größer als 200.000, aber kleiner als unendlich sind.Therefore the resulting bins are [0,1,1] because the first observation is between 0-200000 and the others are greater than 200000 but less than infinity.

Arbeiten mit KategoriedatenWork with categorical data

Nicht-numerische Kategoriedaten müssen in eine Zahl umgewandelt werden, bevor sie zum Erstellen eines Machine Learning-Modells verwendet werden können.Non-numeric categorical data needs to be converted to a number before being used to build a machine learning model.

Verwenden die folgenden Eingabedaten, die in eine IDataView geladen werden:Using the following input data which is loaded into an IDataView:

CarData[] cars = new CarData[]
{
    new CarData
    {
        Color="Red",
        VehicleType="SUV"
    },
    new CarData
    {
        Color="Blue",
        VehicleType="Sedan"
    },
    new CarData
    {
        Color="Black",
        VehicleType="SUV"
    }
};

Die Kategorieeigenschaft VehicleType kann mit der OneHotEncoding-Methode in eine Zahl konvertiert werden.The categorical VehicleType property can be converted into a number using the OneHotEncoding method.

// Define categorical transform estimator
var categoricalEstimator = mlContext.Transforms.Categorical.OneHotEncoding("VehicleType");

// Fit data to estimator
// Fitting generates a transformer that applies the operations of defined by estimator
ITransformer categoricalTransformer = categoricalEstimator.Fit(data);

// Transform Data
IDataView transformedData = categoricalTransformer.Transform(data);

Die daraus resultierende Transformation konvertiert den Textwert von VehicleType in eine Zahl.The resulting transform converts the text value of VehicleType to a number. Die Einträge in der VehicleType-Spalte sehen beim Anwenden der Transformation wie folgt aus:The entries in the VehicleType column become the following when the transform is applied:

[
    1, // SUV
    2, // Sedan
    1 // SUV
]

Arbeiten mit TextdatenWork with text data

Textdaten müssen in Zahlen umgewandelt werden, bevor sie zum Erstellen eines Machine Learning-Modells verwendet werden können.Text data needs to be transformed into numbers before using it to build a machine learning model. Eine detailliertere Liste und Beschreibung der Texttransformationen finden Sie auf der Seite zu Datentransformationen.Visit the transforms page for a more detailed list and description of text transforms.

Verwenden Sie Daten wie die Daten unten, die in eine IDataView geladen wurden:Using data like the data below that has been loaded into an IDataView:

ReviewData[] reviews = new ReviewData[]
{
    new ReviewData
    {
        Description="This is a good product",
        Rating=4.7f
    },
    new ReviewData
    {
        Description="This is a bad product",
        Rating=2.3f
    }
};

Zur Konvertierung von Text in eine numerische Vektordarstellung muss mindestens die FeaturizeText-Methode verwendet werden.The minimum step to convert text to a numerical vector representation is to use the FeaturizeText method. Durch die Verwendung der FeaturizeText-Transformation wird eine Reihe von Transformationen für die Eingabespalte durchgeführt, was zu einem numerischen Vektor führt, der die Lp-normalisierten Wort- und Zeichen-N-Gramme darstellt.By using the FeaturizeText transform, a series of transformations is applied to the input text column resulting in a numerical vector representing the lp-normalized word and character ngrams.

// Define text transform estimator
var textEstimator  = mlContext.Transforms.Text.FeaturizeText("Description");

// Fit data to estimator
// Fitting generates a transformer that applies the operations of defined by estimator
ITransformer textTransformer = textEstimator.Fit(data);

// Transform data
IDataView transformedData = textTransformer.Transform(data);

Die resultierende Transformation konvertiert die Textwerte in der Description-Spalte in einen numerischen Vektor, der der folgenden Ausgabe ähnelt:The resulting transform would convert the text values in the Description column to a numerical vector that looks similar to the output below:

[ 0.2041241, 0.2041241, 0.2041241, 0.4082483, 0.2041241, 0.2041241, 0.2041241, 0.2041241, 0.2041241, 0.2041241, 0.2041241, 0.2041241, 0.2041241, 0.2041241, 0.2041241, 0.2041241, 0.2041241, 0.2041241, 0.2041241, 0.2041241, 0.2041241, 0, 0, 0, 0, 0.4472136, 0.4472136, 0.4472136, 0.4472136, 0.4472136, 0 ]

Kombinieren Sie komplexe Textverarbeitungsschritte zu einer EstimatorChain, um Rauschen zu entfernen und bei Bedarf die Menge der erforderlichen Verarbeitungsressourcen zu reduzieren.Combine complex text processing steps into an EstimatorChain to remove noise and potentially reduce the amount of required processing resources as needed.

// Define text transform estimator
var textEstimator = mlContext.Transforms.Text.NormalizeText("Description")
    .Append(mlContext.Transforms.Text.TokenizeIntoWords("Description"))
    .Append(mlContext.Transforms.Text.RemoveDefaultStopWords("Description"))
    .Append(mlContext.Transforms.Conversion.MapValueToKey("Description"))
    .Append(mlContext.Transforms.Text.ProduceNgrams("Description"))
    .Append(mlContext.Transforms.NormalizeLpNorm("Description"));

textEstimator enthält eine Teilmenge von Vorgängen, die von der FeaturizeText-Methode durchgeführt werden.textEstimator contains a subset of operations performed by the FeaturizeText method. Der Vorteil einer komplexeren Pipeline ist die Steuerung und Sichtbarkeit hinsichtlich der Transformationen, die für die Daten durchgeführt werden.The benefit of a more complex pipeline is control and visibility over the transformations applied to the data.

Im Folgenden finden Sie am Beispiel des ersten Eintrags eine detaillierte Beschreibung der Ergebnisse, die durch die vom textEstimator definierten Transformationsschritte generiert wurden:Using the first entry as an example, the following is a detailed description of the results produced by the transformation steps defined by textEstimator:

Ursprünglicher Text: Das ist ein gutes ProduktOriginal Text: This is a good product

TransformationTransform BESCHREIBUNGDescription ErgebnisResult
1. NormalizeText1. NormalizeText Konvertiert standardmäßig alle Buchstaben in KleinbuchstabenConverts all letters to lowercase by default das ist ein gutes produktthis is a good product
2. TokenizeWords2. TokenizeWords Teilt die Zeichenfolge in einzelne Wörter aufSplits string into individual words [„das“, „ist“, „ein“, „gutes“, „produkt“]["this","is","a","good","product"]
3. RemoveDefaultStopWords3. RemoveDefaultStopWords Entfernt die Stoppwörter wie ist und ein.Removes stopwords like is and a. [„gutes“, „produkt“]["good","product"]
4. MapValueToKey4. MapValueToKey Ordnet die Werte den Schlüsseln (Kategorien) basierend auf den Eingabedaten zuMaps the values to keys (categories) based on the input data [1,2][1,2]
5. ProduceNGrams5. ProduceNGrams Transformiert Text in eine Folge von aufeinander folgenden WörternTransforms text into sequence of consecutive words [1,1,1,0,0][1,1,1,0,0]
6. NormalizeLpNorm6. NormalizeLpNorm Skaliert Eingaben durch ihre Lp-NormScale inputs by their lp-norm [ 0,577350529, 0,577350529, 0,577350529, 0, 0 ][ 0.577350529, 0.577350529, 0.577350529, 0, 0 ]