Я уже спрашивал об этой проблеме ранее в stackoverflow и мог успешно использовать модель линейной регрессии в качестве целевой функции для оптимизации. Однако это было легко сделать, поскольку я мог получить доступ к коэффициентам и перехвату модели и сформировать уравнение линейной регрессии. Теперь вопрос в том, как это можно сделать, если модель представляет собой случайный лес? Можно ли вообще использовать такую модель машинного обучения в качестве целевой функции в задаче оптимизации?
Я установил проблему как:
model_problem = pulp.LpProblem("Minimize the value", pulp.LpMinimize)
Затем я использую набор данных входов (Pandas DataFrame) для формирования переменных:
V = []
for i in range(df_in.shape[1]):
v = pulp.LpVariable(df_in.columns[i],lowBound=range_min[i],upBound=range_max[i])
V.append(v)
, в котором range_min
и range_max
- это два списка, которые определяют границы для входных переменных. df_in.columns
предоставляет имена переменных.
На данный момент я пытаюсь определить свою целевую функцию. Что я знаю, так это то, что если бы у меня была линейная функция, такая как: y = 2*X + 3
в качестве целевой функции, я мог бы сделать:
model_problem += 2*X + 3
, а затем добавьте ограничения также. Но единственный возможный способ, который приходит мне в голову, когда дело касается обученной модели машинного обучения, это:
def objective(V):
return M.predict(V)
, в котором V
- это список переменных, которые будут переданы в модель машинного обучения. а затем:
model_problem += objective(V)
Однако все это не работает. Самой проблемой, с которой я сталкиваюсь, является тот факт, что я могу только подавать фактические значения с плавающей точкой в модель ML и не могу использовать ее для установки целевой функции. По крайней мере, я не знаю как, и я надеюсь, что вы сможете немного помочь.
Я использую Pulp
для процесса оптимизации, но я также открыт для других вариантов. Я пытался использовать ту же стратегию с Scipy.optimize.minimize
, но я мог использовать только метод COBYLA
, в котором нельзя применять ограничения или ограничения.