OneHotEncoder#

class sklearn.preprocessing.OneHotEncoder(*, categories='auto', drop=None, sparse_output=True, dtype=<class 'numpy.float64'>, handle_unknown='error', min_frequency=None, max_categories=None, feature_name_combiner='concat')[Quelle]#

Kodiert kategoriale Merkmale als eine One-Hot-numerische Matrix.

Die Eingabe für diesen Transformer sollte ein Array-ähnliches Objekt aus ganzen Zahlen oder Zeichenketten sein, das die Werte bezeichnet, die von kategorialen (diskreten) Merkmalen angenommen werden. Die Merkmale werden mithilfe eines One-Hot- (auch „one-of-K“ oder „Dummy“-) Kodierungsschemas kodiert. Dies erstellt eine binäre Spalte für jede Kategorie und gibt eine sparse Matrix oder ein dichtes Array zurück (abhängig vom Parameter sparse_output).

Standardmäßig leitet der Encoder die Kategorien basierend auf den eindeutigen Werten in jedem Merkmal ab. Alternativ können Sie die categories auch manuell angeben.

Diese Kodierung ist erforderlich, um kategoriale Daten an viele scikit-learn-Schätzer zu übergeben, insbesondere an lineare Modelle und SVMs mit den Standardkernen.

Hinweis: Für die One-Hot-Kodierung von y-Labels sollten Sie stattdessen einen LabelBinarizer verwenden.

Lesen Sie mehr im Benutzerhandbuch. Für einen Vergleich verschiedener Encoder siehe: Vergleich des Target Encoders mit anderen Encodern.

Parameter:
categories„auto“ oder eine Liste von array-ähnlichen Objekten, Standard=„auto“

Kategorien (eindeutige Werte) pro Merkmal

  • „auto“ : Kategorien automatisch aus den Trainingsdaten ableiten.

  • list : categories[i] enthält die Kategorien, die in der i-ten Spalte erwartet werden. Die übergebenen Kategorien sollten keine Strings und numerische Werte innerhalb eines einzelnen Merkmals mischen und bei numerischen Werten sortiert sein.

Die verwendeten Kategorien finden Sie im Attribut categories_.

Hinzugefügt in Version 0.20.

drop{‚first‘, ‚if_binary‘} oder ein Array-ähnliches Objekt der Form (n_features,), Standard=None

Gibt eine Methodik zur Entfernung einer Kategorie pro Merkmal an. Dies ist nützlich in Situationen, in denen perfekt kollineare Merkmale Probleme verursachen, z. B. beim Übergeben der resultierenden Daten an ein nicht reguliertes lineares Regressionsmodell.

Das Entfernen einer Kategorie bricht jedoch die Symmetrie der ursprünglichen Darstellung und kann daher zu Verzerrungen in nachgelagerten Modellen führen, z. B. für strafende lineare Klassifizierungs- oder Regressionsmodelle.

  • None : Alle Merkmale beibehalten (Standard).

  • „first“ : Die erste Kategorie in jedem Merkmal entfernen. Wenn nur eine Kategorie vorhanden ist, wird das Merkmal vollständig entfernt.

  • „if_binary“ : Die erste Kategorie in jedem Merkmal mit zwei Kategorien entfernen. Merkmale mit 1 oder mehr als 2 Kategorien bleiben unverändert.

  • array : drop[i] ist die Kategorie im Merkmal X[:, i], die entfernt werden soll.

Wenn max_categories oder min_frequency konfiguriert ist, um seltene Kategorien zu gruppieren, wird das Verhalten beim Entfernen nach der Gruppierung behandelt.

Hinzugefügt in Version 0.21: Der Parameter drop wurde in 0.21 hinzugefügt.

Geändert in Version 0.23: Die Option drop='if_binary' wurde in 0.23 hinzugefügt.

Geändert in Version 1.1: Unterstützung für das Entfernen seltener Kategorien.

sparse_outputbool, Standard=True

Wenn True, wird eine scipy.sparse.csr_matrix, d. h. eine sparse Matrix im Format „Compressed Sparse Row“ (CSR), zurückgegeben.

Hinzugefügt in Version 1.2: sparse wurde in sparse_output umbenannt.

dtypenumerischer Typ, Standard=np.float64

Gewünschter Datentyp der Ausgabe.

handle_unknown{‚error‘, ‚ignore‘, ‚infrequent_if_exist‘, ‚warn‘}, Standard=„error“

