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

时间:2016-01-20 17:52:09

标签: python pyspark linear-regression apache-spark-mllib categorical-data

我正在Linear Regression进行PySpark建模,并对此进行了重新调整。我拥有的数据有categorical features。我浏览了PySpark上的文档,Linear Regression的示例显示了这一点:

model = LinearRegressionWithSGD.train(parsedData)

它没有显示如何将categorical features传递给Linear Regression。在我Random Forest PySpark之前,我在encoded的{​​{1}}工作过,然后将这些功能传递给模型,因为categorical features提供了Random Forest指定parametercategorical features在文档中没有显示任何此类参数。

任何人都可以通过为Linear Regression categorical feature Linear Regression

提供PySparkMLlib模型的方法来帮助我

2 个答案:

答案 0 :(得分:1)

要在预期数字特征时使用分类特征,可以使用虚拟编码。为此,MLLIB有一个oneHotEncoder

答案 1 :(得分:0)

您需要使用“''VectorAssembler'''来构建“功能”列。 “功能”是功能列的默认名称,因此在单变量情况下,您可以LinearRegression(featurescol="catvar"). Here is a walkthrough of the whole process, assuming you started with strVar in a dataFrame df`”。

步骤1:建立一个映射到字符串变量的索引。

from pyspark.ml.feature 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:使用VectorAssembler创建“功能”列。

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

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

lr = LinearRegression(labelCol='y',featuresCol='features')