Pyspark k-кратная перекрестная проверка среднего RMSE - PullRequest
0 голосов
/ 16 декабря 2018

Я выполняю линейную регрессию с k-кратной перекрестной проверкой набора данных с использованием Pyspark.Я на данный момент могу только определить RMSE лучшей модели.Но я хочу среднюю RMSE для всех моделей, оцененных в перекрестной проверке.Как получить среднее значение RMSE для всех оцененных моделей при перекрестной проверке?

from pyspark.ml.regression import LinearRegression
from pyspark.ml.evaluation import RegressionEvaluator
from pyspark.ml.feature import VectorAssembler
from pyspark.ml.evaluation import BinaryClassificationEvaluator
from pyspark.ml.feature import HashingTF, Tokenizer
from pyspark.ml.tuning import CrossValidator, ParamGridBuilder

file_name = '/tmp/user/userfile/LS.csv'
data = spark.read.options(header='true', inferschema='true',                            
                          delimiter=',').csv(file_name)
data.cache()
features = ["x"]
lr_data = data.select(col("y").alias("label"), *features)
(training, test) = lr_data.randomSplit([.7, .3])

vectorAssembler = VectorAssembler(inputCols=features, outputCol="features")
training_ds = vectorAssembler.transform(training)
test_ds = vectorAssembler.transform(test)

lr = LinearRegression(maxIter=5, solver="l-bfgs") # solver="l-bfgs" here

modelEvaluator=RegressionEvaluator()

paramGrid = ParamGridBuilder().addGrid(lr.regParam, [0.1,0.01]) 
                              .addGrid(lr.elasticNetParam, [0, 1]).build()

crossval = CrossValidator(estimator=lr,
                          estimatorParamMaps=paramGrid,
                          evaluator=modelEvaluator,
                          numFolds=2)

cvModel = crossval.fit(training_ds)

prediction = cvModel.transform(test_ds)

evaluator = RegressionEvaluator(labelCol="label",
                                predictionCol="prediction",
                                metricName="rmse")

rms = evaluator.evaluate(prediction)
print("Root Mean Squared Error (RMSE) on test data = %g" % rms)

1 Ответ

0 голосов
/ 16 декабря 2018

Просто нужно извлечь другие модели из кроссвалидатора

Spark CrossValidatorModel получить доступ к другим моделям, кроме bestModel?

Затем продолжить работу с RegressionEvaluator для каждого и подсчитать среднее вручную.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...