Как создать диапазон значений с плавающей точкой в ​​Python? - PullRequest
0 голосов
/ 18 октября 2019

Я пытаюсь сделать несколько циклов внутри друг друга с условием x + y + z должно быть равно 1, чтобы войти в последний цикл.

Я использовал следующее:

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)

Но даже если сумма была больше 1, она войдет в цикл. Некоторые значения (xgb, reg и gbr) похожи на 0.70000001.

Поэтому я попытался использовать linspace, но он не работал с плавающими. Поэтому я попробовал диапазон:

for gbrCount in range(0, 1):
    gbrCount += 0.1
    for xgbCount in range(0, 1):
        xgbCount += 0.1
        for regCount in range(0, 1):
            regCount += 0.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 = (xgbCount*xgb.predict(dataset)+ gbrCount*gbr.predict(dataset)+regCount*regressor.predict(dataset))
                y_train_p = np.expm1(y_train_p)
#                print(np.sqrt(mean_squared_error(y, y_train_p)))
#                print(xgbCount)
#                print(gbrCount)
#                print(regCount)
                print(xgbCount,  gbrCount, regCount, np.sqrt(mean_squared_error(y, y_train_p)))

Но он не работал без ошибок на консоли.

1 Ответ

2 голосов
/ 18 октября 2019

А как насчет этого? (Я не думаю, что последнее округление необходимо, но просто чтобы быть в безопасности, я оставил его там.)

    import numpy as np
    for _gbrCount in np.arange(0, 1.0, 0.1):
        for _xgbCount in np.arange(0, 1.0, 0.1):
            gbrCount = np.round(_gbrCounr, decimals=1)
            xgbCount = np.round(_cgbCount, decimals=1)
            regCount = np.round(1 - gbrCount - xgbCount, decimals=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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...