Usuwanie predyktorów o bliskiej zerowej wariancji
Jak pokazano w filmie, w kolejnych ćwiczeniach będziesz pracować z zestawem danych blood-brain. To biochemiczny zbiór danych, w którym zadaniem jest przewidywanie następującej wartości dla zestawu związków biochemicznych:
log((concentration of compound in brain) /
(concentration of compound in blood))
Wartość ta stanowi ilościową miarę zdolności związku do przenikania przez barierę krew–mózg i jest przydatna do zrozumienia biologicznych właściwości tej bariery.
Ciekawą cechą tego zbioru danych jest to, że zawiera wiele zmiennych, z których wiele ma bardzo niską wariancję. Oznacza to, że zmienne te niosą bardzo mało informacji – w większości przyjmują jedną wartość (np. zero).
Na szczęście pakiet caret udostępnia funkcję narzędziową nearZeroVar(), która pozwala usunąć takie zmienne i przyspieszyć modelowanie.
Funkcja nearZeroVar() przyjmuje dane x, a następnie sprawdza stosunek najczęstszej wartości do drugiej najczęstszej (freqCut) oraz odsetek unikalnych wartości względem całkowitej liczby próbek (uniqueCut). Domyślnie caret używa freqCut = 19 i uniqueCut = 10, co jest dość zachowawczym podejściem. Warto być nieco bardziej agresywnym i stosować freqCut = 2 oraz uniqueCut = 20 przy wywołaniu nearZeroVar().
To ćwiczenie jest częścią kursu
Uczenie maszynowe z caret w R
Instrukcje do ćwiczenia
bloodbrain_x i bloodbrain_y są wczytane do twojego środowiska pracy.
- Zidentyfikuj predyktory o bliskiej zerowej wariancji, uruchamiając
nearZeroVar()na zbiorze danych blood-brain. Wynik zapisz jako obiekt o nazwieremove_cols. UżyjfreqCut = 2iuniqueCut = 20w wywołaniunearZeroVar(). - Użyj funkcji
names(), aby utworzyć wektor zawierający wszystkie nazwy kolumnbloodbrain_x. Nazwij goall_cols. - Utwórz nową ramkę danych o nazwie
bloodbrain_x_smallz usuniętymi zmiennymi o bliskiej zerowej wariancji. Użyj funkcjisetdiff(), aby wyodrębnić nazwy kolumn, które chcesz zachować (czyli te, których nie chcesz usuwać).
Interaktywne ćwiczenie praktyczne
Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.
# 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(___, ___)]