回帰予測からの信頼区間のブートストラップ


10

宿題では、投げ縄回帰を使用する予測子を作成/トレーニングするためのデータが与えられました。予測子を作成し、scikit learnのlasso pythonライブラリを使用して予測子をトレーニングします。

だから今私は与えられた入力が出力を予測できるというこの予測因子を持っています。

2番目の質問は、「ブートストラップメソッドを使用して予測の信頼区間を報告するように予測子を拡張する」ことでした。

私は周りを見回して、平均や他のことのためにこれをしている人々の例を見つけました。

しかし、私は予測のためにそれを行うにはどうすればよいのか全くわからない。scikit-bootstrapライブラリを使用しようとしています。

コースのスタッフは非常に無反応なので、どんな助けでもありがたいです。ありがとうございました。


Scikitの使い方はわかりませんが、Scikitだけに興味がある場合は、この質問をStackOverflowに移動してください。とはいえ、予測はそれ自体が平均的な応答であることを覚えておく必要があります。ブートストラップ手順で得られるのは、その平均応答の分布を推定する方法です。
usεr11852

@usεr11852現時点では、scikitの使用に限定されています。しかし、予測の信頼区間のブートストラップの背後にある理論を理解できれば、Pythonのヘルプは必要ないかもしれません。たとえば、何からサンプリングするのか、1つまたは複数の予測子をトレーニングするために使用するデータがわかりません。1つの予測は1つのサンプル、つまり特定の機能セットにのみ関連しているため、サンプリングの方法について本当に混乱しています。
itsSLO 2015年

1
予測はパラメータではないため、「予測の信頼区間」について話すのは間違っていることに注意してください。
マイケルM

回答:


10

ブートストラップとは、データを置き換えてリサンプリングすることを指します。つまり、モデルを元の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)

ここに画像の説明を入力してください


8

コードのブートストラップ部分に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)

5
多くの場合、実装は問題の実質的なコンテンツと混合されますが、私たちはコードではなく、統計や機械学習などに関する情報を提供するサイトになるはずです。コードも提供するのは良いことですが、この言語を十分に理解していないため、コードから回答を認​​識して抽出するために、具体的な回答をテキストで詳しく説明してください。
ガン-モニカの復活
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.