What is the difference between SVD and matrix factorization in context of recommendation engine?
2016-10-21 10:44
831 查看
I have seen two broad uses of matrix factorization in recommenders. Both involve low-rank approximate factorizations. The first is really a generic approach
which can be combined with many factorizations: alternating least squares (here's my summary: Big,
Practical Recommendations with Alternating Least Squares), and the second is one specific factorization by itself, the Singular
value decomposition
Alternating least squares is flexible but less precise. It refers to any means of of factoring A≈XkYTkA≈XkYkT,
where XkXk and YkYk are
low rank. "Approximate" means minimizing some squared-error difference with the input A, but, here you can customize exactly what is considered in the loss function. For example you can ignore missing values (crucial) or weight different AijAij differently.
The price is that you don't get many guarantees about the two factors. They are not necessarily orthonormal. In practice it does not help, but doesn't hurt much.
The factorization here just involves alternating solving for XkXk and YkYk by
fixing the other. When fixed, it is a problem that has a direct analytical solution, one which is entirely parallelizable (also important). You can choose several decompositions to plug in for this phase; I use a QR
decomposition because it's fast and can 'detect' when the requested rank is even too low.
In contrast the SVD is a particular decomposition that gives more guarantees about its factorization A=UΣVTkA=UΣVkT.
The two outside factors are orthornormal for example. ΣΣ will
even help show you how big k should be.
The cost is speed and flexibility. The SVD is relatively more computationally expensive and harder to parallelize. There is also not a good way to deal with
missing values or weighting; you need to assume that in your sparse input, missing values are equal to a mean value 0. (Someone can correct me if these assumptions are mitigatable.)
https://www.quora.com/What-is-the-difference-between-SVD-and-matrix-factorization-in-context-of-recommendation-engine
which can be combined with many factorizations: alternating least squares (here's my summary: Big,
Practical Recommendations with Alternating Least Squares), and the second is one specific factorization by itself, the Singular
value decomposition
Alternating least squares is flexible but less precise. It refers to any means of of factoring A≈XkYTkA≈XkYkT,
where XkXk and YkYk are
low rank. "Approximate" means minimizing some squared-error difference with the input A, but, here you can customize exactly what is considered in the loss function. For example you can ignore missing values (crucial) or weight different AijAij differently.
The price is that you don't get many guarantees about the two factors. They are not necessarily orthonormal. In practice it does not help, but doesn't hurt much.
The factorization here just involves alternating solving for XkXk and YkYk by
fixing the other. When fixed, it is a problem that has a direct analytical solution, one which is entirely parallelizable (also important). You can choose several decompositions to plug in for this phase; I use a QR
decomposition because it's fast and can 'detect' when the requested rank is even too low.
In contrast the SVD is a particular decomposition that gives more guarantees about its factorization A=UΣVTkA=UΣVkT.
The two outside factors are orthornormal for example. ΣΣ will
even help show you how big k should be.
The cost is speed and flexibility. The SVD is relatively more computationally expensive and harder to parallelize. There is also not a good way to deal with
missing values or weighting; you need to assume that in your sparse input, missing values are equal to a mean value 0. (Someone can correct me if these assumptions are mitigatable.)
https://www.quora.com/What-is-the-difference-between-SVD-and-matrix-factorization-in-context-of-recommendation-engine
相关文章推荐
- what is the difference between "isempty"and "isnull"in the qt bool QString::isEmpty () const Retur.
- What Is the Difference Between a Block, a Proc, and a Lambda in Ruby
- what is the difference between _source and _all in Elasticsearch
- macro与inline的区别 What is the difference between macro and inline?
- What is the difference between Views and Materialized Views in Oracle?
- In PHP5, what is the difference between using self and $this? When is each appropriate?
- What is the Difference Between Type and Class in
- What is an intuitive explanation of the relation between PCA and SVD?
- What is the difference between @staticmethod and @classmethod in Python?
- OpenStack: What is the difference between Block storage and Object storage?Also, In what way they ar
- What is the difference between getWidth/heigth() and getMeasuredWidth/Heigth() in Android SDK?
- what is the difference between definition and declaration in c
- what is the difference between definition and declaration in c
- What is the difference between BIT and TINYINT in MySQL
- What are the practical differences between SVD and wavelet transforms in data analysis?
- What exactly is the difference between “pass by reference” in C and in C++?
- whats is the difference between train, validation and test set, in neural networks?
- What is the difference between a soft reference and a weak reference in Java?
- What is the difference between provider network and self-service network in OpenStack?
- what is the difference between static and normal variables in c++