Compartir a través de


microsoftml.categorical_hash: hashes 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 categórico que se puede realizar en los datos antes de entrenar un modelo.

Detalles

categorical_hash convierte un valor de categoría en una matriz de indicadores mediante el hash del valor y el uso del hash como índice en el contenedor. Si la columna de entrada es un vector, se devuelve un contenedor de indicadores único para ella. categorical_hash no admite actualmente datos de factor de control.

Argumentos

cols

Cadena de caracteres o lista de nombres de variable que se van a transformar. Si dict, las claves representan los nombres de las nuevas variables que se van a crear.

hash_bits

Entero en el que se especifica el número de bits en los que se va a aplicar un hash. Debe estar comprendido entre 1 y 30, ambos incluidos. El valor predeterminado es 16.

semilla

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

ordenado

True incluir la posición de cada término en el hash. De lo contrario, 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 ranura. 0 significa que no se invierte ningún hash; -1 significa 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 tipo de salida.

  • "Bag": genera un vector de varios conjuntos. 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 repeticiones 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 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 enviados al motor de proceso.

Devuelve

objeto que define la transformación.

Consulte 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