Answers.Body: <p>This problem is usually approached with "Singular Value Decomposition". </p>
  
  <p>Search also for the "Netflix Challenge".</p>
  
Answers.ContentLicense: CC BY-SA 3.0
Answers.CreationDate: 2018-01-22T18:14:30.227Z
Answers.Text: Could you expand on SVD and describe on a high level how it is used? This is so that the answers on the stack can be self-contained.
Answers.UserDisplayName: Jaden Travnik
Answers.ContentLicense: CC BY-SA 3.0
Answers.CreationDate: 2018-01-22T15:18:57.320Z
Answers.LastActivityDate: 2018-01-22T15:18:57.320Z
Answers.UserDisplayName: chrishmorris
Answers.Body: <p>One approach for this is <a href="https://en.wikipedia.org/wiki/Collaborative_filtering" rel="nofollow noreferrer">collaborative filtering</a>. </p>
  
  <p>see also <a href="https://towardsdatascience.com/various-implementations-of-collaborative-filtering-100385c6dfe0" rel="nofollow noreferrer">link</a></p>
  
  <p>This does however need you to have data about <em>some</em> user preferences on <em>some</em> products. Given that you have stated you are willing to mine user preferences this approach may be feasible.</p>
  
  <p>The idea is that with this data you can train a model to predict how a user might rate a product. This is accomplished by learning the "preference signature" of a user and a feature vector for each product.</p>
  
  <p><strong>General Idea</strong></p>
  
  <p>for your i-th user, the algorithm will learn said preferences as a vector <span class="math-container">$$\theta^{(i)}$$</span></p>
  
  <p>Additionally, for your j-th product it will learn a feature vector <span class="math-container">$$x^{(j)}$$</span></p>
  
  <p>You can then predict how the i-th user will rate the j-th item by computing the dot product (or some equivalent). That is, compute the predicted rating as: 
  <span class="math-container">$$\hat R(i,j)=\theta^{(i)}\cdot x^{(j)}$$</span></p>
  
  <p>You can then use this rating to decide whether or not a a product is a good match for a user.</p>
  
  <p>The <a href="https://www.coursera.org/learn/machine-learning?" rel="nofollow noreferrer">A. Ng Machine Learning Coursera MOOC</a> has a <strong>very</strong> nice module on collaborative filtering.</p>
  
  <p><strong>Implementation Note</strong></p>
  
  <p>When asking your users for feedback, try to ask for <em>quantitative</em> measures. For example, the classic 1-5 scale rating.</p>
  
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2019-09-01T05:56:46.507Z
Answers.Text: Please put some information on your answer instead of a single link. Maybe, you can give some reasons why OP should use Collaborative filtering.
Answers.UserDisplayName: malioboro
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2019-09-01T06:02:14.940Z
Answers.Text: @malioboro I am currently writing an in depth answer with full mathematical formalism. I hastily submitted this as a temporary post - perhaps an oversight.
Answers.UserDisplayName: respectful
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2019-09-02T02:38:44.777Z
Answers.Text: I see, it is good answer now!
Answers.UserDisplayName: malioboro
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2019-09-02T02:40:47.650Z
Answers.Text: @malioboro thanks! I'm having fun writing answers. I don't believe in "shady" answers. I'll just have to make sure I finish them from now on before I post.
Answers.UserDisplayName: respectful
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2019-09-01T05:47:20.653Z
Answers.LastActivityDate: 2019-09-02T02:37:48.307Z
Answers.LastEditDate: 2019-09-02T02:37:48.307Z
Answers.UserDisplayName: respectful
Body: <p>Forgive what might be a basic question.  I'm just experimenting with ML / AL and I have a small problem set and I'd like to see if it can be solved with ML / AI.  Basically, given a set of objects with multiple features, I'd like to create a process for recommending one automatically to a user.  </p>
  
  <p>I'm thinking that some sort of clustering algorithm may be the best approach. However, one main challenge I'm trying to wrap my head around is that I don't know in advance how many distinct clusters will evolve... There may be scenarios where we Feature X is really important, but other scenarios where a user will say Feature Y is important.  </p>
  
  <p>Secondly, what is my input set?  For each training sample, I will have 1 selected object, and N-1 unselected objects.  But I don't want to "train" that the unselected objects are "bad" because they could be selected in a future training example.  </p>
  
  <p>Finally, I don't have a large training set already, so I would like to use feedback (user input, "This was a bad choice" or "Use this object instead.") from the process to further refine the algorithm.  Is this feasible?</p>
  
  <p>Are there any established patterns for this sort of process?  Thanks in advance.</p>
  
