如何在Spark中的Logistic回归分类器中将多个列作为要素传递? [重复]

问题描述 投票:0回答:1

此问题已经在这里有了答案:

我正在尝试使用简单的数据集运行Logistic回归,以了解pyspark的语法。我有看起来有11列的数据,其中前10列是要素,最后一列(第11列)是标签。我想将这10列作为要素传递,将第11列作为标签传递。但是我只知道使用featuresCol="col_header_name"作为单列传递为特征我已经使用熊猫从csv文件中读取了数据,但已将其转换为RDD。这是代码:

from pyspark.ml.classification import LogisticRegression
from pyspark.sql import SQLContext
from pyspark import SparkContext
import pandas as pd
data = pd.read_csv('abc.csv')
sc = SparkContext("local", "App Name")
sql = SQLContext(sc)
spDF = sql.createDataFrame(data)
tri=LogisticRegression(maxIter=10,regParam=0.01,featuresCol="single_column",labelCol="label")
lr_model = tri.fit(spDF)

如果使用featuresCol=[list_of_header_names],则会出现错误。我使用了sk-learn,它的语法非常简单,例如:

reg=LogisticRegression()
reg=reg.fit(Dataframe_of_features,Label_array)
python apache-spark machine-learning pyspark logistic-regression
1个回答
3
投票

您需要使用Vector Assembler将所有列组合到一个要素阵列中。

from pyspark.ml.linalg import Vectors
from pyspark.ml.feature import VectorAssembler
assembler = VectorAssembler(inputCols=[list_of_header_names],outputCol="features")
spDF = assembler.transform(spDF)

然后您可以将所有变量的组合数组作为逻辑回归的输入。

tri=LogisticRegression(maxIter=10,
                       regParam=0.01,
                       featuresCol="features",
                       labelCol="label")
lr_model = tri.fit(spDF)
© www.soinside.com 2019 - 2024. All rights reserved.