Prädiktoren mit nahezu Null-Varianz entfernen
Wie du im Video gesehen hast, wirst du für die nächsten Aufgaben mit dem Blood-Brain-Datensatz arbeiten. Das ist ein biochemischer Datensatz, in dem folgende Größe für eine Reihe biochemischer Verbindungen vorhergesagt werden soll:
log((concentration of compound in brain) /
(concentration of compound in blood))
Diese Größe liefert eine quantitative Kennzahl für die Fähigkeit einer Verbindung, die Blut-Hirn-Schranke zu überwinden, und hilft, die biologischen Eigenschaften dieser Schranke zu verstehen.
Ein interessanter Aspekt dieses Datensatzes ist, dass er viele Variablen enthält und viele davon eine extrem geringe Varianz aufweisen. Das bedeutet, dass in diesen Variablen sehr wenig Information steckt, weil sie größtenteils aus einem einzigen Wert bestehen (z. B. Null).
Zum Glück enthält caret eine Hilfsfunktion namens nearZeroVar(), um solche Variablen zu entfernen und beim Modellieren Zeit zu sparen.
nearZeroVar() nimmt Daten x entgegen und betrachtet dann das Verhältnis des häufigsten Werts zum zweithäufigsten Wert, freqCut, sowie den Prozentsatz verschiedener Werte relativ zur Anzahl der Gesamtsamples, uniqueCut. Standardmäßig verwendet caret freqCut = 19 und uniqueCut = 10, was recht konservativ ist. Ich bin gern etwas aggressiver und verwende freqCut = 2 und uniqueCut = 20, wenn ich nearZeroVar() aufrufe.
Diese Übung ist Teil des Kurses
Maschinelles Lernen mit caret in R
Anleitung zur Übung
bloodbrain_x und bloodbrain_y sind in deinem Workspace geladen.
- Identifiziere die Prädiktoren mit nahezu Null-Varianz, indem du
nearZeroVar()auf den Blood-Brain-Datensatz anwendest. Speichere das Ergebnis in einem Objekt namensremove_cols. VerwendefreqCut = 2unduniqueCut = 20im Aufruf vonnearZeroVar(). - Verwende
names(), um einen Vektor mit allen Spaltennamen vonbloodbrain_xzu erstellen. Nenne ihnall_cols. - Erstelle einen neuen Data Frame namens
bloodbrain_x_small, in dem die Variablen mit nahezu Null-Varianz entfernt sind. Nutzesetdiff(), um die Spaltennamen herauszufiltern, die du behalten willst (also die, die du nicht entfernen möchtest).
Interaktive Übung
Vervollständige den Beispielcode, um diese Übung erfolgreich abzuschließen.
# Identify near zero variance predictors: remove_cols
remove_cols <- nearZeroVar(___, names = TRUE,
freqCut = ___, uniqueCut = ___)
# Get all column names from bloodbrain_x: all_cols
# Remove from data: bloodbrain_x_small
bloodbrain_x_small <- bloodbrain_x[ , setdiff(___, ___)]