ПочатиПочніть безкоштовно

Вилучення предикторів із майже нульовою дисперсією

Як ви бачили у відео, в наступному наборі вправ ви працюватимете з набором даних blood-brain. Це біохімічний набір даних, у якому завдання — передбачити таке значення для набору біохімічних сполук:

log((concentration of compound in brain) /
      (concentration of compound in blood))

Це дає кількісну метрику здатності сполуки проходити через гематоенцефалічний бар'єр і корисно для розуміння біологічних властивостей цього бар'єра.

Цікавим аспектом цього набору даних є те, що він містить багато змінних, і в багатьох із них дисперсія надзвичайно мала. Це означає, що в таких змінних дуже мало інформації, адже вони здебільшого складаються з одного значення (наприклад, нуля).

На щастя, у caret є допоміжна функція nearZeroVar() для вилучення таких змінних, щоб заощадити час під час моделювання.

nearZeroVar() приймає дані x, а далі аналізує відношення найчастішого значення до другого за частотою, freqCut, і відсоток різних значень відносно кількості всіх вибірок, uniqueCut. Типово caret використовує freqCut = 19 і uniqueCut = 10, що є доволі консервативним підходом. Я надаю перевагу трохи агресивнішим налаштуванням і використовую freqCut = 2 та uniqueCut = 20 при виклику nearZeroVar().

Ця вправа є частиною курсу

Machine Learning з пакетом caret в R

Переглянути курс

Інструкції до вправи

bloodbrain_x і bloodbrain_y уже завантажені у ваш простір роботи.

  • Визначте предиктори з майже нульовою дисперсією, виконавши nearZeroVar() для набору даних blood-brain. Збережіть результат в об'єкті remove_cols. Використайте freqCut = 2 та uniqueCut = 20 у виклику nearZeroVar().
  • Скористайтеся names(), щоб створити вектор із усіма назвами стовпців bloodbrain_x. Назвіть його all_cols.
  • Створіть новий датафрейм bloodbrain_x_small, у якому вилучено змінні з майже нульовою дисперсією. Використайте setdiff(), щоб виокремити назви стовпців, які слід залишити (тобто які не потрібно вилучати).

Інтерактивна практична вправа

Спробуйте виконати цю вправу, доповнивши цей зразок коду.

# 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(___, ___)]
Редагувати та запускати код