Tags: <machine-learning><learning-algorithms>
Title: Recommend item from set based on features
UserDisplayName: Matt Murrell
ThreadText: # Recommend item from set based on features
  
  (Asked by: username_0 on 2018-01-22)
  
  Forgive what might be a basic question. I'm just experimenting with ML / AL and I have a small problem set and I'd like to see if it can be solved with ML / AI. Basically, given a set of objects with multiple features, I'd like to create a process for recommending one automatically to a user.
  
  I'm thinking that some sort of clustering algorithm may be the best approach. However, one main challenge I'm trying to wrap my head around is that I don't know in advance how many distinct clusters will evolve... There may be scenarios where we Feature X is really important, but other scenarios where a user will say Feature Y is important.
  
  Secondly, what is my input set? For each training sample, I will have 1 selected object, and N-1 unselected objects. But I don't want to "train" that the unselected objects are "bad" because they could be selected in a future training example.
  
  Finally, I don't have a large training set already, so I would like to use feedback (user input, "This was a bad choice" or "Use this object instead.") from the process to further refine the algorithm. Is this feasible?
  
  Are there any established patterns for this sort of process? Thanks in advance.
  
  **Tags:** machine-learning, learning-algorithms
  
  ---
  
  ## 2 answers
  
  ### Answer by username_1 on 2018-01-22. Score: 1
  
  This problem is usually approached with "Singular Value Decomposition".
  
  Search also for the "Netflix Challenge".
  
  > **Comments:**
  > **username_2**: Could you expand on SVD and describe on a high level how it is used? This is so that the answers on the stack can be self-contained.  
  
  ---
  
  ### Answer by username_3 on 2019-09-01. Score: 1
  
  One approach for this is [collaborative filtering](https://en.wikipedia.org/wiki/Collaborative_filtering).
  
  see also [link](https://towardsdatascience.com/various-implementations-of-collaborative-filtering-100385c6dfe0)
  
  This does however need you to have data about *some* user preferences on *some* products. Given that you have stated you are willing to mine user preferences this approach may be feasible.
  
  The idea is that with this data you can train a model to predict how a user might rate a product. This is accomplished by learning the "preference signature" of a user and a feature vector for each product.
  
  **General Idea**
  
  for your i-th user, the algorithm will learn said preferences as a vector $$\theta^{(i)}$$
  
  Additionally, for your j-th product it will learn a feature vector $$x^{(j)}$$
  
  You can then predict how the i-th user will rate the j-th item by computing the dot product (or some equivalent). That is, compute the predicted rating as:
  $$\hat R(i,j)=\theta^{(i)}\cdot x^{(j)}$$
  
  You can then use this rating to decide whether or not a a product is a good match for a user.
  
  The [A. Ng Machine Learning Coursera MOOC](https://www.coursera.org/learn/machine-learning?) has a **very** nice module on collaborative filtering.
  
  **Implementation Note**
  
  When asking your users for feedback, try to ask for *quantitative* measures. For example, the classic 1-5 scale rating.
  
  > **Comments:**
  > **username_4**: Please put some information on your answer instead of a single link. Maybe, you can give some reasons why OP should use Collaborative filtering.  
  > **username_3**: @malioboro I am currently writing an in depth answer with full mathematical formalism. I hastily submitted this as a temporary post - perhaps an oversight.  
  > **username_4**: I see, it is good answer now!  
  > **username_3**: @malioboro thanks! I'm having fun writing answers. I don't believe in "shady" answers. I'll just have to make sure I finish them from now on before I post.  
  
  ---
  
  