Видалення стовпців із малою кількістю спостережень
Після масштабного інженірингу ознак варто зробити паузу й подивитися, що ви створили. Якщо ви застосовували автоматизацію для категоріальних ознак, як-от «exploding» або OneHot Encoding, може виявитися, що тепер у вас сотні нових бінарних ознак. Тема відбору ознак заслуговує на окремий курс, але є кілька швидких кроків, які допоможуть зменшити розмірність набору даних.
У цій вправі ми приберемо стовпці, у яких менше ніж 30 спостережень. 30 — це поширений мінімум для статистичної значущості. Якщо менше, зв'язки можуть призвести до перенавчання просто через випадковий збіг!
ПРИМІТКА: Дані доступні в датафреймі df.
Ця вправа є частиною курсу
Опрацювання ознак у PySpark
Інструкції до вправи
- Використайте наданий цикл
for, що ітерується списком бінарних стовпців, і обчислітьsumзначень у стовпці за допомогою функціїagg. Застосуйтеcollect(), щоб виконати обчислення негайно, і збережіть результат уobs_count. - Порівняйте
obs_countзobs_threshold. Операторifмає повертати істину, якщоobs_countменше або дорівнюєobs_threshold. - Видаліть стовпці, додані до списку
cols_to_remove, за допомогоюdrop(). Пам'ятайте, що символ*дає змогу розпакувати список. - Виведіть початкові та підсумкові розміри датафреймів PySpark, використовуючи
count()для кількості рядків іlen()наdf.columnsабоnew_df.columnsдля визначення кількості стовпців.
Інтерактивна практична вправа
Спробуйте виконати цю вправу, доповнивши цей зразок коду.
obs_threshold = 30
cols_to_remove = list()
# Inspect first 10 binary columns in list
for col in binary_cols[0:10]:
# Count the number of 1 values in the binary column
obs_count = df.____({col: ____}).____()[0][0]
# If less than our observation threshold, remove
if ____ ____ ____:
cols_to_remove.append(col)
# Drop columns and print starting and ending dataframe shapes
new_df = df.____(*____)
print('Rows: ' + str(df.____()) + ' Columns: ' + str(____(df.____)))
print('Rows: ' + str(new_df.____()) + ' Columns: ' + str(____(new_df.____)))