Gibt die Art und Weise an, wie unbekannte Kategorien während der transform behandelt werden.

  • „error“ : Löst einen Fehler aus, wenn während der Transformation eine unbekannte Kategorie vorhanden ist.

  • „ignore“ : Wenn während der Transformation eine unbekannte Kategorie angetroffen wird, sind die resultierenden One-Hot-kodierten Spalten für dieses Merkmal alle Nullen. Bei der inversen Transformation wird eine unbekannte Kategorie als None dargestellt.

  • „infrequent_if_exist“ : Wenn während der Transformation eine unbekannte Kategorie angetroffen wird, werden die resultierenden One-Hot-kodierten Spalten für dieses Merkmal auf die seltene Kategorie abgebildet, falls diese vorhanden ist. Die seltene Kategorie wird an die letzte Position in der Kodierung abgebildet. Bei der inversen Transformation wird eine unbekannte Kategorie auf die Kategorie abgebildet, die als 'infrequent' bezeichnet wird, falls diese vorhanden ist. Wenn die Kategorie 'infrequent' nicht existiert, dann verhält sich transform und inverse_transform bei einer unbekannten Kategorie wie bei handle_unknown='ignore'. Seltene Kategorien existieren basierend auf min_frequency und max_categories. Lesen Sie mehr im Benutzerhandbuch.

  • „warn“ : Wenn während der Transformation eine unbekannte Kategorie angetroffen wird, wird eine Warnung ausgegeben und die Kodierung wird dann wie für handle_unknown="infrequent_if_exist" beschrieben fortgesetzt.

Geändert in Version 1.1: 'infrequent_if_exist' wurde hinzugefügt, um unbekannte und seltene Kategorien automatisch zu behandeln.

Hinzugefügt in Version 1.6: Die Option "warn" wurde in 1.6 hinzugefügt.

min_frequencyint oder float, Standard=None

Gibt die Mindesthäufigkeit an, unter der eine Kategorie als selten betrachtet wird.

  • Wenn int, werden Kategorien mit einer geringeren Kardinalität als selten betrachtet.

  • Wenn float, werden Kategorien mit einer geringeren Kardinalität als min_frequency * n_samples als selten betrachtet.

Hinzugefügt in Version 1.1: Lesen Sie mehr im Benutzerhandbuch.

max_categoriesint, Standard=None

Gibt eine Obergrenze für die Anzahl der Ausgabemerkmale für jedes Eingabemerkmale unter Berücksichtigung seltener Kategorien an. Wenn es seltene Kategorien gibt, enthält max_categories die Kategorie, die die seltenen Kategorien repräsentiert, zusammen mit den häufigen Kategorien. Wenn None, gibt es keine Begrenzung der Anzahl der Ausgabemerkmale.

Hinzugefügt in Version 1.1: Lesen Sie mehr im Benutzerhandbuch.

feature_name_combiner„concat“ oder aufrufbar, Standard=„concat“

Aufrufbar mit der Signatur def callable(input_feature, category), die eine Zeichenkette zurückgibt. Dies wird verwendet, um Merkmalsnamen zu erstellen, die von get_feature_names_out zurückgegeben werden.

"concat" verkettet den kodierten Merkmalsnamen und die Kategorie mit feature + "_" + str(category). Z. B. Merkmal X mit den Werten 1, 6, 7 erstellt die Merkmalsnamen X_1, X_6, X_7.

Hinzugefügt in Version 1.3.

Attribute:
categories_Liste von Arrays

Die Kategorien jedes Merkmals, die während des Fits bestimmt wurden (in der Reihenfolge der Merkmale in X und entsprechend der Ausgabe von transform). Dies schließt die in drop angegebene Kategorie (falls vorhanden) ein.

drop_idx_Array der Form (n_features,)
  • drop_idx_[i] ist der Index in categories_[i] der Kategorie, die für jedes Merkmal entfernt werden soll.

  • drop_idx_[i] = None, wenn keine Kategorie aus dem Merkmal mit Index i entfernt werden soll, z. B. wenn drop='if_binary' und das Merkmal nicht binär ist.

  • drop_idx_ = None, wenn alle transformierten Merkmale beibehalten werden.

Wenn seltene Kategorien durch Setzen von min_frequency oder max_categories auf einen nicht standardmäßigen Wert aktiviert werden und drop_idx[i] einer seltenen Kategorie entspricht, wird die gesamte seltene Kategorie entfernt.

Geändert in Version 0.23: Möglichkeit hinzugefügt, None-Werte zu enthalten.

infrequent_categories_Liste von ndarrays

Seltene Kategorien für jedes Merkmal.

n_features_in_int

Anzahl der während des fits gesehenen Merkmale.

Hinzugefügt in Version 1.0.

feature_names_in_ndarray mit Form (n_features_in_,)

Namen der während fit gesehenen Merkmale. Nur definiert, wenn X Merkmalnamen hat, die alle Zeichenketten sind.

Hinzugefügt in Version 1.0.

feature_name_combineraufrufbar oder None

