首页 > 解决方案 > 如何在python中循环三个变量,而它们的总和总是等于1?

问题描述

我是 Python 新手,我需要迭代 3 个主要变量来检查人工智能模型中的最佳平均误差。

这 3 个模型是:梯度增强器、随机森林和 XGBooster。

每个模型都分别拟合数据。最后我需要将它们组合起来,但迭代很累,因为要进行 27 次迭代。

方程如下:

y_predict = x gradientBossterPredict + y randomForest + z*XGBooster

在哪里

  1. x、y 和 z 介于 0 和 1 之间(每一个都以 0.1 作为步长)
  2. x + y + z 应始终等于 1

我尝试了以下方法:

rmse = []
for (gbrCount in np.arange(0, 1.0, 0.1)):
    for(xgbCount in np.arange(0, 1.0, 0.1)):
        for(regCount in np.arange(0, 1.0, 0.1)):
            y_p = (xgbCount*xgb.predict(testset)+ gbrCount*gbr.predict(testset)+regCount*regressor.predict(testset))
            testset['SalePrice']=np.expm1(y_p)
            y_train_p = xgb.predict(dataset)
            y_train_p = np.expm1(y_train_p)
            rmse.append(np.sqrt(mean_squared_error(y, y_train_p)))
            rmse.append(xgbCount)
            rmse.append(gbrCount)
            rmse.append(regCount)

但我收到以下错误:

SyntaxError:在 np.arange(0, 1.0, 0.1) 中解析 gbrCount 时出现意外 EOF:

标签: pythonmachine-learning

解决方案


这只是一个 Python 语法错误。省略此行中的括号:

for gbrCount in np.arange(0, 1.0, 0.1):

以及其他for行。

这将解决你所说的问题。但还要注意,在arange文档中,linspace如果您想使用非整数步长参数,则应该使用。

至于使总和相等1

你已经有了 if int(gbrCount+xgbCount+regCount) == 1:这行不通吗?如果不是,请注意浮点数并不精确,因此看起来应该是的1.0实际上可能是 0.9999,因此int()给出0. 您应该使用 linspaceor else usenp.arange(0, 10 , 1)以便一切都是整数(在循环内,将每个值除以10)。


推荐阅读