CategoricalCatalog.OneHotHashEncoding Metodo

Definizione

Overload

OneHotHashEncoding(TransformsCatalog+CategoricalTransforms, InputOutputColumnPair[], OneHotEncodingEstimator+OutputKind, Int32, UInt32, Boolean, Int32)

Creare un OneHotHashEncodingEstimatoroggetto , che converte una o più colonne di testo di input specificate da columns in quante colonne di vettori con codifica one-hot basati su hash.

OneHotHashEncoding(TransformsCatalog+CategoricalTransforms, String, String, OneHotEncodingEstimator+OutputKind, Int32, UInt32, Boolean, Int32)

Creare un OneHotHashEncodingEstimatoroggetto , che converte una colonna di testo specificata da inputColumnName in una colonna vettoriale con codifica one-hot basata su hash denominata outputColumnName.

OneHotHashEncoding(TransformsCatalog+CategoricalTransforms, InputOutputColumnPair[], OneHotEncodingEstimator+OutputKind, Int32, UInt32, Boolean, Int32)

Creare un OneHotHashEncodingEstimatoroggetto , che converte una o più colonne di testo di input specificate da columns in quante colonne di vettori con codifica one-hot basati su hash.

public static Microsoft.ML.Transforms.OneHotHashEncodingEstimator OneHotHashEncoding (this Microsoft.ML.TransformsCatalog.CategoricalTransforms catalog, Microsoft.ML.InputOutputColumnPair[] columns, Microsoft.ML.Transforms.OneHotEncodingEstimator.OutputKind outputKind = Microsoft.ML.Transforms.OneHotEncodingEstimator+OutputKind.Indicator, int numberOfBits = 16, uint seed = 314489979, bool useOrderedHashing = true, int maximumNumberOfInverts = 0);
static member OneHotHashEncoding : Microsoft.ML.TransformsCatalog.CategoricalTransforms * Microsoft.ML.InputOutputColumnPair[] * Microsoft.ML.Transforms.OneHotEncodingEstimator.OutputKind * int * uint32 * bool * int -> Microsoft.ML.Transforms.OneHotHashEncodingEstimator
<Extension()>
Public Function OneHotHashEncoding (catalog As TransformsCatalog.CategoricalTransforms, columns As InputOutputColumnPair(), Optional outputKind As OneHotEncodingEstimator.OutputKind = Microsoft.ML.Transforms.OneHotEncodingEstimator+OutputKind.Indicator, Optional numberOfBits As Integer = 16, Optional seed As UInteger = 314489979, Optional useOrderedHashing As Boolean = true, Optional maximumNumberOfInverts As Integer = 0) As OneHotHashEncodingEstimator

Parametri

catalog
TransformsCatalog.CategoricalTransforms

Catalogo di trasformazione

columns
InputOutputColumnPair[]

Coppie di colonne di input e output. Il tipo di dati delle colonne di output sarà un vettore di Single se outputKind è Bag, Indicatore Binary. Se outputKind è Key, il tipo di dati delle colonne di output sarà una chiave nel caso di colonna di input scalare o di un vettore di chiavi nel caso di una colonna di input vettore.

outputKind
OneHotEncodingEstimator.OutputKind

Modalità di conversione.

numberOfBits
Int32

Numero di bit in cui eseguire l'hash. Deve essere compreso tra 1 e 30, inclusivo.

seed
UInt32

Hashing di inizializzazione.

useOrderedHashing
Boolean

Se la posizione di ogni termine deve essere inclusa nell'hash.

maximumNumberOfInverts
Int32

Durante l'hashing si constuct mapping tra i valori originali e i valori hash prodotti. La rappresentazione testuale dei valori originali viene archiviata nei nomi degli slot dei metadati per la nuova colonna. L'hashing, ad esempio, può eseguire il mapping di molti valori iniziali a uno. maximumNumberOfInverts specifica il limite superiore del numero di valori di input distinti mappati a un hash che deve essere mantenuto. 0 non mantiene valori di input. -1 mantiene il mapping di tutti i valori di input a ogni hash.

Restituisce

Esempio

using System;
using Microsoft.ML;

