machine-learning - Pyspark k-fold 交叉验证平均 RMSE
问题描述
我正在使用 Pyspark 对数据集进行 k 折交叉验证的线性回归。我目前只能确定最佳模型的 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)
解决方案
只需要从交叉验证器中提取其他模型
Spark CrossValidatorModel 访问 bestModel 以外的其他模型?
然后对每个进行 RegressionEvaluator 并手动计算平均值。
推荐阅读
- javascript - 模板文字js
- php - Laravel 5.7.6 Email Authentication
- amazon-web-services - Aurora PostgreSQL 引擎:设备上没有剩余空间
- python - 如何处理CSV数据错位问题?
- openshift - 使用 Docker 构建策略从 OpenShift 密钥填充环境变量
- python - 在 python3 和 Qt5 中使用虚拟键盘
- java - 如果未通过身份验证,则设置 Spring 安全性以将用户重定向到登录页面
- ruby-on-rails - Rails 显示来自 has_and_belongs_to_many 关系的属性
- java-native-interface - cmd 提示符中的 JNI 标头
- python - 是否可以同时使用 Flask 微框架和循环运行 Web 服务器?