SVD de uma matriz com valores ausentes


12

Suponha que eu tenha uma matriz de recomendação no estilo Netflix e que deseje criar um modelo que preveja possíveis classificações futuras de filmes para um determinado usuário. Usando a abordagem de Simon Funk, usaria-se a descida do gradiente estocástico para minimizar a norma de Frobenius entre a matriz completa e a matriz item a item * usuário a usuário combinada com um termo de regularização L2.

Na prática, o que as pessoas fazem com os valores ausentes da matriz de recomendação, que é o objetivo de fazer o cálculo? Meu palpite ao ler o post de Simon é que ele APENAS usa os termos que não estão faltando (que consistem em (digamos) ~ 1% da matriz de recomendação) para construir um modelo (com alguma escolha criteriosa de hiperparâmetros e regularização) para prever os outros 99% da matriz?

Na prática, você realmente pula todos esses valores? Ou você deduz o máximo possível antes de fazer a descida estocástica do gradiente? Quais são algumas das práticas recomendadas padrão para lidar com os valores ausentes?


1
Parece a mesma pergunta para isso . Eu respondi a pergunta lá.
d_ijk_stra

2
Eu respondi também.
Stumpy Joe Pete

2
@d_ijk_stra "respondeu" é um pouco generoso para o que equivale a um link para um PDF
ali_m

Respostas:


6

Sim, na prática esses valores são ignorados. Na sua descrição em termos de uma norma de Frobenius, isso corresponde a minimizar os componentes da norma que podem ser medidos, ou seja, aqueles que possuem classificações conhecidas. O termo de regularização pode ser visto como um anterior bayesiano nos componentes dos vetores de características, com o SVD calculando o estimador de máxima verossimilhança, sujeito a este anterior e aos valores conhecidos.

Provavelmente é melhor pensar no SVD como um método para inferir os valores ausentes. Se você já tem uma maneira melhor de fazer isso, por que precisa do SVD? Caso contrário, o SVD preencherá as lacunas com prazer.


1
Como você usa o SVD para inferir esses valores ausentes? Você já tentou outros métodos para inferir os valores ausentes, por exemplo, usando os valores ausentes para treinar um classificador de florestas aleatórias, que poderia ser usado para adivinhar seus valores ausentes? Você obtém melhores resultados ou é realmente dependente de problemas?
Vishal

1
Você deduz valores ausentes da mesma maneira que previa valores futuros, usando os componentes relevantes da decomposição SVD. Prever classificações futuras é exatamente o mesmo problema que deduzir valores ausentes. Se você tem uma boa maneira de inferir valores ausentes, use isso para prever classificações futuras. Caso contrário, é para isso que serve o SVD.
Martin O'Leary

"Provavelmente é melhor pensar no SVD como um método para inferir os valores ausentes". Ah, não, na verdade o SVD depende do usuário pré-inferir todos os valores ausentes de outra maneira, antes de executar um SVD. SVD não imputa absolutamente nada.
Geoffrey Anderson

1

Na prática, o que as pessoas fazem com os valores ausentes da matriz de recomendação, que é o objetivo de fazer o cálculo? Meu palpite ao ler o post de Simon é que ele APENAS usa os termos que não faltam para construir um modelo.

Isso mesmo - esse é o objetivo dele e do seu modelo para prever os termos ausentes, certo? É um ponto crucial que muitos realmente esquecem. Eles acham que podem simplesmente "assumir" pré-atribuir uma constante a dados ausentes sem se preocupar com o mundo, e as coisas vão funcionar magicamente bem o suficiente com um SVD. Lixo para dentro, para fora: é real, e é melhor você assistir. É melhor você não alimentar dados indesejados para um modelo se quiser algo útil.

Certamente NÃO é "melhor deduzir quaisquer valores ausentes" no conjunto de dados esparso majoritário e, em seguida, execute o SVD com alguma esperança de atribuir valores para você (que você já imputou antes de executar o SVD, certo?). O que você acha que um modelo é mágico? Não há mágica nem tecnologia para superar a maioria dos dados de lixo. Você não pode mentir para um modelo de que dados são dados reais quando não são reais, mas na verdade são apenas algumas porcarias que você simplesmente inventou do nada.

O SVD faz outras coisas úteis, então certamente não estou dizendo que o SVD é inútil. Vá em frente e use SVD apenas em conjuntos de dados completos, talvez com os quais você inteligentemente imputou valores ausentes ao já usar um modelo de aprendizado de máquina com toda a devida atenção ao erro de polarização e erro de variação durante seu desenvolvimento.

O aprendizado de máquina é o caminho. Portanto, se você ainda deseja saber como imputar valores usando um projeto de fatoração de matriz, certamente existem boas maneiras de fazer exatamente isso usando o aprendizado de máquina, e o mais importante é que eles não alimentam nenhum dado indesejado em um modelo para tentar aprender sem sentido.

Exatamente, esse modelo de fatoração da matriz de aprendizado de máquina é apresentado muito bem pelos instrutores do curso on-line de mineração de conjuntos de dados maciços de Stanford, no módulo 5. Eles mostram a matemática e explicam o modelo. Eles não o codificam para você.

Tudo bem porque você pode codificá-lo por conta própria, se entender o aprendizado básico de máquina. Você sabe o que são uma função de perda e uma função de custo? Regularização? Gradiente descendente? Você concorda com a multiplicação e adição de matrizes? Erro de polarização e erro de variação? Se sim, então você é bom. Caso contrário, considere fazer o curso on-line de aprendizado de máquina de Andrew Ng na Coursera, que é um dos muitos bons pontos de partida. Depois, faça também o curso on-line Mining Massive Data Sets, que fala exatamente sobre fatoração de matriz e aprendizado de máquina para fazer modelos de recomendação.

Basta dizer que você pode projetar completamente e codificar seu próprio modelo de fatoração, que lida com dados perdidos muito bem, assim como Simon Funk, e você pode fazê-lo do zero, mas não é tão difícil como antes. em seus dias, porque agora você pode usar uma ferramenta como TensorFlow ou Microsoft CNTK, que faz muito por você. Defina uma função de perda e uma função de custo, escolha um otimizador, particione seu conjunto de dados em treinamento, dev, teste com os dados realmente disponíveis (dados rotulados) e deixe executar. Sério, funciona. Não é fácil depurar o TF e seus erros de criação de gráficos, mas pode funcionar muito bem no final e requer menos de uma página de código.

Especificamente, uma maneira de não alimentar dados falsos para um modelo de aprendizado de máquina de fatoração de matriz é pular os elementos da matriz dos dados ausentes em suas funções de perda e custo .


0

Há uma tese que analisa muitos sistemas de recomendação e os compara, mas não fala sobre o rastreamento de longo prazo dos itens ausentes, por exemplo, para testar as previsões. Isso faz parte da sua pergunta? Usando o componente de tempo dessa maneira? Entre os muitos artigos e métodos, as revisões de tese são sistemas sensíveis ao tempo / sensíveis, como a pesquisa nos artigos de Rendle. Se a sua pergunta também é sobre como lidar com a escassez de dados, isso também é discutido em detalhes ao longo da tese e existem muitos métodos. matrizes esparsas e imputação com zeros ou fatoração de matriz que adicionam uma matriz de agrupamento de usuários (usuários que avaliam itens de forma semelhante) ou uma matriz de agrupamento de itens.

O título da tese é "Modelos de baixo escalão para sistemas de recomendação com informações limitadas sobre preferências" de Evgeny Frolov https://www.skoltech.ru/app/data/uploads/2018/09/Frolov_Dissertation_Final1.pdf

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.