Использование pred_proba () вместо predic () в конвейере Neuraxle с OneVsRestClassifier - PullRequest
2 голосов
/ 11 июля 2020

Я пытаюсь настроить Neuraxle Pipeline , который использует sklearns OneVsRestClassifier ( OVR ).

Каждый действительный шаг в конвейере Neuraxle должен реализовывать fit() и transform() методы.

Чтобы использовать шаги конвейера sklearns, Neuraxle использует SKLearnWrapper , который отображает метод OVRs predict() на метод transform() SKLearnWrapper.

  1. Есть ли способ изменить это поведение так, чтобы метод predict_proba() отображался вместо метода OVRs transform()?

  2. Или есть другой способ получить рассчитанные вероятности?

1 Ответ

2 голосов
/ 20 июля 2020

Очень хороший вопрос!

У нас уже есть кое-что, чтобы решить эту проблему.

Предположим, вы запрограммировали такой класс:

class MyWrapper(BaseStep): 

    def transform(self, data_inputs): 
        return sigmoid(data_inputs)

    def predict_proba(self, data_inputs): 
        return data_inputs

Вы можете сделать следующее:

step = MyWrapper()

Затем, когда вы будете готовы заменить метод, используйте функцию Neuraxle mutate :

step = step.mutate(new_method='predict_proba', method_to_assign_to='transform')

И затем, когда .transform() будет вызывается, вместо этого будет вызван метод predict_proba. Мутация будет работать, даже если ваш step обернут (вложен) глубже в другие шаги.

Обратите внимание, что нам, вероятно, следует изменить оболочку sklearn, чтобы разрешить это. Я добавил здесь проблему: https://github.com/Neuraxio/Neuraxle/issues/368

Итак, пока эта проблема не будет устранена, вы можете сделать class MySKLearnWrapper(SKLearnWrapper): ... (унаследовав от SKLearnWrapper для его изменения) и определить predict_proba самостоятельно, как было предложено здесь: https://github.com/Neuraxio/Neuraxle/pull/363/files

...