Aufrufbar mit der Signatur def callable(input_feature, category), die eine Zeichenkette zurückgibt. Dies wird verwendet, um Merkmalsnamen zu erstellen, die von get_feature_names_out zurückgegeben werden.

Hinzugefügt in Version 1.3.

Siehe auch

OrdinalEncoder

Führt eine ordinale (ganzzahlige) Kodierung der kategorialen Merkmale durch.

TargetEncoder

Kodiert kategoriale Merkmale anhand des Ziels.

sklearn.feature_extraction.DictVectorizer

Führt eine One-Hot-Kodierung von Wörterbucheinträgen durch (behandelt auch Merkmale mit Zeichenkettenwerten).

sklearn.feature_extraction.FeatureHasher

Führt eine ungefähre One-Hot-Kodierung von Wörterbucheinträgen oder Zeichenketten durch.

LabelBinarizer

Binarisiert Labels im One-vs-All-Verfahren.

MultiLabelBinarizer

Transformiert zwischen iterierbaren Objekten und einem Multilabel-Format, z. B. einer binären Matrix (Samples x Klassen), die das Vorhandensein eines Klassenlabels anzeigt.

Beispiele

Gegeben sei ein Datensatz mit zwei Merkmalen. Wir lassen den Encoder die eindeutigen Werte pro Merkmal finden und die Daten in eine binäre One-Hot-Kodierung transformieren.

>>> from sklearn.preprocessing import OneHotEncoder

Man kann Kategorien, die während fit nicht gesehen wurden, verwerfen.

>>> enc = OneHotEncoder(handle_unknown='ignore')
>>> X = [['Male', 1], ['Female', 3], ['Female', 2]]
>>> enc.fit(X)
OneHotEncoder(handle_unknown='ignore')
>>> enc.categories_
[array(['Female', 'Male'], dtype=object), array([1, 2, 3], dtype=object)]
>>> enc.transform([['Female', 1], ['Male', 4]]).toarray()
array([[1., 0., 1., 0., 0.],
       [0., 1., 0., 0., 0.]])
>>> enc.inverse_transform([[0, 1, 1, 0, 0], [0, 0, 0, 1, 0]])
array([['Male', 1],
       [None, 2]], dtype=object)
>>> enc.get_feature_names_out(['gender', 'group'])
array(['gender_Female', 'gender_Male', 'group_1', 'group_2', 'group_3'], ...)

Man kann immer die erste Spalte für jedes Merkmal entfernen.

>>> drop_enc = OneHotEncoder(drop='first').fit(X)
>>> drop_enc.categories_
[array(['Female', 'Male'], dtype=object), array([1, 2, 3], dtype=object)]
>>> drop_enc.transform([['Female', 1], ['Male', 2]]).toarray()
array([[0., 0., 0.],
       [1., 1., 0.]])

Oder eine Spalte für Merkmale entfernen, die nur 2 Kategorien haben.

>>> drop_binary_enc = OneHotEncoder(drop='if_binary').fit(X)
>>> drop_binary_enc.transform([['Female', 1], ['Male', 2]]).toarray()
array([[0., 1., 0., 0.],
       [1., 0., 1., 0.]])

Man kann die Art und Weise ändern, wie Merkmalsnamen erstellt werden.

>>> def custom_combiner(feature, category):
...     return str(feature) + "_" + type(category).__name__ + "_" + str(category)
>>> custom_fnames_enc = OneHotEncoder(feature_name_combiner=custom_combiner).fit(X)
>>> custom_fnames_enc.get_feature_names_out()
array(['x0_str_Female', 'x0_str_Male', 'x1_int_1', 'x1_int_2', 'x1_int_3'],
      dtype=object)

Seltene Kategorien werden durch Setzen von max_categories oder min_frequency aktiviert.

>>> import numpy as np
>>> X = np.array([["a"] * 5 + ["b"] * 20 + ["c"] * 10 + ["d"] * 3], dtype=object).T
>>> ohe = OneHotEncoder(max_categories=3, sparse_output=False).fit(X)
>>> ohe.infrequent_categories_
[array(['a', 'd'], dtype=object)]
>>> ohe.transform([["a"], ["b"]])
array([[0., 0., 1.],
       [1., 0., 0.]])
fit(X, y=None)[Quelle]#

OneHotEncoder an X anpassen.

Parameter:
Xarray-like der Form (n_samples, n_features)

Die Daten zur Ermittlung der Kategorien jedes Merkmals.

yNone

Ignoriert. Dieser Parameter existiert nur zur Kompatibilität mit Pipeline.

Gibt zurück:
self

Angepasster Encoder.

fit_transform(X, y=None, **fit_params)[Quelle]#

An Daten anpassen, dann transformieren.

Passt den Transformer an X und y mit optionalen Parametern fit_params an und gibt eine transformierte Version von X zurück.