namespace Samples.Dynamic.Transforms.Categorical
{
    public static class OneHotHashEncodingMultiColumn
    {
        public static void Example()
        {
            // Create a new ML context for ML.NET operations. It can be used for
            // exception tracking and logging as well as the source of randomness.
            var mlContext = new MLContext();

            // Get a small dataset as an IEnumerable.
            var samples = new[]
            {
                new DataPoint {Education = "0-5yrs", ZipCode = "98005"},
                new DataPoint {Education = "0-5yrs", ZipCode = "98052"},
                new DataPoint {Education = "6-11yrs", ZipCode = "98005"},
                new DataPoint {Education = "6-11yrs", ZipCode = "98052"},
                new DataPoint {Education = "11-15yrs", ZipCode = "98005"}
            };

            // Convert training data to IDataView.
            IDataView data = mlContext.Data.LoadFromEnumerable(samples);

            // Multi column example: A pipeline for one hot has encoding two
            // columns 'Education' and 'ZipCode'.
            var multiColumnKeyPipeline =
                mlContext.Transforms.Categorical.OneHotHashEncoding(
                    new[]
                    {
                        new InputOutputColumnPair("Education"),
                        new InputOutputColumnPair("ZipCode")
                    },
                    numberOfBits: 3);

            // Fit and Transform the data.
            IDataView transformedData =
                multiColumnKeyPipeline.Fit(data).Transform(data);

            var convertedData =
                mlContext.Data.CreateEnumerable<TransformedData>(transformedData,
                    true);

            Console.WriteLine(
                "One Hot Hash Encoding of two columns 'Education' and 'ZipCode'.");

            // One Hot Hash Encoding of two columns 'Education' and 'ZipCode'.

            foreach (TransformedData item in convertedData)
                Console.WriteLine("{0}\t\t\t{1}", string.Join(" ", item.Education),
                    string.Join(" ", item.ZipCode));

            // We have 8 slots, because we used numberOfBits = 3.

            // 0 0 0 1 0 0 0 0                 0 0 0 0 0 0 0 1
            // 0 0 0 1 0 0 0 0                 1 0 0 0 0 0 0 0
            // 0 0 0 0 1 0 0 0                 0 0 0 0 0 0 0 1
            // 0 0 0 0 1 0 0 0                 1 0 0 0 0 0 0 0
            // 0 0 0 0 0 0 0 1                 0 0 0 0 0 0 0 1
        }

        private class DataPoint
        {
            public string Education { get; set; }

            public string ZipCode { get; set; }
        }

        private class TransformedData
        {
            public float[] Education { get; set; }

            public float[] ZipCode { get; set; }
        }
    }
}

Commenti

Se più colonne vengono passate allo strumento di stima, tutte le colonne verranno elaborate in un singolo passaggio sui dati. Pertanto, è più efficiente specificare uno stimatore con molte colonne che è quello di specificare molti stimatori ognuno con una singola colonna.

Si applica a

OneHotHashEncoding(TransformsCatalog+CategoricalTransforms, String, String, OneHotEncodingEstimator+OutputKind, Int32, UInt32, Boolean, Int32)

Creare un OneHotHashEncodingEstimatoroggetto , che converte una colonna di testo specificata da inputColumnName in una colonna vettoriale con codifica one-hot basata su hash denominata outputColumnName.

public static Microsoft.ML.Transforms.OneHotHashEncodingEstimator OneHotHashEncoding (this Microsoft.ML.TransformsCatalog.CategoricalTransforms catalog, string outputColumnName, string inputColumnName = default, Microsoft.ML.Transforms.OneHotEncodingEstimator.OutputKind outputKind = Microsoft.ML.Transforms.OneHotEncodingEstimator+OutputKind.Indicator, int numberOfBits = 16, uint seed = 314489979, bool useOrderedHashing = true, int maximumNumberOfInverts = 0);
static member OneHotHashEncoding : Microsoft.ML.TransformsCatalog.CategoricalTransforms * string * string * Microsoft.ML.Transforms.OneHotEncodingEstimator.OutputKind * int * uint32 * bool * int -> Microsoft.ML.Transforms.OneHotHashEncodingEstimator
<Extension()>
Public Function OneHotHashEncoding (catalog As TransformsCatalog.CategoricalTransforms, outputColumnName As String, Optional inputColumnName As String = Nothing, Optional outputKind As OneHotEncodingEstimator.OutputKind = Microsoft.ML.Transforms.OneHotEncodingEstimator+OutputKind.Indicator, Optional numberOfBits As Integer = 16, Optional seed As UInteger = 314489979, Optional useOrderedHashing As Boolean = true, Optional maximumNumberOfInverts As Integer = 0) As OneHotHashEncodingEstimator

Parametri

catalog
TransformsCatalog.CategoricalTransforms

Catalogo di trasformazione.

outputColumnName
String

