Size: a a a

2021 March 01

ЕП

Евгений Петров... in catboost_ru
Ivan Σ
Всем привет!

Подскажите, пожалуйста, как в катбусте реализовано распареллеливание обучения? Что именно параллелится?
В документации не нашел
есть только одна ручка — число потоков.
источник

SK

Stanislav Kirillov in catboost_ru
Почти каждую отдельную операцию можно распараллелить: расчет производных, сэмалирование, подсчет гистограм, скоров, расчет значений в листьях
источник

Ivan Σ in catboost_ru
Понял, спасибо.
источник

A

Alexandr in catboost_ru
а подскажите, пожалуйста  если я  хочу в классификации получить наибольший F1 score? Нужно задать eval_metric=‘F1’?
источник

SK

Stanislav Kirillov in catboost_ru
Да, и тогда модель обрежется до точки с лучшим f1 на тесте
источник

AK

Andrew Kolesnichenko in catboost_ru
привет
а верно ли я понял что в c++ api нельзя использовать мультикласс?
источник

SK

Stanislav Kirillov in catboost_ru
Во враппере?
источник

AK

Andrew Kolesnichenko in catboost_ru
ага
источник

SK

Stanislav Kirillov in catboost_ru
Да, там сейчас там для одномерного вектора предсказаний код, на эту задачу нашлись контрибьюторы
источник

AK

Andrew Kolesnichenko in catboost_ru
спасибо,
интересно а часто контрибьютеры что-то делают?
источник

AK

Andrew Kolesnichenko in catboost_ru
Stanislav Kirillov
Да, там сейчас там для одномерного вектора предсказаний код, на эту задачу нашлись контрибьюторы
я так понял что в C API есть?
источник

SK

Stanislav Kirillov in catboost_ru
Да, в этом апи можно
источник

AK

Andrew Kolesnichenko in catboost_ru
спасибо
источник
2021 March 02

SN

Sergey Novozhilov in catboost_ru
Здравствуйте!

Хочу сделать на Cython функцию потерь, к примеру эталонная logloss, из документации.
На Python она мееедленно работает,
на Cython получаю ошибку:

TypeError: Argument 'approxes' has incorrect type (expected numpy.ndarray, got _catboost._DoubleArrayWrapper)

Не подскажете, как импортировать тип из _catboost._DoubleArrayWrapper? или как передать параметры в функцию потерь на Cython?


# cython: language_level=3

import numpy as np
cimport numpy as np

# import _catboost
# cimport _catboost

cdef class LoglossObjective_cython(object):
   cpdef float calc_ders_range(
           self,
           # _catboost._DoubleArrayWrapper approxes,
           np.ndarray[np.float64_t, ndim=1, mode='c'] approxes,
           np.ndarray[np.float64_t, ndim=1, mode='c']  targets,
           np.ndarray[np.float64_t, ndim=1, mode='c']  weights):

       cdef np.ndarray[np.float64_t, ndim=1] e, p, der1, der2
       cdef np.float64_t result

       assert len(approxes) == len(targets)
       if weights is not None:
           assert len(weights) == len(approxes)

       e = np.exp(approxes)
       p = e / (1 + e)
       der1 = targets - p
       der2 = -p * (1 - p)

       if weights is not None:
           der1 *= weights
           der2 *= weights


       result = 0.5 # list(zip(der1, der2))
       return result
источник

SK

Stanislav Kirillov in catboost_ru
Sergey Novozhilov
Здравствуйте!

Хочу сделать на Cython функцию потерь, к примеру эталонная logloss, из документации.
На Python она мееедленно работает,
на Cython получаю ошибку:

TypeError: Argument 'approxes' has incorrect type (expected numpy.ndarray, got _catboost._DoubleArrayWrapper)

Не подскажете, как импортировать тип из _catboost._DoubleArrayWrapper? или как передать параметры в функцию потерь на Cython?


# cython: language_level=3

import numpy as np
cimport numpy as np

# import _catboost
# cimport _catboost

cdef class LoglossObjective_cython(object):
   cpdef float calc_ders_range(
           self,
           # _catboost._DoubleArrayWrapper approxes,
           np.ndarray[np.float64_t, ndim=1, mode='c'] approxes,
           np.ndarray[np.float64_t, ndim=1, mode='c']  targets,
           np.ndarray[np.float64_t, ndim=1, mode='c']  weights):

       cdef np.ndarray[np.float64_t, ndim=1] e, p, der1, der2
       cdef np.float64_t result

       assert len(approxes) == len(targets)
       if weights is not None:
           assert len(weights) == len(approxes)

       e = np.exp(approxes)
       p = e / (1 + e)
       der1 = targets - p
       der2 = -p * (1 - p)

       if weights is not None:
           der1 *= weights
           der2 *= weights


       result = 0.5 # list(zip(der1, der2))
       return result
Привет! Про это есть issue #398 и #1129, сейчас нашелся контрибьютор который это в течении месяца поправит. 👌
источник

L

L in catboost_ru
Привет. Подскажите, плз, как вернуть модель к конкретной итерации?
источник

SN

Sergey Novozhilov in catboost_ru
Stanislav Kirillov
Привет! Про это есть issue #398 и #1129, сейчас нашелся контрибьютор который это в течении месяца поправит. 👌
Спасибо. Если есть пример реализации на C++ такой функции потерь,  было бы здорово.
источник
2021 March 03

DU

Daniil Udimov in catboost_ru
Добрый вечер!
Не подскажете, хранит ли где-то модель список названий всех признаков?
У меня просто есть некоторые модели (в формате .cbm), которые учились кем-то когда-то. Хочу понять, к каким признакам они применяются.
Беру model.feature_names_ — получаю список длиной 94.
Беру model.get_feature_importances() — получаю список длиной 257.
При этом среди индексов из model.get_cat_feature_indices() присутствуют числа 253, 254. И в деревьях я вижу такие же индексы фичей. То есть фичей не 94, а 257.

Можно ли как-то достать названия тех, которые не вытаскиваются через model.feature_names_ ?
источник

ND

Nikita Dmitriev in catboost_ru
Daniil Udimov
Добрый вечер!
Не подскажете, хранит ли где-то модель список названий всех признаков?
У меня просто есть некоторые модели (в формате .cbm), которые учились кем-то когда-то. Хочу понять, к каким признакам они применяются.
Беру model.feature_names_ — получаю список длиной 94.
Беру model.get_feature_importances() — получаю список длиной 257.
При этом среди индексов из model.get_cat_feature_indices() присутствуют числа 253, 254. И в деревьях я вижу такие же индексы фичей. То есть фичей не 94, а 257.

Можно ли как-то достать названия тех, которые не вытаскиваются через model.feature_names_ ?
Привет!
Мы в старых моделях выкидывали информацию про фичи, которые не участвуют в деревьях
Можешь сказать, get_feature_importances тебе возвращает список из 257 ненулевых значений или там только 94 ненулевых?
источник

DU

Daniil Udimov in catboost_ru
Да, как раз 94 ненулевых. А можно как-то (может быть, не в питоне) достать из бинарной модели информацию о соответствии индексов и названий?
источник