결 측값이있는 행렬의 SVD


12

Netflix 스타일 권장 매트릭스가 있고 특정 사용자의 향후 영화 등급을 예측하는 모델을 만들고 싶다고 가정합니다. Simon Funk의 접근 방식을 사용하면 확률 적 그라디언트 디센트를 사용하여 전체 행렬과 항목 별 * 사용자 별 행렬 사이의 Frobenius 표준을 최소화하여 L2 정규화 항을 사용합니다.

실제로 사람들은 추천 매트릭스의 결 측값으로 무엇을합니까? 계산의 요점은 무엇입니까? Simon의 블로그 게시물을 읽은 것으로 추측 한 것은 비결 측 용어 (추천 매트릭스의 ~ 1 %로 구성)를 사용하여 예측할 수있는 모델 (일부 신중한 하이퍼 파라미터 및 정규화 선택)을 작성하는 것입니다. 매트릭스의 다른 99 %?

실제로, 당신은 정말로 그 모든 값을 건너 뛰나요? 또는 확률 적 경사 하강을하기 전에 가능한 많이 추론합니까? 결 측값을 처리하기위한 표준 모범 사례는 무엇입니까?


1
그것은에 같은 질문처럼 보인다 . 나는 그 질문에 대답했다.
d_ijk_stra

2
나도 대답 했다.
Stumpy Joe Pete

2
@d_ijk_stra "answered"는 PDF에 링크되는 내용에 대해 약간 관대하게 설명합니다
ali_m

답변:


6

예, 실제로 해당 값은 건너 뜁니다. Frobenius 규범에 대한 설명에서 이는 측정 할 수있는 규범의 구성 요소, 즉 알려진 등급을 가진 구성 요소를 최소화하는 것에 해당합니다. 정규화 항은 특징 벡터의 성분에 앞서 베이지안으로 간주 될 수 있으며, SVD는 이러한 사전 및 알려진 값에 따라 최대 우도 추정치를 계산한다.

SVD를 결 측값을 유추하는 방법으로 생각하는 것이 가장 좋습니다. 이미 더 좋은 방법이 있다면 왜 SVD가 필요합니까? 그렇지 않으면 SVD가 행복하게 틈을 채 웁니다.


1
SVD를 사용하여 누락 된 값을 어떻게 추론합니까? 누락되지 않은 값을 사용하여 임의의 포리스트 분류기를 학습 한 다음 누락 된 값을 추측하는 데 사용할 수있는 다른 방법을 시도해 보았습니까? 더 나은 결과를 얻습니까, 아니면 실제로 문제에 의존합니까?
Vishal

1
SVD 분해의 관련 구성 요소를 사용하여 미래 값을 예측하는 것과 같은 방식으로 결 측값을 유추합니다. 향후 등급을 예측하는 것은 결 측값을 유추하는 것과 정확히 같은 문제입니다. 결 측값을 유추하는 좋은 방법이 있다면이를 사용하여 향후 등급을 예측하십시오. 그렇지 않은 경우 SVD가 바로 그런 것입니다.
Martin O'Leary 1

"SVD를 결 측값을 유추하는 방법으로 생각하는 것이 가장 좋습니다." 아뇨, 실제로 SVD는 SVD를 실행하기 전에 다른 방법으로 모든 결 측값을 미리 추론해야합니다. SVD는 전혀 아무것도 대치하지 않습니다.
Geoffrey Anderson

1

실제로 사람들은 추천 매트릭스의 결 측값으로 무엇을합니까? 계산의 요점은 무엇입니까? Simon의 블로그 게시물을 읽으면 필자가 비결 측 용어 만 사용하여 모델을 작성한다는 것입니다.

맞습니다. 저것과 당신의 모형의 요점입니다. 많은 사람들이 실제로 잊어 버리는 중요한 포인트입니다. 그들은 세계에서 신경 쓰지 않고 누락 된 데이터에 상수를 미리 할당한다고 가정 할 수 있으며 SVD에서 마술처럼 잘 작동 할 것이라고 생각합니다. 쓰레기, 쓰레기 : 그것은 진짜이며, 더 잘 보았습니다. 유용한 결과를 원한다면 정크 데이터를 모델에 공급하지 않는 것이 좋습니다.

