microsoftml.categorical_hash: aplica hash y convierte una columna de texto en categorías

Uso

microsoftml.categorical_hash(cols: [str, dict, list],
    hash_bits: int = 16, seed: int = 314489979,
    ordered: bool = True, invert_hash: int = 0,
    output_kind: ['Bag', 'Ind', 'Key', 'Bin'] = 'Bag', **kargs)

Descripción

Transformación de hash de categoría que se puede realizar en los datos antes de entrenar un modelo.

Detalles

categorical_hash convierte un valor de categoría en una matriz indicadora al crear un hash a partir del valor y usarlo como un índice en la bolsa. Si la columna de entrada es un vector, se le devuelve una única bolsa de indicadores. Actualmente, categorical_hash no admite el control de datos de factor.

Argumentos

cols

Cadena de caracteres o lista de nombres de variables que se transformarán. Si es dict, las claves representan los nombres de las nuevas variables que se crearán.

hash_bits

Entero que especifica el número de bits en los que se aplica un código hash. Debe estar entre 1 y 30, ambos inclusive. El valor predeterminado es 16.

seed

Entero que especifica la inicialización de hash. El valor predeterminado es 314489979.

ordered

True para incluir la posición de cada término en el hash. En caso contrario, es False. El valor predeterminado es True.

invert_hash

Entero que especifica el límite en el número de claves que se pueden usar para generar el nombre de la ranura. 0 significa que no se invierte el hash, -1 que no hay límite. Aunque un valor cero proporciona un mejor rendimiento, se necesita un valor distinto de cero para obtener nombres de coeficiente significativos. El valor predeterminado es 0.

output_kind

Cadena de caracteres que especifica el tipo de salida.

  • "Bag": genera un vector de conjunto múltiple. Si la columna de entrada es un vector de categorías, la salida contiene un vector, donde el valor de cada ranura es el número de apariciones de la categoría en el vector de entrada. Si la columna de entrada contiene una sola categoría, el vector de indicador y el vector de bolsa son equivalentes

  • "Ind": genera un vector de indicador. La columna de entrada es un vector de categorías y la salida contiene un vector de indicador por cada ranura en la columna de entrada.

  • "Key: genera un índice. La salida es un identificador entero (entre 1 y el número de categorías del diccionario) de la categoría.

  • "Bin: genera un vector que es la representación binaria de la categoría.

El valor predeterminado es "Bag".

kargs

Argumentos adicionales que se envían al motor de proceso.

Devoluciones

objeto que define la transformación.

Vea también

categorical

Ejemplo

'''
Example on rx_logistic_regression and categorical_hash.
'''
import numpy
import pandas
from microsoftml import rx_logistic_regression, categorical_hash, rx_predict
from microsoftml.datasets.datasets import get_dataset

movie_reviews = get_dataset("movie_reviews")

train_reviews = pandas.DataFrame(data=dict(
    review=[
        "This is great", "I hate it", "Love it", "Do not like it", "Really like it",
        "I hate it", "I like it a lot", "I kind of hate it", "I do like it",
        "I really hate it", "It is very good", "I hate it a bunch", "I love it a bunch",
        "I hate it", "I like it very much", "I hate it very much.",
        "I really do love it", "I really do hate it", "Love it!", "Hate it!",
        "I love it", "I hate it", "I love it", "I hate it", "I love it"],
    like=[True, False, True, False, True, False, True, False, True, False,
        True, False, True, False, True, False, True, False, True, False, True,
        False, True, False, True]))
        
test_reviews = pandas.DataFrame(data=dict(
    review=[
        "This is great", "I hate it", "Love it", "Really like it", "I hate it",
        "I like it a lot", "I love it", "I do like it", "I really hate it", "I love it"]))


# Use a categorical hash transform.
out_model = rx_logistic_regression("like ~ reviewCat",
                data=train_reviews,
                ml_transforms=[categorical_hash(cols=dict(reviewCat="review"))])
                
# Weights are similar to categorical.
print(out_model.coef_)

# Use the model to score.
source_out_df = rx_predict(out_model, data=test_reviews, extra_vars_to_write=["review"])
print(source_out_df.head())

Salida:

Not adding a normalizer.
Beginning processing data.
Rows Read: 25, Read Time: 0, Transform Time: 0
Beginning processing data.
Beginning processing data.
Rows Read: 25, Read Time: 0, Transform Time: 0
Beginning processing data.
LBFGS multi-threading will attempt to load dataset into memory. In case of out-of-memory issues, turn off multi-threading by setting trainThreads to 1.
Warning: Too few instances to use 4 threads, decreasing to 1 thread(s)
Beginning optimization
num vars: 65537
improvement criterion: Mean Improvement
L1 regularization selected 3 of 65537 weights.
Not training a calibrator because it is not needed.
Elapsed time: 00:00:00.1209392
Elapsed time: 00:00:00.0190134
OrderedDict([('(Bias)', 0.2132447361946106), ('f1783', -0.7939924597740173), ('f38537', 0.1968022584915161)])
Beginning processing data.
Rows Read: 10, Read Time: 0, Transform Time: 0
Beginning processing data.
Elapsed time: 00:00:00.0284223
Finished writing 10 rows.
Writing completed.
           review PredictedLabel     Score  Probability
0   This is great           True  0.213245     0.553110
1       I hate it          False -0.580748     0.358761
2         Love it           True  0.213245     0.553110
3  Really like it           True  0.213245     0.553110
4       I hate it          False -0.580748     0.358761