Parameter:
Xarray-like der Form (n_samples, n_features)

Eingabestichproben.

yarray-like der Form (n_samples,) oder (n_samples, n_outputs), Standardwert=None

Zielwerte (None für unüberwachte Transformationen).

**fit_paramsdict

Zusätzliche Fit-Parameter. Nur übergeben, wenn der Estimator zusätzliche Parameter in seiner fit-Methode akzeptiert.

Gibt zurück:
X_newndarray array der Form (n_samples, n_features_new)

Transformiertes Array.

get_feature_names_out(input_features=None)[Quelle]#

Holt die Ausgabemerkmale für die Transformation.

Parameter:
input_featuresarray-like von str oder None, default=None

Eingabemerkmale.

  • Wenn input_features None ist, werden feature_names_in_ als Merkmalnamen verwendet. Wenn feature_names_in_ nicht definiert ist, werden die folgenden Eingabemerkmalsnamen generiert: ["x0", "x1", ..., "x(n_features_in_ - 1)"].

  • Wenn input_features ein Array-ähnliches Objekt ist, muss input_features mit feature_names_in_ übereinstimmen, wenn feature_names_in_ definiert ist.

Gibt zurück:
feature_names_outndarray von str-Objekten

Transformierte Merkmalnamen.

get_metadata_routing()[Quelle]#

Holt das Metadaten-Routing dieses Objekts.

Bitte prüfen Sie im Benutzerhandbuch, wie der Routing-Mechanismus funktioniert.

Gibt zurück:
routingMetadataRequest

Ein MetadataRequest, der Routing-Informationen kapselt.

get_params(deep=True)[Quelle]#

Holt Parameter für diesen Schätzer.

Parameter:
deepbool, default=True

Wenn True, werden die Parameter für diesen Schätzer und die enthaltenen Unterobjekte, die Schätzer sind, zurückgegeben.

Gibt zurück:
paramsdict

Parameternamen, zugeordnet ihren Werten.

inverse_transform(X)[Quelle]#

Wandelt die Daten in die ursprüngliche Darstellung zurück.

Wenn unbekannte Kategorien angetroffen werden (alle Nullen in der One-Hot-Kodierung), wird None verwendet, um diese Kategorie darzustellen. Wenn das Merkmal mit der unbekannten Kategorie eine entfernte Kategorie hat, wird die entfernte Kategorie seine Inverse sein.

Für ein gegebenes Eingabemerkmal wird, wenn eine seltene Kategorie vorhanden ist, ‚infrequent_sklearn‘ verwendet, um die seltene Kategorie darzustellen.

Parameter:
X{array-ähnlich, sparse matrix} der Form (n_samples, n_encoded_features)

Die transformierten Daten.

Gibt zurück:
X_originalndarray von der Form (n_samples, n_features)

Invers transformiertes Array.

set_output(*, transform=None)[Quelle]#

Ausgabecontainer festlegen.

Siehe Einführung in die set_output API für ein Beispiel zur Verwendung der API.

Parameter:
transform{“default”, “pandas”, “polars”}, default=None

Konfiguriert die Ausgabe von transform und fit_transform.

  • "default": Standardausgabeformat eines Transformers

  • "pandas": DataFrame-Ausgabe

  • "polars": Polars-Ausgabe

  • None: Die Transformationskonfiguration bleibt unverändert

Hinzugefügt in Version 1.4: Die Option "polars" wurde hinzugefügt.

Gibt zurück:
selfestimator instance

Schätzer-Instanz.

set_params(**params)[Quelle]#

Setzt die Parameter dieses Schätzers.

Die Methode funktioniert sowohl bei einfachen Schätzern als auch bei verschachtelten Objekten (wie Pipeline). Letztere haben Parameter der Form <component>__<parameter>, so dass es möglich ist, jede Komponente eines verschachtelten Objekts zu aktualisieren.

Parameter:
**paramsdict

Schätzer-Parameter.

Gibt zurück:
selfestimator instance

Schätzer-Instanz.

transform(X)[Quelle]#

X mit One-Hot-Kodierung transformieren.

Wenn sparse_output=True (Standard), wird eine Instanz von scipy.sparse._csr.csr_matrix (CSR-Format) zurückgegeben.

Wenn es für ein Merkmal seltene Kategorien gibt, die durch Angabe von max_categories oder min_frequency festgelegt wurden, werden die seltenen Kategorien zu einer einzigen Kategorie zusammengefasst.

Parameter:
Xarray-like der Form (n_samples, n_features)

Die zu kodierenden Daten.

Gibt zurück:
X_out{ndarray, sparse matrix} der Form (n_samples, n_encoded_features)

Transformierte Eingabe. Wenn sparse_output=True, wird eine sparse Matrix zurückgegeben.