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