python - 如何在python中循环三个变量,而它们的总和总是等于1?
问题描述
我是 Python 新手,我需要迭代 3 个主要变量来检查人工智能模型中的最佳平均误差。
这 3 个模型是:梯度增强器、随机森林和 XGBooster。
每个模型都分别拟合数据。最后我需要将它们组合起来,但迭代很累,因为要进行 27 次迭代。
方程如下:
y_predict = x gradientBossterPredict + y randomForest + z*XGBooster
在哪里
- x、y 和 z 介于 0 和 1 之间(每一个都以 0.1 作为步长)
- 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:
解决方案
这只是一个 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
. 您应该使用 linspace
or else usenp.arange(0, 10 , 1)
以便一切都是整数(在循环内,将每个值除以10
)。
推荐阅读
- ruby-on-rails - ActiveRecord::StatementInvalid, PG::UndefinedTable 错误,但生成的 SQL 有效
- javascript - 将 Htmlwebpackplugin 与 Webpack-Dev-Middleware 一起使用
- javascript - 即使存在,也无法选择网页上的元素
- c++ - 使用联合和标签
- c++ - 进程结束后的 DLL 支持
- javascript - 我使用 JavaScript 构建的自定义画廊过滤导致页面崩溃。我的代码的哪一部分可能导致它?
- ios - Swift无法识别的选择器发送到实例
- oracle - 检查功能是否启用 Oracle 12g 12.2
- amazon-web-services - 将现有目录移动到 AWS (Red Hat) 中的新 EBS 卷
- javascript - jQuery UI - JS 生成的 HTML 上的表 tbody 不可排序()(npm webpack 应用程序)