Size: a a a

2021 March 04

AU

Amir U in catboost_ru
Вячеслав Колосков
пытаюсь выполнить:
import catboost_spark
получаю ошибку:
Py4JJavaError: An error occurred while calling None.ai.catboost.spark.params.QuantizationParams.
: java.lang.AbstractMethodError: ai.catboost.spark.params.QuantizationParams.org$apache$spark$ml$param$Params$_setter_$org$apache$spark$ml$param$Params$$paramMap_$eq(Lorg/apache/spark/ml/param/ParamMap;)V
Добрый вечер
А как в итоге обойти эту ошибку при import catboost_spark?
Нашел схожее ишью
https://github.com/catboost/catboost/issues/1585
источник

ND

Nikita Dmitriev in catboost_ru
Daniil Udimov
Да, как раз 94 ненулевых. А можно как-то (может быть, не в питоне) достать из бинарной модели информацию о соответствии индексов и названий?
А тебе это нужно, что бы на важность фичей посмотреть?
Ты можешь сделать model.get_feature_importance(prettified=True) и тогда тебе вернется табличка, в которой в одной колонке будут имена фичей, а в другой важность этой фичи
источник

AK

Andrei Khropov in catboost_ru
Скорее всего дело в совместимости версий. Какая версия catboost_spark? 0.25-rc3? какая ОС? какая версия JRE? какая версия Scala, Spark, python?
источник

DU

Daniil Udimov in catboost_ru
Nikita Dmitriev
А тебе это нужно, что бы на важность фичей посмотреть?
Ты можешь сделать model.get_feature_importance(prettified=True) и тогда тебе вернется табличка, в которой в одной колонке будут имена фичей, а в другой важность этой фичи
Мне нужно достать имена фичей, чтобы собрать датасет и применить модель. Ну, то есть по модели понять, на каких местах каких фичи стоять должны.  
Спасибо, этот метод сообщает часть информации. То есть можно попробовать состыковать выход model.get_feature_importance(prettified=True) и model.get_feature_importance(), но всё равно остаётся неоднозначность. То есть некоторые признаки в этой таблице получаются под именами, некоторые — под номерами. А хотелось бы как раз соответствие имён и индексов.
источник

IL

Ivan Lyzhin in catboost_ru
Daniil Udimov
Мне нужно достать имена фичей, чтобы собрать датасет и применить модель. Ну, то есть по модели понять, на каких местах каких фичи стоять должны.  
Спасибо, этот метод сообщает часть информации. То есть можно попробовать состыковать выход model.get_feature_importance(prettified=True) и model.get_feature_importance(), но всё равно остаётся неоднозначность. То есть некоторые признаки в этой таблице получаются под именами, некоторые — под номерами. А хотелось бы как раз соответствие имён и индексов.
По идее катбуст может применяться на датасетах с произвольным порядком фичей, если у всех фичей, использованных в модели, заданы имена в датасете.
источник

IL

Ivan Lyzhin in catboost_ru
Ну и при применении можно не передавать фичи, которые модель использовать не стала (опять же - только если заданы имена фичей).
источник

A

Andrew in catboost_ru
Привет, еще вопрос по настройке StochasticRank'а, прочитал твои рекомендации, что он довольно чувствителен к параметрам, вопрос: если у меня стабильно в переборе гиперпараметров с ним лидируют варианты с выключенным langevin, значит ли это, что он у меня недонастроенный, и мне нужно крутить другие его параметры? Датасет порядка 100к примеров, ~500 float-фичей.
@imwat
источник

DU

Daniil Udimov in catboost_ru
Ivan Lyzhin
По идее катбуст может применяться на датасетах с произвольным порядком фичей, если у всех фичей, использованных в модели, заданы имена в датасете.
А как он соотносит категориальные фичи (которые хранит в виде индексов) и имена? Получается, где-то в модели всё-таки есть полный список соответствий индексов-имён?
источник

AU

Aleksei Ustimenko in catboost_ru
Andrew
Привет, еще вопрос по настройке StochasticRank'а, прочитал твои рекомендации, что он довольно чувствителен к параметрам, вопрос: если у меня стабильно в переборе гиперпараметров с ним лидируют варианты с выключенным langevin, значит ли это, что он у меня недонастроенный, и мне нужно крутить другие его параметры? Датасет порядка 100к примеров, ~500 float-фичей.
@imwat
Вполне может быть так, что ланжеван не нужен
источник

A

Andrew in catboost_ru
Ок, спасибо, тогда буду оптимизировать на общих основаниях. 😊
источник

IL

Ivan Lyzhin in catboost_ru
Daniil Udimov
А как он соотносит категориальные фичи (которые хранит в виде индексов) и имена? Получается, где-то в модели всё-таки есть полный список соответствий индексов-имён?
Насчет полного списка не уверен, но для использованных фичей точно хранится и имя, и индекс.
источник

AK

Andrey Korzhun in catboost_ru
Не раз замечал, что если из категориальных признаков сделать дамми, то результат выше, чем при использовании встроенных возможностей.
Почему так происходит?
источник

SK

Stanislav Kirillov in catboost_ru
Andrey Korzhun
Не раз замечал, что если из категориальных признаков сделать дамми, то результат выше, чем при использовании встроенных возможностей.
Почему так происходит?
Расскажи, что ты понимаешь под дамми?
источник

AK

Andrey Korzhun in catboost_ru
Stanislav Kirillov
Расскажи, что ты понимаешь под дамми?
pandas.get_dummies
источник

AU

Amir U in catboost_ru
Andrei Khropov
Скорее всего дело в совместимости версий. Какая версия catboost_spark? 0.25-rc3? какая ОС? какая версия JRE? какая версия Scala, Spark, python?
catboost-spark 0.25-rc3
MacOS
java 1.8.0_45
scalaVersion 2.12.0
sparkVersion 3.0.1
Python 3.7.4
источник

AK

Andrei Khropov in catboost_ru
и соответственно делается

.config("spark.jars.packages", "ai.catboost:catboost-spark_2.12:0.25-rc3")

так?
источник

AK

Andrei Khropov in catboost_ru
2.12, а не 2.11.
источник

AU

Amir U in catboost_ru
пробовал и 2.12 и 2.11

spark = (SparkSession.builder
 .master("local[*]")
 .config("spark.jars.packages", "ai.catboost:catboost-spark_2.12:0.25-rc3")        
 .appName("RegressorTest")
 .getOrCreate()
)

а в какой момент вообще пакет catboost_spark появляется в runtime Python?
он устанавливается в pip во время spark = (SparkSessio...)?
источник

AU

Amir U in catboost_ru
Причем  с таким конфигом на Scala у меня завелось


scalaVersion := "2.12.0"
val sparkVersion = "3.0.1"

libraryDependencies ++= Seq(
 "ai.catboost" %% "catboost-spark" % "0.25-rc3"
)

libraryDependencies ++= Seq(
 "org.apache.spark" %% "spark-core" % sparkVersion,
 "org.apache.spark" %% "spark-sql" % sparkVersion,
 "org.apache.spark" %% "spark-mllib" % sparkVersion
)
источник

AK

Andrei Khropov in catboost_ru
Нет, тут мы без установки pip обошлись, все равно эти артефакты сильно связаны и python обертка использует код из jar и его зависимости maven, поэтому просто дистрибутируем один maven артефакт, а python-модуль лежит в нем и PySpark умеет добавлять его в PYTHONPATH если указать в spark.jars.packages.
источник