Eu tenho um conjunto de dados com 338 preditores e 570 instâncias (infelizmente não é possível carregar) no qual estou usando o Lasso para executar a seleção de recursos. Em particular, estou usando a cv.glmnet
função da glmnet
seguinte maneira, onde mydata_matrix
é uma matriz binária de 570 x 339 e a saída também é binária:
library(glmnet)
x_dat <- mydata_matrix[, -ncol(mydata_matrix)]
y <- mydata_matrix[, ncol(mydata_matrix)]
cvfit <- cv.glmnet(x_dat, y, family='binomial')
Esse gráfico mostra que o menor desvio ocorre quando todas as variáveis foram removidas do modelo. Isso realmente está dizendo que apenas o uso da interceptação é mais preditivo do resultado do que usar apenas um único preditor ou cometi um erro, possivelmente nos dados ou na chamada de função?
Isso é semelhante a uma pergunta anterior , mas não obteve nenhuma resposta.
plot(cvfit)
r
classification
lasso
glmnet
Stuart Lacy
fonte
fonte
Respostas:
Eu não acho que você cometeu um erro no código. É uma questão de interpretar a saída.
O Lasso não indica quais regressores individuais são "mais preditivos" que outros. Ele simplesmente tem uma tendência interna de estimar coeficientes como zero. Quanto maior o coeficiente de penalidade , maior é essa tendência.registro( λ )
Seu gráfico de validação cruzada mostra que, à medida que mais e mais coeficientes são forçados a zero, o modelo realiza um trabalho cada vez melhor de prever subconjuntos de valores que foram removidos aleatoriamente do conjunto de dados. Quando os melhores erros de previsão com validação cruzada (medidos como o "Desvio Binomial" aqui) são alcançados quando todos os coeficientes são zero, você deve suspeitar que nenhuma combinação linear de qualquer subconjunto dos regressores possa ser útil para prever os resultados.
Você pode verificar isso gerando respostas aleatórias que são independentes de todos os regressores e aplicando seu procedimento de ajuste a eles. Aqui está uma maneira rápida de emular seu conjunto de dados:
O quadro de dados
X
possui uma coluna binária aleatória chamada "y" e 338 outras colunas binárias (cujos nomes não importam). Usei sua abordagem para regredir "y" contra essas variáveis, mas - apenas para ter cuidado - verifiquei se o vetor de respostay
e a matriz do modelox
eram compatíveis (o que eles podem não fazer caso haja algum valor faltante nos dados) :O resultado é notavelmente semelhante ao seu:
De fato, com esses dados completamente aleatórios, o Lasso ainda retorna nove estimativas de coeficientes diferentes de zero (embora saibamos, por construção, que os valores corretos são zero). Mas não devemos esperar perfeição. Além disso, como o ajuste é baseado na remoção aleatória de subconjuntos de dados para validação cruzada, normalmente você não obterá a mesma saída de uma execução para a seguinte. Neste exemplo, uma segunda chamada
cv.glmnet
produz um ajuste com apenas um coeficiente diferente de zero. Por esse motivo, se você tiver tempo, é sempre uma boa idéia executar novamente o procedimento de ajuste várias vezes e acompanhar quais estimativas de coeficiente são consistentemente diferentes de zero. Para esses dados - com centenas de regressores -, levará alguns minutos para repetir mais nove vezes.Oito desses regressores têm estimativas diferentes de zero em cerca de metade dos ajustes; o resto deles nunca tem estimativas diferentes de zero. Isso mostra até que ponto o Lasso ainda incluirá estimativas de coeficientes diferentes de zero, mesmo quando os coeficientes em si forem realmente zero.
fonte
Se você deseja obter mais informações, pode usar a função
O gráfico deve ser semelhante ao. Os rótulos permitem identificar o efeito de lambda para os regressores.
Você pode usar valores diferentes de x (no modelo é chamado fator alfa) a 0 (regressão de crista) a 1 (regressão LASSO). O valor [0,1] é a regressão líquida elástica
fonte
A resposta de que não existem combinações lineares de variáveis úteis na previsão de resultados é verdadeira em alguns casos, mas não em todos.
Eu tinha um gráfico como o acima, causado por multicolinearidade em meus dados. Reduzir as correlações permitiu que Lasso funcionasse, mas também removeu informações úteis sobre os resultados. Conjuntos melhores de variáveis foram obtidos usando a importância aleatória da floresta para rastrear variáveis e depois usando Lasso.
fonte
É possível, mas um pouco surpreendente. O LASSO pode fazer coisas estranhas quando você tem colinearidade; nesse caso, você provavelmente deve definir alfa <1, para que esteja ajustando uma rede elástica. Você pode escolher alfa por validação cruzada, mas verifique se está usando as mesmas dobras para cada valor de alfa.
fonte