PySpark: оптимальные параметры, полученные при перекрестной проверке, не из сетки - PullRequest
0 голосов
/ 26 апреля 2020

Я пытаюсь понять следующую проблему, возникшую при обучении случайного леса в pyspark. Стандартом мы определяем конвейер, оценщик, сетку и т. Д. c

from pyspark.ml.tuning import CrossValidator, ParamGridBuilder

rfClassifier = RandomForestClassifier(labelCol='Target')
cv_pipeline = Pipeline(stages=[rfClassifier])

evaluator = MulticlassClassificationEvaluator(labelCol='Target')

paramGrid = ParamGridBuilder().addGrid(RandomForestClassifier.numTrees, [100, 120]).\
addGrid(RandomForestClassifier.maxDepth, [7, 10] ).addGrid(RandomForestClassifier.subsamplingRate, [0.8,0.9]).\
addGrid(RandomForestClassifier.featureSubsetStrategy, ['auto','log2', 'onethird']).build()

Выполните перекрестную проверку

train.cache()
crossval = CrossValidator(estimator = cv_pipeline, estimatorParamMaps=paramGrid, evaluator=evaluator, numFolds=3)
cvModel=crossval.fit(train)

и посмотрите на лучшую модель

model = cvModel.bestModel
java_model = model.stages[-1]._java_obj
{param.name: java_model.getOrDefault(java_model.getParam(param.name)) 
    for param in paramGrid[0]}

Неожиданно я получаю следующий результат

{'featureSubsetStrategy': 'auto',
 'maxDepth': 5,
 'numTrees': 20,
 'subsamplingRate': 1.0}

Может кто-нибудь объяснить мне, почему оптимальные параметры не были выбраны из сетки? большое спасибо

...