Как я могу использовать обученную модель машинного обучения в качестве функции objectve для задачи оптимизации в Pulp? - PullRequest
0 голосов
/ 04 июня 2019

Я уже спрашивал об этой проблеме ранее в 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, в котором нельзя применять ограничения или ограничения.

...