Для подготовки датасета и векторизации признаков в Spark пригодиться класс RFormula. Читайте далее, как векторизовать данные, как записывать формулы, какие операторы поддерживаются, а также как примененять конкатенацию и пересечение с использованием RFormula.
Что такое RFormula в Spark
RFormula служит для извлечения признаков, заданные специальной формулой языка программирования R. В настоящее время в Spark поддерживается ограниченный набор операторов формулы R. К ним относятся:
~разделяет зависимую (целевую) переменную от независимых+служит для конкатенации независимых переменных-удаляет признак, например, «- 1» означает удаление пересечения (intercept):знак пересечения (умножение числовых значений или бинаризация категориальных значений).выбор всех столбцов, кроме целевого
Но в Spark НЕ поддерживаются следующие операторы RFormula:
*служит для взаимодействия (a*bинтерпретируется какa+b+a:b)^повторение взаимодействий ((a+b+c)^2интерпретируется как(a+b+c)*(a+b+c))- Математические выражения: вроде log, ln, cos и т. д.
- Специальная функция
Iдля проведения арифметических операций (I(b+c)интерпретируется как суммаbис)
RFormula может пригодиться для векторизации признаков, а также для построения модели линейной регрессии (Linear regression). Обычно для векторизации признаков в Spark требуется несколько шагов, о которых мы говорили тут, но с RFormula можно сделать это за один.
Конкатенация в RFormula
Основным оператором RFormula является конкатенация +. Предположим, что имеется два столбца a и b со значениями double, тогда следующий пример иллюстрирует конкатенацию RFormula в Spark:
y ~ a + bобозначает модельy = w0 + w1*a + w2*b, гдеw0— это точка пересечения (intercept) иw1,w2— коэффициенты.
Как и при использовании формул в R для линейной регрессии, строковые данные будут преобразованы в категориальные значения, а числовые данные в числа с плавающей точкой double. Spark для строковых данных создаст объект класса StringIndexer, о котором говорили тут.
Следующий код демонстрирует применение конкатенации RFormula в Spark:
from pyspark.ml.feature import RFormula
dataset = spark.createDataFrame(
[(7, "US", 18, 1.0),
(8, "CA", 12, 0.0),
(9, "NZ", 15, 0.0)],
["id", "country", "hour", "clicked"])
formula = RFormula(
formula="clicked ~ country + hour",
featuresCol="features",
labelCol="label")
output = formula.fit(dataset).transform(dataset)
output.select("features", "label").show()
+--------------+-----+ | features|label| +--------------+-----+ |[0.0,0.0,18.0]| 1.0| |[1.0,0.0,12.0]| 0.0| |[0.0,1.0,15.0]| 0.0| +--------------+-----+
Первые два признака в получившемся столбце features отвечают за категориальный признак country. Результат векторизации можно скормить одному из Machine Learning алгоритмов в Spark.
Пересечение в RFormula
Rformula может провести операцию пересечения в Spark над столбцами с числами с плавающей точкой. Так, например:
y ~ a + b + a:b - 1означаетy = w1*a + w2*b + w3*a*b, где w1, w2, w3 — коэффициенты (intercept был исключен с помощью добавления «-1»)
Возвращаясь к предыдущему код в Spark, продемонстрируем применение пересечения RFormula:
formula = RFormula(
formula="clicked ~ hour + id + hour:id",
featuresCol="features",
labelCol="label")
output = formula.fit(dataset).transform(dataset)
output.select("features", "label").show()
+----------------+-----+ | features|label| +----------------+-----+ |[18.0,7.0,126.0]| 1.0| | [12.0,8.0,96.0]| 0.0| |[15.0,9.0,135.0]| 0.0| +----------------+-----+
Последний признак — это результат умножения id на hour.
Выбор всех столбцов
Если предварительно подготовлены и обработаны все столбцы вашего датасета, и необходимо только их векторизовать, то пригодится выбор всех столбцов, кроме целевого. Код Spark для векторизации всех столбцов датасета с использование RFormula выглядит следующим образом:
formula = RFormula(
formula="clicked ~ .",
featuresCol="features",
labelCol="label")
output = formula.fit(dataset).transform(dataset)
output.select("features", "label").show()
+------------------+-----+ | features|label| +------------------+-----+ |[7.0,0.0,0.0,18.0]| 1.0| |[8.0,1.0,0.0,12.0]| 0.0| |[9.0,0.0,1.0,15.0]| 0.0| +------------------+-----+
А о том, как подготавливать датасеты, векторизовывать признаки и обучать модели машинного обучения в Spark для решения реальных задач Big Data, вы узнаете на специализированном курсе «Анализ данных с Apache Spark» в лицензированном учебном центре обучения и повышения квалификации разработчиков, менеджеров, архитекторов, инженеров, администраторов, Data Scientist’ов и аналитиков Big Data в Москве.



