Příprava dat pro vytvoření modeluPrepare data for building a model

Naučte se používat ML.NET k přípravě dat pro další zpracování nebo vytvoření modelu.Learn how to use ML.NET to prepare data for additional processing or building a model.

Data často nejsou čistá a zhuštěná.Data is often unclean and sparse. Algoritmy strojového učení ML.NET očekávají zadání nebo funkce v jednom numerickém vektoru.ML.NET machine learning algorithms expect input or features to be in a single numerical vector. Podobně hodnota pro předpověď (Label), zejména v případě, že je kategorií data, musí být kódována.Similarly, the value to predict (label), especially when it's categorical data, has to be encoded. Proto je jedním z cílů přípravy dat získat data do formátu očekávaného ML.NET algoritmy.Therefore one of the goals of data preparation is to get the data into the format expected by ML.NET algorithms.

Filtrovat dataFilter data

V některých případech nejsou všechna data v datové sadě relevantní pro účely analýzy.Sometimes, not all data in a dataset is relevant for analysis. Přístup k odebrání nerelevantních dat je filtrování.An approach to remove irrelevant data is filtering. DataOperationsCatalog obsahuje sadu operací filtrování, které přebírají IDataView obsahující všechna data a vracejí IDataView obsahující jenom datové body, které vás zajímají.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. Je důležité si uvědomit, že protože operace filtru nejsou IEstimator nebo ITransformer jako ty v TransformsCatalog, nedají se zahrnout jako součást EstimatorChain nebo TransformerChain kanálu pro přípravu dat.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.

Pomocí následujících vstupních dat, která se načítají do IDataView: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
    }
};

Chcete-li filtrovat data na základě hodnoty sloupce, použijte metodu FilterRowsByColumn .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);

Výše uvedená ukázka v datové sadě bere řádky s cenou mezi 200000 a 1000000.The sample above takes rows in the dataset with a price between 200000 and 1000000. Výsledek použití tohoto filtru vrátí jenom poslední dva řádky v datech a vyloučí první řádek, protože jeho cena je 100000 a ne mezi zadaným rozsahem.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.

Nahradit chybějící hodnotyReplace missing values

Chybějící hodnoty jsou běžné výskyty v datových sadách.Missing values are a common occurrence in datasets. Jediným způsobem, jak řešit chybějící hodnoty, je nahradit je výchozí hodnotou pro daný typ, pokud kteroukoli nebo jinou smysluplnou hodnotu, například střední hodnotu v datech.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.

Pomocí následujících vstupních dat, která se načítají do IDataView: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
    }
};

Všimněte si, že poslední prvek v našem seznamu má chybějící hodnotu pro Price.Notice that the last element in our list has a missing value for Price. Chcete-li nahradit chybějící hodnoty ve sloupci Price, použijte metodu ReplaceMissingValues k vyplnění chybějící hodnoty.To replace the missing values in the Price column, use the ReplaceMissingValues method to fill in that missing value.

Důležité

ReplaceMissingValue funguje pouze s numerickými daty.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 podporuje různé režimy nahrazení.ML.NET supports various replacement modes. Výše uvedená ukázka používá režim nahrazení Mean, ve kterém se vyplní chybějící hodnota průměrnou hodnotou tohoto sloupce.The sample above uses the Mean replacement mode which will fill in the missing value with that column's average value. Výsledek nahrazení vyplní vlastnost Price pro poslední prvek v datech s 200 000, protože se jedná o průměr 100 000 a 300 000.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.

Použít normalizyUse normalizers

Normalizace je metoda předběžného zpracování dat, která slouží ke standardizaci funkcí, které nejsou ve stejném měřítku, což pomáhá zvýšit sblížení algoritmů.Normalization is a data pre-processing technique used to standardize features that are not on the same scale which helps algorithms converge faster. Například rozsahy pro hodnoty, jako je věk a příjem, se výrazně liší v rozmezí 0-100 a příjem je obecně v rozsahu od 0 do tisíců.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. Podrobnější seznam a popis transformací normalizace najdete na stránce transformace .Visit the transforms page for a more detailed list and description of normalization transforms.

Normalizace min-maxMin-Max normalization

Pomocí následujících vstupních dat, která se načítají do IDataView: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
    }
};

Normalizace se dá použít na sloupce s jednou číselnou hodnotou i vektory.Normalization can be applied to columns with single numerical values as well as vectors. Normalizuje data ve sloupci Price pomocí normalizace min-max s metodou NormalizeMinMax .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);

Původní cenové hodnoty [200000,100000] jsou převedeny na [ 1, 0.5 ] pomocí vzorce MinMax normalizace, který generuje výstupní hodnoty v rozsahu 0-1.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.

BinninguBinning

