Eu li os ótimos comentários sobre como lidar com valores ausentes antes de aplicar o SVD, mas gostaria de saber como ele funciona com um exemplo simples:
Movie1 Movie2 Movie3
User1 5 4
User2 2 5 5
User3 3 4
User4 1 5
User5 5 1 5
Dada a matriz acima, se eu remover os valores de NA, acabarei tendo apenas Usuário2 e Usuário5. Isso significa que meu U será 2 × k. Mas se eu prever os valores em falta, U deve ser de 5 × k, que pode multiplicar com valores singulares e V .
Alguém de vocês preencheu os valores ausentes na matriz acima removendo primeiro os usuários com valores ausentes e aplicando o SVD? Por favor, forneça uma explicação muito simples do procedimento aplicado e torne sua resposta prática (ou seja, o número multiplicado por outro número fornece uma resposta) em vez de usar símbolos matemáticos em excesso.
Eu li os seguintes links:
stats.stackexchange.com/q/33142
fonte
Respostas:
SVD é definido apenas para matrizes completas. Portanto, se você seguir o SVD comum, precisará preencher esses valores ausentes antes (o SVD não é um algoritmo de imputação propriamente dito). Esperamos que os erros que você introduz sejam cancelados pela sua abordagem de fatoração matricial (suposição geral: os dados são gerados por um modelo de classificação baixa).
Remover linhas completas como você deseja fazer é ruim. Mesmo definir os valores ausentes como zero seria melhor.
Existem muitas estratégias de imputação, mas, neste caso, eu imputaria a média da coluna (ou talvez a média da linha). Essa é basicamente a estratégia recomendada no seu segundo link.
torna-se (média da coluna; pontuação média do filme)
E mais uma observação: você deve pré-processar os dados. Pelo menos subtraia a média de todos os valores!
Dê uma olhada nesta introdução . Ele mensura a abordagem imute + SVD e também fala sobre uma modelagem mais direta dos valores ausentes. Mas, neste caso, outros algoritmos são usados.
fonte
Existem várias maneiras de prever valores ausentes, mas o SVD clássico não é um deles. O bom é que o aprendizado de máquina agora oferece muitas maneiras de fazer isso, algumas das quais baseadas na fatoração da matriz, outras completamente diferentes da fatoração da matriz. Você pode escolher e criar um modelo completamente personalizado, e isso geralmente é feito agora, porque as ferramentas são poderosas o suficiente hoje. A fatoração da matriz ainda é certamente uma boa maneira de prever valores ausentes em dados esparsos, mas o próprio SVD não é.
A resposta aceita aqui, aparentemente aconselhou o interlocutor a escolher qualquer valor constante como 0 ou 99 ou -3 ou o que quer que seja, para atribuir os valores ausentes com antecedência e depois executar o SVD nisso. Essa é uma resposta ruim se o objetivo é prever em conjuntos de dados esparsos. Mas se, em vez disso, o objetivo do OP é simplesmente executar o SVD, a pré-atribuição de qualquer valor constante funcionará bem; portanto, escolha qualquer valor e execute o SVD se os resultados não importarem para o OP. Eu disse que o SVD é uma solução ruim para a previsão de valores ausentes, porque assumir um valor constante em todos os locais esparsos pode acabar sendo a introdução de literalmente mais pontos de ruído do que bons pontos de dados.
Qual é o sentido de aprender barulho? E por que você sugeriria que os valores ausentes são realmente o mesmo valor constante, quando o objetivo do exercício é prever o que são? Você não espera que os valores ausentes sejam realmente iguais, certo? Isso vai subestimar o número de componentes principais que resultam se houver dados constantes tão difundidos em seu conjunto de dados, por um lado. Também é um problema de previsão muito fácil. Você não precisa de um algoritmo de aprendizado ou mesmo de algoritmo de fatoração. Você acabou de dizer que os valores ausentes são uma constante conhecida. Não há necessidade de imputar! Você já fez isso manualmente, apenas adivinhando o modo antiquado.
Você pode ficar mais sofisticado com o SVD e pré-imputar os valores ausentes usando uma distribuição aleatória derivada empiricamente usando a média e o desvio padrão dos dados conhecidos (não ausentes). Mas há aleatoriedade em vez de padrões nos dados e você presumivelmente esperava que a fatoração da matriz e a redução da dimensionalidade inerentes a essa técnica encontrassem os padrões que você espera que existam. Você não descobrirá muitos padrões de uso em ruídos aleatórios, portanto, também não está ajudando a usá-lo dessa maneira.
A conclusão é que a saída do SVD - ou qualquer outro algoritmo - será em grande parte lixo sempre que houver uma quantidade impressionante de dados indesejados fornecidos pelo investigador. Nenhum algoritmo pode aprender um bom modelo com a maioria dos dados indesejados. Apenas diga não a toda essa "abordagem".
Parece provável que o objetivo do OP seja prever e usar um projeto de fatoração de matriz como parte do algoritmo de aprendizado. Nesse caso, o mais interessante é que você pode escrever sua própria função de custo, que omite crucialmente o custo, quaisquer previsões feitas com relação aos valores ausentes. Nenhum dado indesejado é alimentado para o algoritmo de aprendizado dessa maneira.Use um bom otimizador baseado em descida por gradiente, como Adam (existem outros). Você pode obter uma solução que seja mensurável com precisão em qualquer grau de treinamento, desenvolvimento e conjunto de dados de teste, desde que siga uma boa metodologia de projeto de aprendizado de máquina. Sinta-se à vontade para adicionar termos e complexidade ao seu modelo, como viés de usuário, viés de item, viés global, regularização ou qualquer outra coisa necessária para controlar o erro de viés e o erro de variação dos requisitos do seu projeto e dos conjuntos de dados disponíveis.
Um moderno pacote de desenvolvimento de aprendizado de máquina faz disso uma abordagem prática agora. O TensorFlow, por exemplo (ou Microsoft CNTK et al), pode ajudá-lo a fazer exatamente o que eu descrevi em um conjunto de dados esparso, usando um modelo de fatoração de matriz.
fonte
Este documento aborda o que você procura em detalhes muito elegantes (usando SVD de limite suave). Como Geoffrey apontou, eles fazem isso escrevendo sua própria função de custo que exclui do custo quaisquer previsões feitas com relação aos valores ausentes.
Resumo: Mazumdar et al. Usam técnicas de relaxamento convexo para fornecer uma sequência de soluções regularizadas de baixo escalão para problemas de conclusão de matriz em larga escala. O algoritmo SOFT-IMPUTE substitui iterativamente os elementos ausentes pelos obtidos de um SVD de limite suave. Explorando a estrutura do problema, eles mostram que a tarefa pode ser executada com uma complexidade de ordem linear nas dimensões da matriz. O algoritmo é facilmente escalável para matrizes grandes; por exemplo, ele se encaixa em uma aproximação de nível 95 ao treinamento completo da Netflix definido em 3,3 horas. Os métodos alcançam bons erros de treinamento e teste e têm tempos superiores quando comparados a outras técnicas competitivas de última geração.
@article {mazumder2010spectral, title = {Algoritmos de regularização espectral para aprender grandes matrizes incompletas}, autor = {Mazumder, Rahul e Hastie, Trevor e Tibshirani, Robert}, periódico = {Journal of machine learning research}, volume = {11}, número = {agosto}, páginas = {2287-2322}, ano = {2010}}
fonte