microsoftml.categorical_hash: Hashes und Konvertiert eine Textspalte in Kategorien
Verwendung
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)
Beschreibung
Kategorisierte Hashtransformation, die vor dem Trainieren eines Modells für Daten ausgeführt werden kann.
Details
categorical_hash
wandelt einen kategorisierten Wert in ein Indikatorarray um, indem der Wert hasht und der Hash als Index in der Tasche verwendet wird. Wenn es sich bei der Eingabespalte um einen Vektor handelt, wird dafür ein einzelner Indikatorbehälter zurückgegeben.
categorical_hash
unterstützt derzeit die Verarbeitung von Faktordaten nicht.
Argumente
Cols
Eine Zeichenfolge oder Eine Liste mit variablen Namen, die transformiert werden sollen. Wenn dict
, stellen die Schlüssel die Namen neuer Variablen dar, die erstellt werden sollen.
hash_bits
Eine ganze Zahl, die die Anzahl der Bits angibt, in die der Hash eingefügt werden soll. Muss zwischen 1 und 30 (einschließlich) liegen. Der Standardwert ist 16.
Samen
Eine ganze Zahl, die den Hashing-Seed angibt. Der Standardwert ist 314489979.
angeordnet
True
die Position jedes Ausdrucks in den Hash einschließen. Andernfalls False
. Der Standardwert ist True
.
invert_hash
Eine ganze Zahl, die den Grenzwert für die Anzahl der Schlüssel angibt, die zum Generieren des Slotnamens verwendet werden können.
0
bedeutet keine Umkehrhashing; -1
bedeutet kein Limit. Während ein Nullwert eine bessere Leistung bietet, ist ein Wert ungleich Null erforderlich, um aussagekräftige Koeffizientennamen abzurufen.
Der Standardwert ist 0
.
output_kind
Eine Zeichenfolge, die die Art der Ausgabe angibt.
"Bag"
: Gibt einen Mehrsatzvektor aus. Wenn die Eingabespalte ein Vektor von Kategorien ist, enthält die Ausgabe einen Vektor, wobei der Wert in jedem Steckplatz die Anzahl der Vorkommen der Kategorie im Eingabevektor ist. Wenn die Eingabespalte eine einzelne Kategorie enthält, sind der Indikatorvektor und der Bag-Vektor gleichwertig."Ind"
: Gibt einen Indikatorvektor aus. Die Eingabespalte ist ein Vektor von Kategorien, und die Ausgabe enthält einen Indikatorvektor pro Steckplatz in der Eingabespalte."Key
: Gibt einen Index aus. Die Ausgabe ist eine ganzzahlige ID (zwischen 1 und der Anzahl der Kategorien im Wörterbuch) der Kategorie."Bin
: Gibt einen Vektor aus, der die binäre Darstellung der Kategorie darstellt.
Der Standardwert ist "Bag"
.
Kargs
Zusätzliche Argumente, die an das Computemodul gesendet werden.
Ertrag
ein Objekt, das die Transformation definiert.
Siehe auch
Beispiel
'''
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())
Ausgabe:
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