Вы можете написать свою собственную функцию стоимости и минимизировать вызов.Помните, что нет никаких ограничений на minimize
, поэтому вы можете добавить некоторые из них к тому, что я здесь показываю:
import numpy as np
from sklearn.metrics import mean_squared_log_error
from scipy.optimize import minimize
a = np.array([1, 2, 3])
b = np.array([100, 200, 300])
Итак, вот модель, которую я хочу изучить (т.е.регрессор):
def fun(x):
return a*x
Теперь вот моя функция стоимости:
def cost(x):
return mean_squared_log_error(b, fun(x))
И теперь я могу оптимизировать ее:
print(minimize(cost, x0=[1]))
Знайте, что я нездесь нет градиента, поэтому он может быть медленным (или использовать числовые различия IIRC с некоторыми оптимизаторами).