Como executar SVD para atribuir valores ausentes, um exemplo concreto

8

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

stats.stackexchange.com/q/31096

stats.stackexchange.com/q/33103

Boro Dega
fonte
Todo mundo não assistiu pelo menos um filme, certo? Portanto, remover todos os usuários com dados ausentes resultará em zero usuários e zero linhas na matriz de utilidade (classificação). Então você não pode remover nenhuma linha que esteja faltando alguns dados, certo? SVD não é útil para conjuntos de dados com valores ausentes. No entanto, existem outras técnicas de fatoração matricial que podem imputá-las. Olha, o SVD precisaria que você imputasse os dados ausentes com antecedência, de alguma outra maneira. Você pode imputar de maneira tola usando apenas uma constante antiga, mas qual é o sentido de usar esses dados de lixo? Deseja que o lixo seja produzido?
Geoffrey Anderson

Respostas:

5

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.

        Movie1 Movie2 Movie3
User1   5             4
User2   2      5      5
User3          3      4
User4   1             5
User5   5      1      5

torna-se (média da coluna; pontuação média do filme)

        Movie1 Movie2 Movie3
User1   5      3      4
User2   2      5      5
User3   3      3      4
User4   1      3      5
User5   5      1      5

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.

Sascha
fonte
Obrigado por sua resposta. Por favor, veja este link do blog . Parece que Simon usou apenas classificações não ausentes, ou seja, ele ignorou as classificações ausentes. Não é o mesmo que estou propondo. Por favor informar.
Boro Dega
2
Leve o seu tempo e leia o meu link. Ele cobre exatamente a estratégia que o seu link do blog descreve. Ele não está imputando nada e não está usando SVD . Ele apenas usa alguma formulação de descida de gradiente estocástico da abordagem motivada por SVD (que oferece a possibilidade de ignorar todas as entradas ausentes)! Para mais informações, basta pesquisar no Google para fatoração matricial + gradiente estocástico . Há muito trabalho!
Sascha 28/05
2

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.

Geoffrey Anderson
fonte
Ótima reflexão. Eu realmente gosto da sua resposta e ela está no local. Você poderia expandir sua resposta com um script que mostre suas soluções. Então essa será a resposta para a pergunta. Obrigado
Boro Dega
2

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}}

Ambareesh
fonte