Я пробовал random_forest_classifier_example.py, и он работает. На следующем шаге я пробовал предсказывать, используя 3-ю строку sample_libsvm_data.txt, которая имеет метку «1». Я добавил:
indexes = [
124, 125, 126, 127, 151, 152, 153, 154, 155, 179,
180, 181, 182, 183, 208, 209, 210, 211, 235, 236,
237, 238, 239, 263, 264, 265, 266, 267, 268, 292,
293, 294, 295, 296, 321, 322, 323, 324, 349, 350,
351, 352, 377, 378, 379, 380, 405, 406, 407, 408,
433, 434, 435, 436, 461, 462, 463, 464, 489, 490,
491, 492, 493, 517, 518, 519, 520, 521, 545, 546,
547, 548, 549, 574, 575, 576, 577, 578, 602, 603,
604, 605, 606, 630, 631, 632, 633, 634, 658, 659,
660, 661, 662
]
values = [
145.0, 255.0, 211.0, 31.0, 32.0, 237.0, 253.0, 252.0, 71.0, 11.0,
175.0, 253.0, 252.0, 71.0, 144.0, 253.0, 252.0, 71.0, 16.0, 191.0,
253.0, 252.0, 71.0, 26.0, 221.0, 253.0, 252.0, 124.0, 31.0, 125.0,
253.0, 252.0, 252.0, 108.0, 253.0, 252.0, 252.0, 108.0, 255.0, 253.0,
253.0, 108.0, 253.0, 252.0, 252.0, 108.0, 253.0, 252.0, 252.0, 108.0,
253.0, 252.0, 252.0, 108.0, 255.0, 253.0, 253.0, 170.0, 253.0, 252.0,
252.0, 252.0, 42.0, 149.0, 252.0, 252.0, 252.0, 144.0, 109.0, 252.0,
252.0, 252.0, 144.0, 218.0, 253.0, 253.0, 255.0, 35.0, 175.0, 252.0,
252.0, 253.0, 35.0, 73.0, 252.0, 252.0, 253.0, 35.0, 31.0, 211.0,
252.0, 253.0, 35.0
]
testDf = spark.createDataFrame([(Vectors.sparse(692, indexes, values),)], ["indexedFeatures"])
result = rfModel.transform(testDf).head()
print(result.prediction)
прямо перед
spark.stop()
из random_forest_classifier_example.py, затем запустите код. Я ожидал получить «result.prediction = 1.0», но получил «result.prediction = 0.0». Я что-то неправильно понимаю? Есть у кого-нибудь идеи?
Я использую pyspark 2.3, добавляя:
from pyspark.ml.linalg import Vectors
и я упомянул "класс RandomForestClassifier" часть классификации.py. Спасибо.
@ user9613318 Спасибо за комментарий. Я запускал код много раз, но получал тот же результат (result.prediction = 0.0), так что мне кажется, что я допустил ошибку (и).
Spark RandomForest
в основном детерминирован при работе с небольшими данными, поэтому он должен сходиться к одному и тому же решению. Если вы не настраиваете алгоритм с (значительно) разными параметрами каждый раз, нет причин ожидать разных результатов.
@ user9613318 Еще раз спасибо. Я изменил predictions.select("predictedLabel", "label", "features").show(5)
на ....show(35, truncate=50)
в random_forest_classifier_example.py (около строки 70), затем дождался появления соответствующих данных (3-я строка sample_libsvm_data.txt). Иногда это случается в нескольких испытаниях. По моим наблюдениям, в большинстве случаев predictedLabel имеет "1.0". Но даже в этот момент «result.prediction» имеет значение «0,0». Я считаю это странным.