Reduzierung der Anzahl der Ebenen ungeordneter kategorialer Prädiktorvariablen

11

Ich möchte einen Klassifikator, z. B. SVM, eine zufällige Gesamtstruktur oder einen anderen Klassifikator trainieren. Eine der Funktionen im Datensatz ist eine kategoriale Variable mit 1000 Ebenen. Was ist der beste Weg, um die Anzahl der Ebenen in dieser Variablen zu reduzieren. In R gibt es eine Funktion combine.levels()im Hmisc- Paket, die seltene Ebenen kombiniert, aber ich habe nach anderen Vorschlägen gesucht.

Sabunime
quelle
Ist die kategoriale Variable ungeordnet? Wie viele Fälle haben Sie ungefähr? Wie ist die Häufigkeitsverteilung über die kategoriale Variable?
Jeromy Anglim
Die Levels sind nicht geordnet. Ich habe ungefähr 10.000 Beobachtungen. Die Häufigkeitsverteilung ist wie folgt: Stufe A tritt in etwa 11% der Beobachtungen auf. Stufe B erscheint in 8%. Stufe c erscheint in 5%. Etwa 15 dieser Ebenen decken 50% der Beobachtungen im Datensatz ab.
Sabunime

Antworten:

9

Wie man am besten zu tun , dies variieren wird enorm abhängig von der Aufgabe , die Sie gerade ausführen, so dass es unmöglich ist , zu sagen , was in einer aufgabenunabhängigen Art und Weise am besten sein wird.

Es gibt zwei einfache Dinge zu versuchen, wenn Ihre Ebenen ordinal sind:

  1. Bin sie. Beispiel: 0 = (0 250), 1 = (251 500) usw. Möglicherweise möchten Sie die Grenzwerte so auswählen, dass jeder Behälter die gleiche Anzahl von Elementen enthält.
  2. Sie können auch eine Protokolltransformation der Ebenen durchführen. Dadurch wird die Reichweite verringert.

Wenn die Ebenen nicht ordinal sind, können Sie die Ebenen basierend auf anderen Funktionen / Variablen in Ihrem Dataset gruppieren und die vorherigen Ebenen durch die Cluster-IDs ersetzen. Es gibt so viele Möglichkeiten, dies zu tun, wie es Clustering-Algorithmen gibt, so dass das Feld weit offen ist. Während ich es lese, ist es das, was ich combine.levels()tue. Sie könnten ähnlich mit kmeans()oder tun prcomp(). (Sie könnten / sollten anschließend einen Klassifikator trainieren, um die Cluster für neue Datenpunkte vorherzusagen.)

Joey
quelle
3
Ich kenne keinen wirklich guten Weg, um damit umzugehen, außer die kategoriale Variable als zufälligen Effekt zu behandeln. Sie können dies emulieren, indem Sie einen quadratischen (Grat-) Bestrafungsprozess für die Variable verwenden. Mein Regressionsmodellierungsstrategie- Buch und meine Kursnotizen gehen darauf ein.
Frank Harrell
1
@FrankHarrell Zwei Ansätze kommen in den Sinn: POlytomous Variable Latent Class Analysis wäre einer (cran.r-project.org/web/packages/poLCA/poLCA.pdf), Korrespondenzanalyse ein anderer (z. B. statmethods.net/advstats/ca). html).
Mike Hunter