You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python循环合并与计算问题:为何仅能获取最后一个随机数对应的R2评分

Python循环合并与计算问题:为何仅能获取最后一个随机数对应的R2评分

嗨,我帮你找出问题所在啦!核心问题出在代码缩进和多余的循环上,导致你的模型训练逻辑只执行了最后一次:

问题分析

你写的第一个for _ in range(20):循环,只包含了生成随机数和打印随机数的代码,后面的数据集划分、模型训练、R2计算全部都在这个循环外面。这意味着程序会先跑完20次随机数生成(最后value变量只保留最后一个35),然后才执行一次模型训练和评分计算,自然只会输出最后一个数的结果。

另外,你写的for n in [value]:完全是多余的——[value]是只有一个元素的列表,这个循环只会执行一次,完全可以直接用value代替n。

修正后的代码

seed(4)

for _ in range(20):
    value = randint(0, 100)
    print(value, end=', ')
    # 直接用当前的value作为random_state,不需要额外循环
    X_train,X_test,y_train,y_test = train_test_split(df3_X1,df3_Y1, test_size=0.25, random_state=value)
    
    params = {'n_estimators': 500,
              'max_depth': 4,
              'min_samples_split': 5,
              'learning_rate': 0.01,
              'loss': 'ls'}
    
    estimators = [
        ('svr', make_pipeline(StandardScaler(),
                              SVR(kernel='rbf',C=0.6))),
        ('gb', GradientBoostingRegressor(random_state=0))
    ]
    
    stack = StackingRegressor(estimators=estimators,final_estimator= RandomForestRegressor(n_estimators=100,
                                                                                           random_state=0))
    Final_model = stack.fit(X_train, y_train)
    predictions = Final_model.predict(X_test)
    
    y_bar = y_test.mean()
    ss_tot = ((y_test-y_bar)**2).sum()
    ss_res = ((y_test-predictions)**2).sum()
    r2_score = 1 - (ss_res/ss_tot)
    
    print(f'{value} r2_score is {r2_score}')

print('The for loop is complete!')

修正说明

  1. 将模型训练、评分计算的所有代码缩进到第一个for循环内部,这样每生成一个随机数,就会立刻执行一次完整的模型训练和评分流程。
  2. 去掉了多余的for n in [value]:循环,直接用当前循环生成的value作为train_test_split的random_state参数。
  3. 调整了打印格式,让每个随机数和对应的R2评分对应得更清晰。

这样修改后,程序就会为每个生成的随机数计算并输出对应的R2评分啦!

备注:内容来源于stack exchange,提问作者Azar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.20 07:59:29