Intervalo de confiança de inicialização de uma previsão de regressão

10

Para trabalhos de casa, recebi dados para criar / treinar um preditor que usa regressão do laço. Crio o preditor e o treino usando a biblioteca lasso python do scikit learn.

Então agora eu tenho esse preditor que, quando recebida, pode prever a saída.

A segunda pergunta foi "Estenda seu preditor para relatar o intervalo de confiança da previsão usando o método de inicialização".

Eu olhei em volta e encontrei exemplos de pessoas fazendo isso pela má e outras coisas.

Mas estou completamente perdido em como devo fazê-lo para uma previsão. Estou tentando usar a biblioteca scikit-bootstrap .

A equipe do curso está sendo extremamente indiferente, então qualquer ajuda é apreciada. Obrigado.

itsSLO
fonte
Eu não sei como usar o Scikit, mas se é apenas do Scikit que você está interessado, você deve mover esta pergunta para o StackOverflow. Dito isto, você deve lembrar que suas previsões são uma resposta mesquinha em si mesmas. O que você obterá com o procedimento de inicialização é uma maneira de estimar a distribuição dessa resposta média.
usεr11852
@ usεr11852 No momento, estou limitado a usar o scikit. Mas, se eu consigo entender a teoria por trás do intervalo de confiança do bootstrapping das previsões, talvez não precise de nenhuma ajuda do python. Por exemplo, não tenho certeza do que vou amostrar, os dados nos quais uso para treinar o preditor ou as previsões? Estou realmente confuso sobre como amostrar, porque uma previsão está relacionada a apenas uma amostra, ou seja, um conjunto específico de recursos.
itsSLO
1
Observe que é errado falar de um "intervalo de confiança da previsão" porque uma previsão não é um parâmetro.
18716 Michael M

Respostas:

10

Bootstrapping refere-se a reamostrar seus dados com substituição. Ou seja, em vez de ajustar seu modelo aos X e y originais, você o adapta às versões reamostradas de X e y várias vezes.

Assim, você obtém n modelos ligeiramente diferentes que podem ser usados ​​para criar um intervalo de confiança. Aqui está um exemplo visual desse intervalo.

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)

insira a descrição da imagem aqui

Regenschein
fonte
8

Se você deseja usar a API do scikit para a parte do código de inicialização:

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
fonte
5
Embora a implementação seja frequentemente misturada com conteúdo substantivo em perguntas, devemos ser um site para fornecer informações sobre estatísticas, aprendizado de máquina etc., não sobre código. Também pode ser bom fornecer código, mas elabore sua resposta substantiva em texto para pessoas que não leem esse idioma o suficiente para reconhecer e extrair a resposta do código.
gung - Restabelece Monica