Binningu převádí souvislé hodnoty do diskrétní reprezentace vstupu.Binning converts continuous values into a discrete representation of the input. Předpokládejme například, že jedna z vašich funkcí je věková.For example, suppose one of your features is age. Místo použití skutečné věkové hodnoty binningu vytvoří rozsahy pro tuto hodnotu.Instead of using the actual age value, binning creates ranges for that value. 0-18 může být jedna přihrádka, další by mohla být 19-35 a tak dále.0-18 could be one bin, another could be 19-35 and so on.

Pomocí následujících vstupních dat, která se načítají do IDataView: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
    }
};

Normalizuje data do přihrádek pomocí metody NormalizeBinning .Normalize the data into bins using the NormalizeBinning method. Parametr maximumBinCount umožňuje zadat počet přihrádek potřebných ke klasifikaci vašich dat.The maximumBinCount parameter enables you to specify the number of bins needed to classify your data. V tomto příkladu budou data vložena do dvou přihrádek.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);

Výsledek binningu vytvoří meze přihrádky [0,200000,Infinity].The result of binning creates bin bounds of [0,200000,Infinity]. Proto jsou výsledné přihrádky [0,1,1], protože první pozorování je mezi 0-200000 a ostatní jsou větší než 200000, ale menší než nekonečno.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.

Práce s kategorií datyWork with categorical data

Než se číselné kategorií data musí převést na číslo, než se použije k sestavení modelu Machine Learning.Non-numeric categorical data needs to be converted to a number before being used to build a machine learning model.

Pomocí následujících vstupních dat, která se načítají do IDataView: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"
    }
};

Vlastnost kategorií VehicleType lze převést na číslo pomocí metody OneHotEncoding .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);

Výsledná transformace převede textovou hodnotu VehicleType na číslo.The resulting transform converts the text value of VehicleType to a number. Při použití transformace se položky ve sloupci VehicleType stanou následujícím:The entries in the VehicleType column become the following when the transform is applied:

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

Práce s textovými datyWork with text data

Textová data je potřeba transformovat na čísla, než je použijete k sestavení modelu Machine Learning.Text data needs to be transformed into numbers before using it to build a machine learning model. Podrobnější seznam a popis transformací textu najdete na stránce transformace .Visit the transforms page for a more detailed list and description of text transforms.

Použití dat, jako jsou následující data, která byla načtena do IDataView: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
    }
};

Minimální krok pro převod textu na číselnou vektorovou reprezentaci je použití metody FeaturizeText .The minimum step to convert text to a numerical vector representation is to use the FeaturizeText method. Když použijete FeaturizeText transformaci, na vstupní textový sloupec se aplikuje řada transformací, což má za následek numerické vektory, které představují lineární-normalizované slovo a znak ngrams.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);

Výsledná transformace by převedla textové hodnoty ve sloupci Description na číselný vektor, který vypadá podobně jako výstup níže: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 ]

Kombinováním složitých kroků zpracování textu do EstimatorChain odebrat šum a případně snížit množství potřebných prostředků pro zpracování podle potřeby.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 obsahuje podmnožinu operací prováděných metodou FeaturizeText .textEstimator contains a subset of operations performed by the FeaturizeText method. Výhodou složitějšího kanálu je řízení a viditelnost při transformaci aplikovaných na data.The benefit of a more complex pipeline is control and visibility over the transformations applied to the data.

Pomocí první položky jako příklad se jedná o podrobný popis výsledků vyprodukovaných kroky transformace, které definuje textEstimator:Using the first entry as an example, the following is a detailed description of the results produced by the transformation steps defined by textEstimator:

Původní text: Jedná se o dobrý produkt.Original Text: This is a good product

TransformaceTransform PopisDescription VýsledekResult
1. NormalizeText1. NormalizeText Ve výchozím nastavení převede všechna písmena na malá.Converts all letters to lowercase by default Toto je dobrý produktthis is a good product
2. TokenizeWords2. TokenizeWords Rozdělí řetězec na jednotlivá slova.Splits string into individual words ["This", "is", "a", "Dobrá", "Product"]["this","is","a","good","product"]
3. RemoveDefaultStopWords3. RemoveDefaultStopWords Odebere stopslova jako je a .Removes stopwords like is and a. ["dobré", "produkt"]["good","product"]
4. MapValueToKey4. MapValueToKey Mapuje hodnoty na klíče (kategorie) na základě vstupních dat.Maps the values to keys (categories) based on the input data [1, 2][1,2]
5. ProduceNGrams5. ProduceNGrams Transformuje text na posloupnost po sobě jdoucích slov.Transforms text into sequence of consecutive words [1, 1, 1, 0, 0][1,1,1,0,0]
6. NormalizeLpNorm6. NormalizeLpNorm Škálování vstupů podle jejich LP-normyScale inputs by their lp-norm [0,577350529, 0,577350529, 0,577350529, 0, 0][ 0.577350529, 0.577350529, 0.577350529, 0, 0 ]