Cross-validation


In [22]:
from sklearn.datasets import load_boston
boston = load_boston()

In [17]:
n = boston.data.shape[0]
n


Out[17]:
506

Novamente vamos utilizar o número de cômodos para prever o preço do imóvel:


In [23]:
X = boston.data[:,5].reshape(n,1)
y = boston.target

Resampling

  • O ato de gerar amostras a partir do conjunto de treinamento
  • Objetivo é gerar vários treinamentos diferentes e obter uma melhor estimativa do erro do classificador
    • O erro no treinamento difere bastante do erro no conjunto de teste
    • O erro de treinamento pode subestimar o erro de teste
    • Na validação cruzada (cross-validation) diversos conjuntos de treinamento produzem uma melhor estimativa do erro
  • Sklearn provê utilitários para cross-validation

K-Folds

  • O conjunto de treinamento é aleatoriamente dividido em $k$ grupos (folds)
  • São realizados $k$ treinamentos
    • Um fold é utilizado como conjunto de testes
    • Os demais utilizado como conjunto de treinamento
    • São produzidas $k$ valores para o MSE
      • MSE$_1$, MSE$_2$, MSE$_k$
    • Avalia-se o MSE médio

$\mathrm{CV}_{(k)} = \frac{1}{k} \sum_1^k \mathrm{MSE}_k$


In [32]:
from sklearn.linear_model import LinearRegression
from sklearn.cross_validation import cross_val_score
from sklearn.metrics import make_scorer, mean_squared_error

mse = make_scorer(mean_squared_error)

lreg = LinearRegression()

mse_k = cross_val_score(lreg, X, y, cv=10, scoring=mse)

In [33]:
print mse_k


[  15.07278041    5.17108482   10.83605923   64.0703056    18.06462415
   36.77467542    3.87142933  210.75611934  115.59452432   19.46695711]

In [34]:
print mse_k.mean()


49.9678559729