嵌套循环的递归替代方法

时间:2019-11-13 19:40:56

标签: python loops recursion scikit-learn nested

我有4个不同的sklearn回归变量,我想使用每个预测的百分比来构建最终预测。

我的想法是循环浏览每个可能的版本,并使用每个预测的百分比作为答案来计算RMSE,即

reg1.predict(X_test) * 0.2  + reg2.predict(X_test) * 0.3 * reg3.predict(X_test) * 0.3  * reg4.predict(X_test) * 0.2  

我目前有以下内容,但是我知道有一种更清洁的方法,如果需要的话,我还可以在其中轻松添加更多的回归值...但是我无法理解吗?我很确定我需要递归函数吗?但是也许我错了?

有任何想法/帮助吗?

step = 0.05
for x in np.arange(0,1,step):
    for y in np.arange(0,1,step):
        for z in np.arange(0,1,step):
            for p in np.arange(0,1,step):
                if round(x,2)+round(y,2)+round(z,2)+round(p,2) == 1:
                    print(f"x = {round(x,2)} y = {round(y,2)} z = {round(z,2)} p = {round(p,2)}")
                    ## RMSE calculation code goes, if best store X,Y,Z,P

3 个答案:

答案 0 :(得分:2)

您本身并不需要递归;您对四个范围的产品感兴趣。

from itertools import product

for x, y, z, p in product(np.arange(0,1,step), repeat=4):
    ...

答案 1 :(得分:1)

您可以使用递归函数,但可以尝试itertools.product

答案 2 :(得分:1)

我认为您想要笛卡尔积,对吗?因此,您可以像这样使用itertools.product

str(res %>% select(id, df))
#> Classes 'tbl_df', 'tbl' and 'data.frame':    2 obs. of  2 variables:
#>  $ id: num  1 3
#>  $ df:List of 2
#>   ..$ :Classes 'tbl_df', 'tbl' and 'data.frame': 2 obs. of  2 variables:
#>   .. ..$ A: chr  "1" "11"
#>   .. ..$ B: chr  "2" "12"
#>   ..$ :Classes 'tbl_df', 'tbl' and 'data.frame': 2 obs. of  3 variables:
#>   .. ..$ C: chr  "6" "16"
#>   .. ..$ D: chr  "7" NA
#>   .. ..$ E: chr  "8" NA