5-й столбец - это структура, представляющая разреженные векторы в Spark. Он состоит из трех компонентов:
- длина вектора - в этом случае все векторы имеют длину 10 элементов
- массив индексов, содержащий индексы ненулевых элементов
- значение массив ненулевых значений
Итак
(10,[0,2,3,4,7],[1.0,1.0,14.386294994851129,1.0,14.386294994851129])
представляют следующий разреженный вектор длины 10 (возьмите i -ое значение и поместите его в position i ):
0 2 3 4 7
[1.0, 0, 1.0, 14.386294994851129, 1.0, 0, 0, 14.386294994851129, 0, 0]
(показаны позиции ненулевых элементов)
Каковы отдельные компоненты этого вектора? Согласно документации :
RFormula создает векторный столбец объектов и двойной или строковый столбец метки. Как и при использовании формул в R для линейной регрессии, строковые столбцы ввода будут кодироваться в горячем виде, а числовые столбцы c будут приводиться к двойным значениям. Если столбец метки имеет тип string, он сначала преобразуется в double с StringIndexer
. Если столбец метки не существует в DataFrame, столбец выходной метки будет создан из указанной переменной ответа в формуле.
lab ~ . + color:value1 + color:value2
- это специальный синтаксис, который исходит от языка R. Он описывает модель, которая регрессирует значение lab
для всех других функций плюс два термина взаимодействия (продукта). Вы можете увидеть список всех функций, напечатав fittedRF
и посмотрев экземпляр ResolvedRFormula
, в котором он содержится:
scala> println(fittedRF)
RFormulaModel(
ResolvedRFormula(
label=lab,
terms=[color,value1,value2,{color,value1},{color,value2}],
hasIntercept=true
)
) (uid=rFormula_0847e597e817)
Я разбил вывод по строкам и отступ для удобства чтения. Таким образом, . + color:value1 + color:value2
расширяется до [color,value1,value2,{color,value1},{color,value2}]
. Из них color
является категориальной функцией и кодируется в горячем виде в наборе функций индикатора с использованием следующего сопоставления:
- зеленый становится
[1, 0]
- синий становится
[0, 0]
- красный становится
[0, 1]
Хотя у вас есть три категории, только две используется для кодирования. Синий в этом случае отбрасывается, поскольку его присутствие не имеет никакого информационного значения - если оно было там, все три столбца всегда будут суммироваться в 1, что делает их линейно зависимыми. Эффект отбрасывания категории blue состоит в том, что она становится базовой линией в качестве части перехвата, и подобранная модель предсказывает, какой эффект изменяет категорию с blue на green или от синий до красный будет на этикетке. Этот конкретный выбор кодировки немного произвольный - в моей системе столбцы для red и green поменялись местами.
value1
и value2
- двойные , поэтому они go неизменны в векторе признаков. {color,value1}
является продуктом функции color
и функции value1
, так что это продукт кодирования color
в одно касание со скалярным value1
, в результате чего появилось три новых функции. Обратите внимание, что в этом случае мы не можем отбросить одну категорию, потому что взаимодействие делает «базовое» значение зависимым от значения второго объекта во взаимодействии. То же самое для {color,value2}
. Таким образом, в итоге вы получите 2 + 1 + 1 + 3 + 3 или 10 функций. В выводе show()
вы видите собранный столбец векторных объектов, который может использоваться в качестве входных данных другими классами Spark ML.
Вот как читать первую строку:
(10,[0,2,3,4,7],[1.0,1.0,14.386294994851129,1.0,14.386294994851129])
- это разреженное векторное представление
[1.0, 0, 1.0, 14.386294994851129, 1.0, 0, 0, 14.386294994851129, 0, 0]
|--1--| |2| |-------3--------| |---4---| |----------5-----------|
, которое содержит следующие отдельные компоненты:
[1.0, 0, ...]
- color
, кодирование в "горячем" режиме (минус линейно-зависимое кодирование) третья категория) зеленый [..., 1.0, ...]
- value1
, значение 1
[..., 14.386294994851129, ...]
- value2
, значение 14 38629 .. . [..., 1.0, 0, 0, ...]
- color x value1
член взаимодействия, продукт кодирования одной горячей строки: зеленый ([1, 0, 0]
) и 1 [..., 14.386294994851129, 0, 0]
- color x value2
термин взаимодействия, произведение однократного кодирования зеленый ([1, 0, 0]
) и 14 38629 ...