Udostępnij za pośrednictwem


microsoftml.categorical_hash: skróty i konwertuje kolumnę tekstową na kategorie

Zwyczaj

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)

Opis

Przekształcenie skrótu podzielonego na kategorie, które można wykonać na danych przed rozpoczęciem trenowania modelu.

Szczegóły

categorical_hash konwertuje wartość kategorii na tablicę wskaźników przez utworzenie skrótu wartości i użycie skrótu jako indeksu w torbie. Jeśli kolumna wejściowa jest wektorem, zostanie zwrócona pojedyncza torba wskaźnika. categorical_hash obecnie nie obsługuje obsługi danych czynników.

Argumenty

Cols

Ciąg znaków lub lista nazw zmiennych do przekształcenia. Jeśli dict, klucze reprezentują nazwy nowych zmiennych do utworzenia.

hash_bits

Liczba całkowita określająca liczbę bitów do skrótu. Musi należeć do przedziału od 1 do 30 włącznie. Wartość domyślna to 16.

nasienie

Liczba całkowita określająca inicjator skrótu. Wartość domyślna to 314489979.

Zamówione

True, aby uwzględnić pozycję każdego terminu w skrótzie. W przeciwnym razie False. Wartość domyślna to True.

invert_hash

Liczba całkowita określająca limit liczby kluczy, których można użyć do wygenerowania nazwy miejsca. 0 oznacza brak skrótu invert; -1 oznacza brak limitu. Chociaż wartość zerowa zapewnia lepszą wydajność, do uzyskania znaczących nazw współczynników potrzebna jest wartość niezerowa. Wartość domyślna to 0.

output_kind

Ciąg znaków określający rodzaj rodzaju danych wyjściowych.

  • "Bag": Wyprowadza wektor wielozestawowy. Jeśli kolumna wejściowa jest wektorem kategorii, dane wyjściowe zawierają jeden wektor, gdzie wartość w każdym miejscu jest liczbą wystąpień kategorii w wektorze wejściowym. Jeśli kolumna wejściowa zawiera jedną kategorię, wektor wskaźnika i wektor torbowy są równoważne

  • "Ind": wyprowadza wektor wskaźnika. Kolumna wejściowa jest wektorem kategorii, a dane wyjściowe zawierają jeden wektor wskaźnika na miejsce w kolumnie wejściowej.

  • "Key: generuje indeks. Dane wyjściowe to identyfikator liczby całkowitej (od 1 do liczby kategorii w słowniku) kategorii.

  • "Bin: generuje wektor, który jest reprezentacją binarną kategorii.

Wartość domyślna to "Bag".

kargs

Dodatkowe argumenty wysyłane do aparatu obliczeniowego.

Zwraca

obiekt definiujący przekształcenie.

Zobacz też

categorical

Przykład

'''
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())

Wyjście:

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