대다수 희소 데이터 세트에서 "누락 된 값을 유추하는 것"이 ​​아니라 SVD를 실행하여 SVD를 실행하는 것이 좋습니다 (SVD를 실행하기 전에 이미 대치 했습니까?). 모델이 마술이라고 생각하십니까? 대부분의 가비지 데이터를 극복하는 마술이나 기술은 없습니다. 데이터가 실제 데이터가 아닌 경우 데이터가 실제 데이터라는 모델에 거짓말을 할 수는 없지만 얇은 공기로 만든 평범한 쓰레기 일뿐입니다.

SVD는 다른 유용한 작업을 수행하므로 SVD가 최소한 가치가 없다고 말할 수는 없습니다. 계속해서 완전한 데이터 세트에서만 SVD를 사용하십시오. 아마도 개발 중 바이어스 오류 및 분산 오류에주의를 기울여 이미 머신 러닝 모델을 사용하여 누락 된 값을 지능적으로 전가했을 것입니다.

머신 러닝이 그 길입니다. 따라서 행렬 인수 분해 설계를 사용하여 값을 대치하는 방법을 여전히 알고 싶다면 머신 러닝을 사용하여 정확하게이를 수행하는 좋은 방법이 있으며, 중요 하게도 무의식적으로 학습하려고 모델정크 데이터를 제공하지 않습니다 .

정확하게 이러한 기계 학습 매트릭스 인수 분해 모델은 모듈 5의 Stanford 온라인 코스 Mining Massive Data Sets의 강사가 제공합니다. 이들은 수학을 보여주고 모델을 설명합니다. 그들은 당신을 위해 그것을 코딩하지 않습니다.

기본 기계 학습을 이해하면 직접 코딩 할 수 있기 때문에 괜찮습니다. 손실 함수와 비용 함수가 무엇인지 아십니까? 정규화? 그라데이션 하강? 행렬 곱셈과 덧셈으로 괜찮습니까? 바이어스 오류 및 분산 오류? 그렇다면 당신은 좋습니다. 그렇지 않다면, Andrew Ng의 온라인 코스 Machine Learning at Coursera를 수강 하는 것이 좋습니다.이 코스 는 많은 좋은 출발지 중 하나입니다. 그런 다음 추천 코스 모델을 만들기위한 매트릭스 인수 분해 및 머신 러닝에 대해 정확하게 설명 하는 온라인 코스 Mining Massive Data Sets 를 살펴 보십시오.

말하자면, Simon Funk처럼 결측 데이터를 매우 잘 처리하는 자체 인수 분해 모델을 완벽하게 설계하고 코딩 할 수 있으며 처음부터 다시 수행 할 수는 있지만 다시는 그렇게 힘들지는 않습니다. 요즘에는 TensorFlow 또는 Microsoft CNTK와 같은 도구를 사용할 수 있기 때문에 많은 도움이됩니다. 손실 함수와 비용 함수를 정의하고, 옵티 마이저를 선택하고, 데이터 세트를 교육, 개발자로 분할하고, 실제로 사용 가능한 데이터 (레이블이있는 데이터)에서 테스트 한 후 실행 시키십시오. 심각하게 작동합니다. TF 디버깅과 그래프 작성 오류는 쉽지 않지만 결국에는 훌륭하게 작동 할 수 있으며 한 페이지 미만의 코드가 필요합니다.

특히, 가짜 데이터를 행렬 분해 기계 학습 모델에 공급하지 않는 한 가지 방법은 손실 및 비용 함수에서 누락 된 데이터의 행렬 요소건너 뛰는 것 입니다.


1

많은 추천 시스템을 검토하고 비교하는 논문이 있지만 예측을 테스트하기 위해 누락 된 항목의 장기 추적에 대해서는 언급하지 않습니다. 그게 당신 질문의 일부입니까? 그런 식으로 시간 구성 요소를 사용합니까? 많은 논문과 방법 중 논문 검토는 Rendle 논문의 연구와 같이 시간을 인식하고 민감한 시스템입니다. 당신의 질문이 또한 데이터의 희소성을 다루는 것에 관한 것이라면, 그것은 논문 전반에 걸쳐 상세하게 논의되며 많은 방법이 있습니다. 희소 행렬 및 제로 또는 행렬 인수 분해를 사용하여 사용자 (항목을 유사하게 평가하는 사용자)의 클러스터링 행렬 또는 항목의 클러스터링 링크 행렬을 추가하는 행렬 화.

논문 제목은 Evgeny Frolov https://www.skoltech.ru/app/data/uploads/2018/09/Frolov_Dissertation_Final1.pdf의 "기본 설정 정보가 제한된 권장 시스템의 낮은 순위 모델"입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.