Рядки та категоріальні значення
Як ви знаєте, Spark вимагає числових даних для моделювання. Досі це не було проблемою; навіть булеві стовпці без труднощів можна перетворити на цілі числа. Але ви також використовуватимете авіакомпанію та пункт призначення літака як ознаки у своїй моделі. Вони закодовані як рядки, і немає очевидного способу перетворити їх на числовий тип даних.
На щастя, у PySpark є вбудовані функції для цього в підмодулі pyspark.ml.features. Ви можете створити так звані «one-hot» вектори, щоб представити перевізника та пункт призначення кожного рейсу. One-hot вектор — це спосіб подання категоріальної ознаки, коли кожне спостереження має вектор, у якому всі елементи дорівнюють нулю, за винятком щонайбільше одного елемента зі значенням один (1).
Кожен елемент у векторі відповідає рівню (категорії) ознаки, тож можна визначити потрібний рівень, подивившись, який елемент вектора дорівнює одиниці (1).
Перший крок кодування вашої категоріальної ознаки — створити StringIndexer. Екземпляри цього класу — це Estimator'и, які беруть DataFrame зі стовпцем рядків і відображають кожен унікальний рядок у число. Потім Estimator повертає Transformer, який бере DataFrame, прикріплює до нього це відображення як метадані та повертає новий DataFrame з числовим стовпцем, що відповідає рядковому.
Другий крок — закодувати цей числовий стовпець як one-hot вектор за допомогою OneHotEncoder. Це працює так само, як і StringIndexer: спершу створюється Estimator, а потім Transformer. Кінцевим результатом є стовпець, який кодує вашу категоріальну ознаку як вектор, придатний для алгоритмів машинного навчання!
Це може здаватися складним, але не хвилюйтеся! Вам лише потрібно запам'ятати, що слід створити StringIndexer і OneHotEncoder, а Pipeline подбає про решту.
Чому потрібно кодувати категоріальну ознаку як one-hot вектор?
Ця вправа є частиною курсу
Основи PySpark
Практична інтерактивна вправа
Перетворіть теорію на практику за допомогою однієї з наших інтерактивних вправ
Почати вправу