8 votos

la comparación de la OPERACIÓN, de la cadena y lazo

Estoy tratando de comparar NSR, cresta y lazo en mi situación. Yo podría calcular SE para de NSR y el lazo, pero no para ridge. El siguiente es Prostrate datos de lasso2 paquete.

require(lasso2)
require(MASS)
data(Prostate)

fit.lm = lm(lpsa~.,data=Prostate)
summary(fit.lm)$coefficients
               Estimate  Std. Error    t value     Pr(>|t|)
(Intercept)  0.669399027 1.296381277  0.5163597 6.068984e-01
lcavol       0.587022881 0.087920374  6.6767560 2.110634e-09
lweight      0.454460641 0.170012071  2.6731081 8.956206e-03
age         -0.019637208 0.011172743 -1.7575995 8.229321e-02
lbph         0.107054351 0.058449332  1.8315753 7.039819e-02
svi          0.766155885 0.244309492  3.1360054 2.328823e-03
lcp         -0.105473570 0.091013484 -1.1588785 2.496408e-01
gleason      0.045135964 0.157464467  0.2866422 7.750601e-01
pgg45        0.004525324 0.004421185  1.0235545 3.088513e-01

fit.rd = lm.ridge(lpsa~.,data=Prostate, lamda = 6.0012)
#summary(fit.rd)$coefficients, doesnot provide SE 

lfit = l1ce(lpsa~.,data=Prostate,bound=(1:500)/500)
summary(lfit[[10]])$coefficients
                 Value  Std. Error   Z score  Pr(>|Z|)
(Intercept) 2.43614448 2.130515543 1.1434530 0.2528505
lcavol      0.03129045 0.125288320 0.2497475 0.8027826
lweight     0.00000000 0.274549270 0.0000000 1.0000000
age         0.00000000 0.018287840 0.0000000 1.0000000
lbph        0.00000000 0.095587974 0.0000000 1.0000000
svi         0.00000000 0.390936045 0.0000000 1.0000000
lcp         0.00000000 0.149824868 0.0000000 1.0000000
gleason     0.00000000 0.260274039 0.0000000 1.0000000
pgg45       0.00000000 0.007285054 0.0000000 1.0000000

Tengo un par de preguntas:

(1) ¿Cómo podemos calcular Sexual. Error, en el caso de la regresión ridge ?

(2) Es válida para comparar Sexual. Error para decidir qué (ridge, lasso o OLS) método utilizar ? O hay otros métodos ? Si es así, cómo puedo conseguirlo ?

8voto

frast Puntos 1907

Ya que el objetivo es la predicción puede elegir alguna medida de distancia y, a continuación, calcular la distancia entre sus predicciones $\hat{Y}$ y los verdaderos valores de $Y$, la elección del método con la distancia mínima. El más común de medición de distancia para esta configuración es el error cuadrático medio: MSE = $\sum_{i=1}^n (\hat{Y_i} - Y_i)$. La parte más difícil es elegir adecuadamente su formación y conjuntos de prueba y, a continuación, realizar el modelo de procedimiento de selección requeridos por el Lazo y la Cresta de regularización.

En primer lugar, dividir los datos en dos partes: la formación $X_{training}$ y las pruebas de $X_{testing}$. Una opción común es de un 66% de la formación, el 34% de las pruebas, pero la elección de la proporción está influenciada por el tamaño de su conjunto de datos. Ahora olvídate de el conjunto de pruebas por un tiempo. El tren, o el ajuste, los tres modelos utilizando sólo los datos de entrenamiento. Selección de modelo para el parámetro de regularización $\lambda$ debe ser elegido a través de la validación cruzada ya que la predicción es su objetivo. Finalmente, utilizando la mejor $\lambda$, realizar la predicción de los datos de las pruebas para obtener los valores de $\hat{Y}$. No he usado el Lasso2 o MASS implementaciones de regularización de la regresión, pero el glmnet paquete hace que el proceso es muy sencillo, ya que proporciona una cruz-validatiion función. He aquí algunos R código para hacer esto en la Prostate datos de:

require(glmnet)
data(Prostate, package = "lasso2")
## Split into training and test
n_obs = dim(Prostate)[1]
proportion_split = 0.66
train_index = sample(1:n_obs, round(n_obs * proportion_split))
y = Prostate$lpsa
X = as.matrix(Prostate[setdiff(colnames(Prostate), "lpsa")])
Xtr = X[train_index,]
Xte = X[-train_index,]
ytr = y[train_index]
yte = y[-train_index]
## Train models
ols = lm(ytr ~ Xtr)
lasso = cv.glmnet(Xtr, ytr, alpha = 1)
ridge = cv.glmnet(Xtr, ytr, alpha = 0)
## Test models
y_hat_ols = cbind(rep(1, n_obs - length(train_index)), Xte) %*% coef(ols)
y_hat_lasso = predict(lasso, Xte)
y_hat_ridge = predict(ridge, Xte)
## compare
sum((yte - y_hat_ols)^2)
sum((yte - y_hat_lasso)^2)
sum((yte - y_hat_ridge)^2)

Tenga en cuenta que el sample() función elige aleatoriamente de las filas de la formación y pruebas, de manera que el MSE va a cambiar cada vez que se ejecute. Y puesto que el Prostate de datos es realmente sólo se entiende como una manifestación del conjunto de datos, sin un claro ganador es probable que surjan.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X