Interval kepercayaan bootstrap dari prediksi regresi

10

Untuk pekerjaan rumah, saya diberi data untuk membuat / melatih alat prediksi yang menggunakan regresi laso. Saya membuat prediktor dan melatihnya menggunakan pustaka laso python dari scikit belajar.

Jadi sekarang saya memiliki prediktor ini bahwa ketika input yang diberikan dapat memprediksi output.

Pertanyaan kedua adalah "Perpanjang prediksi Anda untuk melaporkan interval kepercayaan prediksi dengan menggunakan metode bootstrap."

Saya telah melihat sekeliling dan menemukan contoh orang yang melakukan ini untuk maksud dan hal-hal lain.

Tapi saya benar-benar bingung bagaimana saya seharusnya melakukannya untuk prediksi. Saya mencoba menggunakan perpustakaan scikit-bootstrap .

Staf kursus menjadi sangat tidak responsif, jadi bantuan apa pun dihargai. Terima kasih.

ituSLO
sumber
Saya tidak tahu bagaimana cara menggunakan Scikit tetapi jika hanya Scikit Anda tertarik maka Anda harus memindahkan pertanyaan ini ke StackOverflow. Yang sedang berkata, Anda harus ingat bahwa prediksi Anda adalah respons yang kejam dalam diri mereka sendiri. Apa yang akan Anda dapatkan melalui prosedur bootstrap adalah cara untuk memperkirakan distribusi respons yang berarti.
usεr11852
@ usεr11852 Saya terbatas hanya menggunakan scikit saat ini. Tetapi jika saya dapat memahami teori di balik interval kepercayaan bootstrap dari prediksi saya mungkin tidak memerlukan bantuan python. Misalnya, saya tidak yakin akan mengambil sampel dari mana, data yang saya gunakan untuk melatih prediktor atau prediksi? Saya benar-benar bingung tentang cara mengambil sampel karena satu prediksi terkait dengan hanya satu sampel yaitu serangkaian fitur tertentu.
itsSLO
1
Perhatikan bahwa berbicara tentang "interval kepercayaan prediksi" salah karena prediksi bukanlah parameter.
Michael M

Jawaban:

10

Bootstrap mengacu pada sampel ulang data Anda dengan penggantian. Artinya, alih-alih menyesuaikan model Anda dengan X asli dan y, Anda mencocokkan model Anda dengan versi X dan y yang di-resampling beberapa kali.

Dengan demikian, Anda mendapatkan n model yang sedikit berbeda yang dapat Anda gunakan untuk membuat interval kepercayaan. Berikut adalah contoh visual dari interval tersebut.

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)

masukkan deskripsi gambar di sini

Regenschein
sumber
8

Jika Anda ingin menggunakan API scikit untuk bagian bootstrap dari kode:

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)
Gustavo Woiler Rauscher
sumber
5
Meskipun implementasi sering dicampur dengan konten substantif dalam pertanyaan, kami seharusnya menjadi situs untuk menyediakan informasi tentang statistik, pembelajaran mesin, dll., Bukan kode. Mungkin baik untuk memberikan kode juga, tetapi tolong uraikan jawaban substantif Anda dalam teks untuk orang-orang yang tidak membaca bahasa ini dengan baik untuk mengenali & mengekstrak jawaban dari kode.
gung - Reinstate Monica