如何在 Spark 的逻辑回归分类器中将多个列作为特征传递?

A-a*_*-ar 2 python machine-learning logistic-regression apache-spark pyspark

我正在尝试使用简单的数据集运行 Logistic 回归以了解 pyspark 的语法。我有看起来有 11 列的数据,其中前 10 列是特征,最后一列(第 11 列)是标签。我想将这 10 列作为特征传递,将第 11 列作为标签传递。但我只知道作为单列传递使用featuresCol="col_header_name" 我已经使用pandas从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)
Run Code Online (Sandbox Code Playgroud)

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

reg=LogisticRegression()
reg=reg.fit(Dataframe_of_features,Label_array)
Run Code Online (Sandbox Code Playgroud)

pra*_*dha 5

您需要使用 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)
Run Code Online (Sandbox Code Playgroud)

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

tri=LogisticRegression(maxIter=10,
                       regParam=0.01,
                       featuresCol="features",
                       labelCol="label")
lr_model = tri.fit(spDF)
Run Code Online (Sandbox Code Playgroud)