Делаем по аналогии с полиномиальной регрессии. Для этого сначала разберемся с тем, как работает полиномиальная регрессия.
Полиномиальная регрессия в scikit-learn реализуется путем применения препроцессинга preprocessing.PolynomialFeatures.
Что он делает?
Например, если у вас пространство признаков 2-мерное, то он к вашим данным в 2-х колонках Х1 и Х2 добавляет дополнительные колонки X1^2, X1*X2 и X2^2, если в preprocessing.PolynomialFeatures вы задали степень degree=2. То есть у вас увеличивается размерность пространства признаков.
Аналогично, если задали степень degree=3, то к колонкам X1 и X2 добавляет следующие 4 колонки 3-й степени: X1^3, X1^2 * X2, X1 * X2^2 и X2^3 и ещё 3 колонки 2-й степени: X1^2, X1*X2 и X2^2.
И т.д.
А затем, вы используете любую регрессионную модель из scikit-learn, которая вам подходит (линейная регрессия, решающее дерево, опорные вектора и т.д.)
В scikit-learn нет специального препроцессинга для создания дополнительных логарифмических колонок. Поэтому вы или сами создаете дополнительные нужные вам колонки "руками", или используйте пропроцессинг preprocessing.FunctionTransformer, в котором вы указываете нужную вам функцию для создания нужных дополнительных колонок.
Например, в одномерном случае логарифмическая линейная регрессия выглядит так:
y = a + b * ln(Х1)
Значит, колонку X1 заменяете на колонку ln(Х1) и делаете линейную регрессию. Если вы не хотите делать линейную регрессию, то можете с колонкой ln(X1) сделать любую другую регрессию.
Допустим, у вас 2-мерное пространство признаков с признаками: X1 и X2. А вы хотите сделать 6-мерное пространство признаков:
ln(X1), ln(X2), ln(X1)*ln(X2), ln(X1*X2), ln(X1)^2, ln(X2)^2
тогда в preprocessing.FunctionTransformer в качестве функции передаем, например, словарь, в котором в качестве значений вычисляются эти новые признаки.
После чего делаем ту регрессию, которая вам нужна на этих трансформированных данных.