Вы должны сначала соответствовать и назначить модель CV, прежде чем получить доступ к атрибуту bestModel
; адаптация примера из документов :
from pyspark.ml.classification import LogisticRegression
from pyspark.ml.evaluation import BinaryClassificationEvaluator
from pyspark.ml.linalg import Vectors
from pyspark.ml.tuning import CrossValidator, ParamGridBuilder
dataset = spark.createDataFrame(
[(Vectors.dense([0.0]), 0.0),
(Vectors.dense([0.4]), 1.0),
(Vectors.dense([0.5]), 0.0),
(Vectors.dense([0.6]), 1.0),
(Vectors.dense([1.0]), 1.0)] * 10,
["features", "label"])
lr = LogisticRegression()
grid = ParamGridBuilder().addGrid(lr.maxIter, [0, 1]).build()
evaluator = BinaryClassificationEvaluator()
cv = CrossValidator(estimator=lr, estimatorParamMaps=grid, evaluator=evaluator,
parallelism=2)
На этом этапе запрос cv.bestModel
даст
AttributeError Traceback (most recent call last)
<command-388275196191991> in <module>
----> 1 cv.bestModel
AttributeError: 'CrossValidator' object has no attribute 'bestModel'
, как в вашем случае.
Подгонка и назначение в первую очередь:
cvModel = cv.fit(dataset)
cvModel.bestModel
# result:
LogisticRegressionModel: uid = LogisticRegression_f9c9ea282e32, numClasses = 2, numFeatures = 1