Pyspark ML - значение прогноза RandomForestClassificationModel

Я пробовал 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. Спасибо.

Я ожидал получить "result.prediction = 1.0", но получил "result.prediction = 0.0" - почему ты? Классификаторы несовершенны и могут давать как ложные срабатывания, так и ложноотрицания. Нет никаких причин для правильной классификации конкретной записи, даже если это произошло в наборе обучающих данных (если, конечно, данные не являются тривиальными).
Alper t. Turker 02.05.2018 13:19

@ user9613318 Спасибо за комментарий. Я запускал код много раз, но получал тот же результат (result.prediction = 0.0), так что мне кажется, что я допустил ошибку (и).

tnogu 02.05.2018 14:35

Spark RandomForest в основном детерминирован при работе с небольшими данными, поэтому он должен сходиться к одному и тому же решению. Если вы не настраиваете алгоритм с (значительно) разными параметрами каждый раз, нет причин ожидать разных результатов.

Alper t. Turker 02.05.2018 15:00

@ 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». Я считаю это странным.

tnogu 02.05.2018 16:53
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
4
176
0

Другие вопросы по теме