Как передать категориальные функции моделированию линейной регрессии в PySpark MLlib?

Я работал над Linear Regression моделированием в PySpark и сомневаюсь, что смогу его переоценить. Данные, которые у меня есть, имеют categorical features. Я просмотрел документацию по PySpark, и пример для Linear Regression показывает следующее:

model = LinearRegressionWithSGD.train(parsedData)

Он не показывает, как передать categorical features в Linear Regression. Я работал над Random Forest в PySpark, прежде чем я сначала encoded categorical features, а затем передал эти функции в модель, поскольку Random Forest предоставляет parameter для указания categorical features. Linear Regression не показывает такой параметр в документации.

Может ли кто-нибудь помочь мне, предоставив мне способ перейти от categorical feature к моделированию Linear Regression в PySpark MLlib


person Jason Donnald    schedule 20.01.2016    source источник


Ответы (1)


Вам нужно использовать '''VectorAssembler''' для создания столбца «функции». «features» — это имя столбца характеристик по умолчанию, поэтому в одномерном случае вы делаете LinearRegression(featurescol="catvar"). Вот пошаговое руководство по всему процессу, если вы начали с strVar в фрейме данных df.

Шаг 1. Создайте индекс, который сопоставляется со строковой переменной.

from pyspark.ml.feature import StringIndexer, OneHotEncoder
from pyspark.ml.feature import VectorAssembler

varIdxer = StringIndexer(inputCol='strVar',outputCol='varIdx').fit(df)
df = varIdxer.transform(df)

Шаг 2. Закодируйте категориальную переменную как последовательность двоичных переменных, используя OneHotEncoder

df = OneHotEncoder(inputCol="varIdx", outputCol="varCat").transform(df)

Шаг 3. Создайте столбец "features" с помощью VectorAssembler.

assembler = VectorAssembler(inputCols=["varCat"],outputCol="features")
df =  assembler.transform(df)

Шаг 4. Сопоставьте модель (я тестировал только линейную регрессию).

lr = LinearRegression(labelCol='y',featuresCol='features')
person groceryheist    schedule 03.11.2018