python - pyspark ML LabeledPoint 不适用于 LinearRegression
问题描述
我正在使用 pyspark 研究 Spark 3.0.1,并使用设置了一些用于简单 OLS 回归的数据
data = results.select('OrderMonthYear', 'SaleAmount').rdd.map(lambda row: LabeledPoint(row[1], [row[0]])).toDF()
这OrderMonthYear
是我的特征列(int),SaleAmount
是响应(float)。该LabeledPoint
方法是从pyspark.mllib.regression
. 然后我尝试将回归模型与
from pyspark.ml.regression import LinearRegression
lr = LinearRegression()
modelA = lr.fit(data, {lr.regParam:0.0})
得到这个例外
IllegalArgumentException: requirement failed: Column features must be of type struct<type:tinyint,size:int,indices:array<int>,values:array<double>> but was actually struct<type:tinyint,size:int,indices:array<int>,values:array<double>>.
这显然不是很有帮助,因为所需和传递的功能似乎是相同的结构。我在网上搜索过,只为java找到了这个问题的答案,或者为自己构建结构的人找到了答案。异常是从刚刚抛出 java 异常 ( #Hide where the exception came from that shows a non-Pythonic JVM exception message.
) 的 util 函数中抛出的,因此我无法进一步调试。
解决方案
MLlib 和基于 RDD 的 MLlib 函数已弃用。我建议使用 ML 的向量汇编器:
from pyspark.ml.feature import VectorAssembler
from pyspark.ml.regression import LinearRegression
data = spark.createDataFrame([[0,1],[1,2],[2,3]]).toDF('OrderMonthYear', 'SaleAmount')
va = VectorAssembler(inputCols=['SaleAmount'], outputCol='features')
data2 = va.transform(data)
lr = LinearRegression(labelCol='OrderMonthYear')
model = lr.fit(data2)
推荐阅读
- jquery - Ajax 在阿联酋国家工作不正常
- sqlite - 在 INTEGER 主键的情况下 SqlLite rowid 的行为
- c++ - C++ 中的 PLC 功能块库
- c# - 通过 SQL Server 存储过程调用 Team Foundation Server(TFS) API
- c++ - 在 C++ 包装器中存储 NSTimer 实例
- vba - 搜索电子邮件正文中是否缺少文本
- javascript - excel-JS excel left()工作表功能不起作用
- matlab - 如何在MATLAB中计算高斯曲线的调制传递函数?
- php - 如何在模型上使用观察方法?
- shell - 如何从变量中删除额外的白色步伐以及“-”