Это можно сделать, но не очень разумно.
Дерево принятия решений в sklearn написано в Cython (гибрид C++ и Python) и использует предопределенный список критериев разделения Cython. Это делает sklearn деревья очень быстрыми, но не легко настраиваемыми.
Если вы пишете свои собственные листья и сплиттер в чистом Python, вам придется интегрировать их с кодом Sklearn Cython. Это возможно, но может быть долгим и тяжелым. И, в конце концов, у вас будет медленный код, потому что он вызовет Python из C++ на каждом узле. Таким образом, вам было бы дешевле написать алгоритм построения дерева с нуля.
Если вы очень серьезно относитесь к своим усилиям, вы можете написать листья и сплиттер в Cython, чтобы сделать его легко интегрируемым с scikit-learn и столь же быстрым. Но это решение не будет таким обычным, потому что вы не сможете добавить еще одну модель листа из Python.
Если вы хотите быстро попробовать такую модель, вы можете использовать алгоритм M5 в Weka.
И если вы спросите мое мнение, я почти не понимаю, почему вы можете добавить более сложные модели в каждый лист случайного леса - он уже достаточно сложный.