我有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
答案 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