O que acontece quando você aplica o SVD a um problema de filtragem colaborativa? Qual é a diferença entre os dois?


21

Na filtragem colaborativa, temos valores que não são preenchidos. Suponha que um usuário não assistiu a um filme, então precisamos colocar um 'na' nele.

Se eu for usar um SVD dessa matriz, preciso inserir um número - digamos 0. Agora, se eu fatorar a matriz, tenho um método para encontrar usuários semelhantes (descobrindo quais usuários estão mais próximos) o espaço dimensional reduzido). Mas a própria preferência prevista - de um usuário para um item será zero. (porque foi o que inserimos nas colunas desconhecidas).

Então, eu estou preso com o problema de filtragem colaborativa vs SVD. Eles parecem ser quase o mesmo, mas não exatamente.

Qual é a diferença entre eles e o que acontece quando aplico um SVD a um problema de filtragem colaborativa? Sim, e os resultados parecem aceitáveis ​​em termos de encontrar usuários próximos, o que é ótimo, mas como?

Respostas:


25

Ok, quando você diz SVD, provavelmente você está falando sobre SVD truncado (onde você mantém apenas os maiores valores singulares). Existem duas maneiras diferentes de analisar o SVD truncado de uma matriz. Uma é a definição padrão:k

Primeiro, faça o SVD: , onde e são matrizes de rotação, e possui os valores singulares ao longo da diagonal. Em seguida, você escolhe os valores singulares superiores , zera o restante e corta linhas e colunas irrelevantes para fazer uma aproximação da classificação do original: LVΣkkX ~ X = ~ L n × k k x k ~ Σ ~ V t k × mXn×m=Un×nΣn×mVTm×mUVΣkkXX~=U~n×kΣ~k×kV~Tk×m

Tudo isso é bom e elegante (e fácil de implementar em R ou matlab), mas não faz sentido quando se fala em matrizes com valores ausentes. No entanto, há uma propriedade interessante do SVD truncado em - é a melhor aproximação da classificação ao original! Isso é:kkk

X~=umargmEunB:rumank(B)=kEu,j(XEuj-BEuj)2

Essa propriedade parece fácil de generalizar para o caso de valor ausente. Basicamente, você está procurando uma matriz rank que minimiza o erro quadrático médio em elementos entre as entradas conhecidas da matriz original. Ou seja, ao treinar o sistema, você ignora todos os valores ausentes. (Para obter dicas sobre como você pode realmente encontrar uma aproximação de classificação , aqui estão alguns lugares para procurar).kkk

Então, quando você chegar a uma aproximação de entrada "próxima" do original, use-a para preencher os valores ausentes. Ou seja, se estava ausente, você preenche . Tada! Você está pronto agora.X i j ˜ X i jkXEujX~Euj


3

Parece que existem muitas abordagens sobre como lidar com valores ausentes. O documento a seguir , com revisão na Seção 1.3, pode ser um bom ponto de partida.


0

Eu preciso de mais reputação para comentar a resposta de Stumpy Joe Pete, portanto, eu posto isso como resposta.

Obrigado atarracado pela resposta, embora eu ache que precisa de um pouco de esclarecimento. Particularmente, quero dizer esta frase:

Basicamente, você está procurando uma matriz k-rank que minimize o erro quadrado médio do elemento entre as entradas conhecidas da matriz original.

Primeiro - a classificação mais alta não minimizaria isso sempre ou reconstruiria a matriz X original? Em segundo lugar - Por que você pegaria apenas as entradas conhecidas . Intuitivamente, faz sentido, mas na verdade o procedimento também se encaixa nos lugares vazios que foram substituídos por alguns números razoáveis.

Minha abordagem seria realizar algo como uma validação cruzada:

  1. Preencha os lugares vazios com 0s ou meios ou outro número razoável.
  2. Substitua um dos n elementos conhecidos por 0 ou um número razoável
  3. Realizar a reconstrução SVD do posto k
  4. Verifique o valor do elemento reconstruído conhecido .
  5. repita para todos os elementos conhecidos possíveis e calcule MSE
  6. repita para todos os k possíveis e escolha o que tiver o menor MSE.

1. Você deseja escolher um k baixo para evitar o ajuste excessivo (muito menor do que sejam as dimensões de X). Isso é basicamente pela mesma razão que a regressão linear é uma escolha melhor do que um quintic para ajustar um conjunto de dados de 6 pontos. 2. Você não sabe o que as entradas desconhecidas devem ser; portanto, não é possível medir "o MSE por elementos" entre elas. Meu procedimento preenche os valores ausentes com números que foram derivados minimizando o erro em relação aos valores conhecidos (e restringindo que a matriz deve ser de classificação baixa).
Stumpy Joe Pete
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.