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

如何计算Bagging回归器中各模型残差的逐点标准差

问题:Bagging回归器逐点残差标准差计算困惑

我需要对Bagging回归模型的残差做分析,目标是识别出每日置信区间外的极端残差,但卡在了计算每个基模型的逐点残差标准差这一步。

我的示例代码如下:

import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.svm import SVR
from sklearn.ensemble import BaggingRegressor
import datetime

# Sample DataFrame
df = pd.DataFrame(np.random.randint(0,200,size=(500, 4)), columns=list('ABCD'))

# Add dates to sample data
base = datetime.datetime.today()
date_list = [base - datetime.timedelta(days=x) for x in range(500)]
df['date'] = date_list
df['date'] = df['date'].astype('str')

# Split dataset into testing and training
train = df[:int(len(df)*0.80)]
test = df[int(len(df)*0.20):]

X_train = train[['B','C','D','date']]
X_test = test[['B','C','D','date']]

y_train = train[['A']]
y_test = test[['A']]

# Function to Encode the data
def encode_and_bind(data_in, feature_to_encode):
    dummies = pd.get_dummies(data_in[[feature_to_encode]])
    data_out = pd.concat([data_in, dummies], axis=1)
    data_out = data_out.drop([feature_to_encode], axis=1)
    return(data_out)

features_to_encode = ['date']
for feature in features_to_encode:
  X_train_final = encode_and_bind(X_train, 'date') 
  X_test_final = encode_and_bind(X_test, 'date')

# Define Model
svr_lin = SVR(kernel="linear", C=100, gamma="auto")
regr = BaggingRegressor(base_estimator=svr_lin,random_state=5).fit(X_train_final, y_train.values.ravel())

# Predictions
y_pred = regr.predict(X_test_final)

# Join the predictions back into original dataframe
y_test['predict'] = y_pred

# Calculate residuals
y_test['residuals'] = y_test['A'] - y_test['predict']

我在网上查到一种获取基模型预测的写法:

raw_pred = [x.predict([[0, 0, 0, 0]]) for x in regr.estimators_]

但我的特征数量远不止4个,不知道该怎么替换[[0, 0, 0, 0]]这部分。


编辑尝试

后来参考了@2MuchC0ff33的回答,我试了下面的代码:

stdevs = []

for dates in X_test_final.columns[3:]:
  test = X_test_final[X_test_final[dates]==1]
  raw_pred = [x.predict([test.iloc[0]]) for x in regr.estimators_]

  dates= dates
  sdev= np.std(raw_pred)
  sdev = sdev.astype('str')
  stdevs.append(dates + "," + sdev)

看起来好像能运行,但我对这个计算逻辑的正确性没把握,不确定是不是符合“逐点计算残差标准差”的需求。


内容的提问来源于stack exchange,提问作者Rbc.F

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 23:50:23