如何在python中循环三个变量,而它们的和总是等于1?

2024-09-28 19:07:37 发布

您现在位置:Python中文网/ 问答频道 /正文

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

这三种模型是:梯度助推器,随机森林和XGBooster。你知道吗

每个模型分别与数据拟合。最后,我需要集成它们,但是迭代很累,因为要进行27次迭代。你知道吗

公式如下:

y\u predict=x梯度bossterpredict+y随机森林+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: unexpected EOF while parsing for gbrCount in np.arange(0, 1.0, 0.1):


Tags: in模型fornp森林trainpredict梯度
3条回答

请按以下方式编码。你知道吗

np.linspace(0,1,11)

或者

np.arange(0.0, 1.0, 0.1)

或者

numpy.arange(1, 1.0, 0.1)

这只是一个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或者使用np.arange(0, 10 , 1),这样所有内容都是整数(在循环中,每个值除以10)。你知道吗

您的代码可以很好地使用以下for循环语法:

import numpy as np
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)

对于sum always=1 in loop,请查看以下内容:

import numpy as np
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):
            #check if sum is 1
            if int(gbrCount+xgbCount+regCount) == 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)

对于同一行中的每个结果,而不是每个值:

import numpy as np
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):
            #check if sum is 1
            if int(gbrCount+xgbCount+regCount) == 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)), xgbCount, gbrCount, regCount ])

相关问题 更多 >