from pyspark.ml.regression import LinearRegression
from pyspark.ml import Pipeline
from pyspark.ml.feature import StringIndexer, VectorAssembler
from pyspark.ml.classification import LogisticRegression
from pyspark.ml.evaluation import RegressionEvaluator
from pyspark.sql.types import DoubleType
for i in range(0, len(names)):
df2=trainingDF
numericCols = [c for c in trainingDF.columns if c not in {names[i]}]
assembler = VectorAssembler(inputCols=numericCols, outputCol="features")
df = assembler.transform(df2)
df=df.withColumnRenamed(names[i],"label")
lr = LinearRegression(maxIter=10, regParam=0.3, elasticNetParam=0.8)
lrModel = lr.fit(df)
evaluator = RegressionEvaluator()
evaluator.setPredictionCol(names[i])
evaluator.evaluate(df2[names[i]].cast(DoubleType()))
rsq=evaluator.evaluate(df, {evaluator.metricName: "r2"})
vif = round(1 / (1 - rsq), 2)
print(vif)
我在下面的行中遇到了一个错误。我想将df2
的所有列作为双精度值传递,并将它们的类型转换为双精度值。
evaluator.evaluate(df2[names[i]].cast(DoubleType()))
1条答案
按热度按时间zujrkrfu1#
根据文档,方法
evaluate
将pyspark.sql.DataFrame
对象作为第一个参数,但您提供了一个列(df2[names[i]].cast(DoubleType())
的数据类型为Column,而不是DataFrame)。evaluate
( 数据集: Dataframe ,参数:可选[参数Map] =无 )→浮点使用可选参数计算输出。
参数:
数据集: pyspark.sql.数据框架
包含标注/观测和预测的数据集
参数: 字典,可选*
覆盖嵌入参数的可选参数Map
退货:
*浮动
公制单位