Scikit learn sklearn模型预测的优化(如随机森林回归器)

Scikit learn sklearn模型预测的优化(如随机森林回归器),scikit-learn,mathematical-optimization,pyomo,nonlinear-optimization,scipy-optimize,Scikit Learn,Mathematical Optimization,Pyomo,Nonlinear Optimization,Scipy Optimize,是否有人在模型上使用过任何优化模型 我想做的是根据列车数据拟合模型,并使用该模型尝试找到模型预测最大值的最佳参数组合 例如,简化代码: import pandas as pd df = pd.DataFrame({ 'temperature': [10, 15, 30, 20, 25, 30], 'working_hours': [10, 12, 12, 10, 30, 15], 'sales': [4, 7, 6, 7.3, 10, 8] }) from sklea

是否有人在模型上使用过任何优化模型

我想做的是根据列车数据拟合模型,并使用该模型尝试找到模型预测最大值的最佳参数组合

例如,简化代码:

import pandas as pd

df = pd.DataFrame({
    'temperature': [10, 15, 30, 20, 25, 30],
    'working_hours': [10, 12, 12, 10, 30, 15],
    'sales': [4, 7, 6, 7.3, 10, 8]
})

from sklearn.ensemble import RandomForestRegressor
model = RandomForestRegressor()
X = df.drop(['sales'], axis=1)
y = df['sales']
model.fit(X, y);
我们的基线是一个简单的循环,可以预测所有变量的组合:

results=pd.DataFrame(列=[‘温度’、‘工作时间’、‘销售预测’])
将numpy作为np导入
对于np.arange(1100.01,1)中的温度:
对于np.arange(1,60.01,1)的工作时间:
结果=pd.concat([
结果,
数据帧({
“温度”:温度,
“工作时间”:工作时间,
“预测的销售”:model.predict(np.array([temp,work\u hours])。重塑(1,-1))
}
)
]
)
打印(results.sort_值(按class='sales_predicted',升序=False))
使用这种方式很难或不可能: *快速完成(暴力方法) *实现关于两个或多个变量依赖关系的约束

我们尝试了纸浆库和PyOmo库,但两者都不允许将model.predict函数作为目标函数返回错误:

TypeError: float() argument must be a string or a number, not 'LpVariable'

有人知道我们如何摆脱循环并使用其他东西吗?

当人们谈论优化模型时,他们通常指的是最大限度地提高准确性/性能指标。因此,如果您试图最大化您的预测值,您肯定可以改进您的代码以更有效地实现它,如下所示

您将在一个大的
结果
数据帧中收集所有预测,然后按升序对其进行排序。相反,您可以使用简单的if逻辑,动态搜索目标变量(
sales\u predicted
)的增加。因此,只需将您的循环更改为:

max_sales_predicted = 0

for temp in np.arange(1, 100.01, 1):
    for work_hours in np.arange(1, 60.01, 1):
        sales_predicted = model.predict(np.array([temp, work_hours]).reshape(1, -1))
        if sales_predicted > max_sales_predicted:
            max_sales_predicted = sales_predicted
            desired_temp = temp
            desired_work_hours = work_hours
因此,您只能考虑任何产生超过当前目标的预测的规范,否则,什么也不做


我的代码结果与您的代码结果相同,即
max\u sales\u expected
值为
9.2
。另外,
desired_temp
desired_work_hours
现在为您提供产生该最大值的规范。希望这有帮助。

关键词是黑盒优化或无梯度优化。有太多的话要说,这不是真正的stackoverflow的东西。您的所有候选者都不适合这样做,因为他们所有的假设都是错误的(随机示例;未映射到这些候选者:可微、连续、凸)。在黑盒选择中有很多方法,贝叶斯,代理损失等等。。。但老实说:在您的用例中,网格搜索、随机搜索或一些基于bandit的随机搜索是非常有竞争力的。超参数优化将是谷歌的又一个关键词。上面的重点是“与暴力”的问题。如果您只想对网格搜索(循环)进行基于约束的过滤,那么在循环中很容易过滤掉(对于简单的事情),或者您可以使用sat解决方案/约束编程技术,其中至少前者在统一解决方案采样方面有很多理论。但这很快就进入了研究领域。