如何使用训练有素的机器学习模型作为针对Pulp优化问题的目标函数?

时间:2019-06-04 14:28:24

标签: python python-3.x machine-learning optimization pulp

我之前在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_minrange_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)

但是,所有这些都不起作用。我面临的唯一问题是,我只能将实际的float值提供给ML模型,而不能使用它来设置目标函数。至少我不知道该如何做,我希望您能有所帮助。 我在优化过程中使用了Pulp,但是我也接受其他选择。我尝试对Scipy.optimize.minimize使用相同的策略,但是我只能使用COBYLA方法,在该方法中您无法强制执行约束或界限。

0 个答案:

没有答案