【问题标题】:Python optimization of prediction of random forest regressor随机森林回归器预测的Python优化
【发布时间】:2021-11-20 14:31:52
【问题描述】:

我构建了一个随机森林回归器,根据颜色、材质、大小等特征来预测某个物体的弹性。

模型运行良好,我可以预测给定特定输入的预期弹性。

最终,我希望能够找到具有某些约束的最低弹性。输入的可能性有限,即材料只能是塑料或纺织品。

我希望有一个聪明的解决方案,我不必强行尝试所有可能的组合并找到弹性最低的组合。我发现可以为此使用代理模型,但我不明白如何将这个概念应用于我的问题。例如,我应该优化的目标函数是什么?我想过通过随机森林的.predict(),但我不确定这是不是正确的方法。

总而言之,我想有一个解决方案,在特定条件下,告诉我什么应该是具有最低弹性的最佳功能集。例如,当物体由塑料制成时,我正在寻找最低的弹性 --> 我想收到一组其他功能,告诉我在这种情况下如何获得最低的弹性。或者简单地说,我应该调整哪些功能来提高性能

import numpy
from scipy.optimize import minimize
import random
from sklearn.ensemble import RandomForestRegressor

model = RandomForestRegressor(n_estimators=10, random_state=0)

model.fit(X_train,y_train)

material = [0,1]
size= list(range(1, 45))
color= list(range(1, 500))


def objective(x):
    
    material= x[0]
    size = x[1]
    color = x[2]
   
    return model.predict([[material,size,color]])

# initial guesses
n = 3
x0 = np.zeros(n)
x0[0] = random.choice(material)
x0[1] = random.choice(size)
x0[2] = random.choice(color)

# optimize
b = (None,None)
bnds = (b, b, b, b, b)
solution = minimize(objective, x0, method='nelder-mead',
                options={'xtol': 1e-8, 'disp': True})

x = solution.x

print('Final Objective: ' + str(objective(x)))

【问题讨论】:

    标签: python machine-learning optimization random-forest


    【解决方案1】:

    如果我理解正确,这是一种解决方案,

    import numpy as np
    from sklearn.ensemble import RandomForestRegressor
    from scipy.optimize import differential_evolution
    
    model = None
    
    def objective(x):
    
        material= x[0]
        size = x[1]
        color = x[2]
        
        return model.predict([[material,size,color]])
    
    # define input data
    material = np.random.choice([0,1], 10);  material = np.expand_dims(material, 1)
    size     = np.arange(10);                size = np.expand_dims(size, 1)
    color    = np.arange(20, 30);            color = np.expand_dims(color, 1)
    
    input = np.concatenate((material, size, color), 1)  # shape = (10, 3)
    
    # define output = elasticity between [0, 1] i.e. 0-100%
    elasticity = np.array([0.51135295, 0.54830051, 0.42198349, 0.72614775, 0.55087905,
                           0.99819945, 0.3175208 , 0.78232872, 0.11621277, 0.32219236])
    
    # model and minimize
    model = RandomForestRegressor(n_estimators=100, random_state=0)
    model.fit(input, elasticity)
    
    limits = ((0, 1), (0, 10), (20, 30))
    
    res = differential_evolution(objective, limits, maxiter = 10000, seed = 11111)
    
    min_y = model.predict([res.x])[0]
    print("min_elasticity ==", round(min_y, 5))
    

    输出是基于限制的最小弹性

    min_elasticity == 0.19029
    

    这些是随机数据,因此 RandomForestRegressor 可能做得不好

    【讨论】:

      猜你喜欢
      • 2020-10-15
      • 2020-12-05
      • 2014-08-07
      • 2013-05-06
      • 2019-12-06
      • 2020-07-06
      • 2021-10-10
      • 2023-01-02
      相关资源
      最近更新 更多