从回归预测中引导置信区间

机器算法验证 回归 机器学习 自习 置信区间 引导程序
2022-02-09 09:45:41

对于家庭作业,我得到了数据来创建/训练一个使用 lasso 回归的预测器。我创建了预测器并使用 scikit learn 中的 lasso python 库对其进行训练。

所以现在我有了这个预测器,当给定的输入可以预测输出时。

第二个问题是“扩展您的预测器以使用自举方法报告预测的置信区间”。

我环顾四周,发现人们这样做是为了卑鄙和其他事情的例子。

但是我完全不知道我应该如何进行预测。我正在尝试使用scikit-bootstrap库。

课程工作人员的反应非常迟钝,因此感谢您提供任何帮助。谢谢你。

2个回答

引导是指通过替换重新采样您的数据。也就是说,不是将模型拟合到原始 X 和 y,而是将模型多次拟合到 X 和 y 的重新采样版本。

因此,您会得到 n 个略有不同的模型,可用于创建置信区间。这是这种间隔的视觉示例。

import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression

# Create toy data 
x = np.linspace(0, 10, 20)
y = x + (np.random.rand(len(x)) * 10)

# Extend x data to contain another row vector of 1s
X = np.vstack([x, np.ones(len(x))]).T

plt.figure(figsize=(12,8))
for i in range(0, 500):
    sample_index = np.random.choice(range(0, len(y)), len(y))

    X_samples = X[sample_index]
    y_samples = y[sample_index]    

    lr = LinearRegression()
    lr.fit(X_samples, y_samples)
    plt.plot(x, lr.predict(X), color='grey', alpha=0.2, zorder=1)

plt.scatter(x,y, marker='o', color='orange', zorder=4)

lr = LinearRegression()
lr.fit(X, y)
plt.plot(x, lr.predict(X), color='red', zorder=5)

在此处输入图像描述

如果您想将 scikit 的 API 用于代码的引导部分:

import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
from sklearn.ensemble import BaggingRegressor

# Create toy data 
x = np.linspace(0, 10, 20)
y = x + (np.random.rand(len(x)) * 10)

# Extend x data to contain another row vector of 1s
X = np.vstack([x, np.ones(len(x))]).T

n_estimators = 50
model = BaggingRegressor(LinearRegression(), 
                         n_estimators=n_estimators,
                         bootstrap=True)

model.fit(X, y)

plt.figure(figsize=(12,8))

# Accessing each base_estimator (already fitted)
for m in model.estimators_:
    plt.plot(x, m.predict(X), color='grey', alpha=0.2, zorder=1)

plt.scatter(x,y, marker='o', color='orange', zorder=4)

# "Bagging model" prediction
plt.plot(x, model.predict(X), color='red', zorder=5)