Я хочу создать собственные классы Splitter
и DecisionTreeRegressor
, которые будут использоваться с RandomForestRegressor
в sklearn. Однако класс Splitter
написан на Cython. В репозитории sklearn GitHub есть два файла-разделителя, один pxd
и один pyd
: https://github.com/scikit-learn/scikit-learn/tree/fd237278e895b42abe8d8d09105cbb82dc2cbba7/sklearn/tree
То, что я читал о Cython, указывает на то, что требуется этап ручной компиляции для использования кода Cython, но я бы подумал (или надеюсь), что смогу просто вручную отредактировать файлы _splitter.pxd
и _splitter.pyd
, поскольку именно так они выложены в репозитории GitHub, и я, очевидно, ничего не компилирую, когда использую sklearn. Однако при попытке сделать это в macOS я получаю пару ошибок.
Используя Spyder IDE, я получаю неверную синтаксическую ошибку из этой строки в _splitter.pxd
, когда пытаюсь сделать копию этого файла. и импортировать мою скопированную версию, а не версию sklearn:
cimport numpy as np
Опять же, эта строка идентична оператору cimport
в _splitter.pxd
в sklearn: https://github.com/scikit-learn/scikit-learn/blob/fd237278e895b42abe8d8d09105cbb82dc2cbba7/sklearn/tree/_splitter.pxd
Кроме того, при попытке импортировать файл разделителя путем зеркалирования импорта в sklearn я получаю сообщение об ошибке No module named...
:
import sklearn_custom.tree._splitter
Я дважды проверил, что это проблема не только со Spyder. запустил его в командной строке и по-прежнему получил ошибку.
Итак, мне интересно, что python / sklearn делают за кулисами, что позволяет коду Cython работать как есть и без компиляции или любого из Cython- Speci c импорт из инструкций Cython (https://cython.readthedocs.io/en/latest/src/tutorial/cython_tutorial.html). Неизбежна ли компиляция, если я хочу написать собственный Cython для использования со sklearn? Если да, то что именно мне делать с существующими файлами pyx
и pxd
(в основном последними, поскольку в инструкциях Cython не упоминается pxd
, а файл pxd
не импортируется в файл pyx
), которые уже существуют для sklearn?