Nome della colonna risultante dalla trasformazione di inputColumnName. Il tipo di dati di questa colonna sarà un vettore di Single se outputKind è Bag, Indicatore Binary. Se outputKind è Key, il tipo di dati di questa colonna sarà una chiave nel caso di una colonna di input scalare o di un vettore di chiavi nel caso di una colonna di input vettore.

inputColumnName
String

Nome della colonna da trasformare. Se impostato su null, il valore dell'oggetto outputColumnName verrà usato come origine. Il tipo di dati di questa colonna può essere scalare o vettore di numeri, testo, booleano DateTime o DateTimeOffset.

outputKind
OneHotEncodingEstimator.OutputKind

Modalità di conversione.

numberOfBits
Int32

Numero di bit in cui eseguire l'hash. Deve essere compreso tra 1 e 30, inclusivo.

seed
UInt32

Hashing di inizializzazione.

useOrderedHashing
Boolean

Se la posizione di ogni termine deve essere inclusa nell'hash.

maximumNumberOfInverts
Int32

Durante l'hashing si constuct mapping tra i valori originali e i valori hash prodotti. La rappresentazione testuale dei valori originali viene archiviata nei nomi degli slot dei metadati per la nuova colonna. L'hashing, ad esempio, può eseguire il mapping di molti valori iniziali a uno. maximumNumberOfInverts specifica il limite superiore del numero di valori di input distinti mappati a un hash che deve essere mantenuto. 0 non mantiene valori di input. -1 mantiene il mapping di tutti i valori di input a ogni hash.

Restituisce

Esempio

using System;
using Microsoft.ML;
using Microsoft.ML.Data;
using Microsoft.ML.Transforms;

namespace Samples.Dynamic.Transforms.Categorical
{
    public static class OneHotHashEncoding
    {
        public static void Example()
        {
            // Create a new ML context for ML.NET operations. It can be used for
            // exception tracking and logging as well as the source of randomness.
            var mlContext = new MLContext();

            // Create a small dataset as an IEnumerable.
            var samples = new[]
            {
                new DataPoint {Education = "0-5yrs"},
                new DataPoint {Education = "0-5yrs"},
                new DataPoint {Education = "6-11yrs"},
                new DataPoint {Education = "6-11yrs"},
                new DataPoint {Education = "11-15yrs"}
            };

            // Convert training data to an IDataView.
            IDataView data = mlContext.Data.LoadFromEnumerable(samples);

            // A pipeline for one hot hash encoding the 'Education' column.
            var pipeline = mlContext.Transforms.Categorical.OneHotHashEncoding(
                "EducationOneHotHashEncoded", "Education", numberOfBits: 3);

            // Fit and transform the data.
            IDataView hashEncodedData = pipeline.Fit(data).Transform(data);

            PrintDataColumn(hashEncodedData, "EducationOneHotHashEncoded");
            // We have 8 slots, because we used numberOfBits = 3.

            // 0 0 0 1 0 0 0 0
            // 0 0 0 1 0 0 0 0
            // 0 0 0 0 1 0 0 0
            // 0 0 0 0 1 0 0 0
            // 0 0 0 0 0 0 0 1

            // A pipeline for one hot hash encoding the 'Education' column
            // (using keying strategy).
            var keyPipeline = mlContext.Transforms.Categorical.OneHotHashEncoding(
                "EducationOneHotHashEncoded", "Education",
                OneHotEncodingEstimator.OutputKind.Key, 3);

            // Fit and transform the data.
            IDataView hashKeyEncodedData = keyPipeline.Fit(data).Transform(data);

            // Get the data of the newly created column for inspecting.
            var keyEncodedColumn =
                hashKeyEncodedData.GetColumn<uint>("EducationOneHotHashEncoded");

            Console.WriteLine(
                "One Hot Hash Encoding of single column 'Education', with key " +
                "type output.");

            // One Hot Hash Encoding of single column 'Education', with key type output.

            foreach (uint element in keyEncodedColumn)
                Console.WriteLine(element);

            // 4
            // 4
            // 5
            // 5
            // 8
        }

        private static void PrintDataColumn(IDataView transformedData,
            string columnName)
        {
            var countSelectColumn = transformedData.GetColumn<float[]>(
                transformedData.Schema[columnName]);

            foreach (var row in countSelectColumn)
            {
                for (var i = 0; i < row.Length; i++)
                    Console.Write($"{row[i]}\t");
                Console.WriteLine();
            }
        }

        private class DataPoint
        {
            public string Education { get; set; }
        }
    }
}

Si applica a