如何将分类特征传递给 PySpark MLlib 中的线性回归建模?

Jas*_*ald 4 python linear-regression categorical-data pyspark apache-spark-mllib

我当时正在做Linear Regression建模PySpark,但对重新评估它有疑问。我所拥有的数据有categorical features。我浏览了文档PySpark,示例Linear Regression显示了这一点:

model = LinearRegressionWithSGD.train(parsedData)
Run Code Online (Sandbox Code Playgroud)

它没有显示如何传递categorical featuresto Linear Regression。我之前曾Random Forest在其中首先将这些功能传递给模型,因为提供了一个来指定. 这PySparkencoded categorical featuresRandom Forestparametercategorical featuresLinear Regression文档中没有显示任何此类参数

categorical feature任何人都可以帮助我,为我提供进入Linear Regression建模的方法PySpark MLlib

gro*_*ist 6

您需要使用“VectorAssembler”来构建“功能”列。“features”是功能列的默认名称,因此在单变量情况下您可以这样做LinearRegression(featurescol="catvar")。这是整个过程的演练,假设您strVar从 dataFrame开始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)
Run Code Online (Sandbox Code Playgroud)

步骤 2:使用 a 将分类变量编码为二进制变量序列OneHotEncoder

df = OneHotEncoder(inputCol="varIdx", outputCol="varCat").transform(df)
Run Code Online (Sandbox Code Playgroud)

第 3 步:使用VectorAssembler.

assembler = VectorAssembler(inputCols=["varCat"],outputCol="features")
df =  assembler.transform(df)
Run Code Online (Sandbox Code Playgroud)

步骤 4:拟合模型(我只用 LinearRegression 进行过测试)。

lr = LinearRegression(labelCol='y',featuresCol='features')
Run Code Online (Sandbox Code Playgroud)