<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
		>
<channel>
	<title>Comments on: Ensembles of kNN Recommenders</title>
	<atom:link href="http://mendicantbug.com/2008/04/01/ensembles-of-knn-recommenders/feed/" rel="self" type="application/rss+xml" />
	<link>http://mendicantbug.com/2008/04/01/ensembles-of-knn-recommenders/</link>
	<description>Wanderings into computational linguistics, science, social media and life...</description>
	<lastBuildDate>Mon, 23 Apr 2012 02:02:52 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
	<item>
		<title>By: sikander</title>
		<link>http://mendicantbug.com/2008/04/01/ensembles-of-knn-recommenders/#comment-1012</link>
		<dc:creator><![CDATA[sikander]]></dc:creator>
		<pubDate>Wed, 10 Sep 2008 06:58:55 +0000</pubDate>
		<guid isPermaLink="false">http://ealdent.wordpress.com/?p=580#comment-1012</guid>
		<description><![CDATA[WELL THIS ARTICLE IS REALLY VERY USEFUL FOR ME... I AM A STUDENT OF M.TECH AT GJUS&amp;T WORKING ON RECOMMENDER SYSTEMS... THANKS TO AUTHOR.....                SIKANDER]]></description>
		<content:encoded><![CDATA[<p>WELL THIS ARTICLE IS REALLY VERY USEFUL FOR ME&#8230; I AM A STUDENT OF M.TECH AT GJUS&amp;T WORKING ON RECOMMENDER SYSTEMS&#8230; THANKS TO AUTHOR&#8230;..                SIKANDER</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jason Adams</title>
		<link>http://mendicantbug.com/2008/04/01/ensembles-of-knn-recommenders/#comment-700</link>
		<dc:creator><![CDATA[Jason Adams]]></dc:creator>
		<pubDate>Wed, 02 Apr 2008 19:29:25 +0000</pubDate>
		<guid isPermaLink="false">http://ealdent.wordpress.com/?p=580#comment-700</guid>
		<description><![CDATA[Jon:

It was a great homework assignment -- one of the more interesting I&#039;ve had in a long while.  Kudos!

I tried some normalization, but there were definitely more things to try (and a lack of time to do it).  I completely agree about the problems of raters using different mental scales and selectively rating certain movies.  I have also heard of people taking time into account, but I can&#039;t remember any details or anything that stood out to me as particularly cool.  Time-based normalizations are not a bad idea at all, I wonder how much they would help..]]></description>
		<content:encoded><![CDATA[<p>Jon:</p>
<p>It was a great homework assignment &#8212; one of the more interesting I&#8217;ve had in a long while.  Kudos!</p>
<p>I tried some normalization, but there were definitely more things to try (and a lack of time to do it).  I completely agree about the problems of raters using different mental scales and selectively rating certain movies.  I have also heard of people taking time into account, but I can&#8217;t remember any details or anything that stood out to me as particularly cool.  Time-based normalizations are not a bad idea at all, I wonder how much they would help..</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jason Adams</title>
		<link>http://mendicantbug.com/2008/04/01/ensembles-of-knn-recommenders/#comment-699</link>
		<dc:creator><![CDATA[Jason Adams]]></dc:creator>
		<pubDate>Wed, 02 Apr 2008 19:24:19 +0000</pubDate>
		<guid isPermaLink="false">http://ealdent.wordpress.com/?p=580#comment-699</guid>
		<description><![CDATA[anon:
I manually found the weights, so it was probably a local optimum.  First, if you are trying to submit scores to the competition, you are limited in the frequency you can submit, so doing the same thing I did is infeasible.  Also, if you have a large number of models, exhaustive grid search becomes expensive.  I don&#039;t have code for this part, but it&#039;s not especially difficult.

What you would do if you were submitting to Netflix is this.  Hold out some test cases, like the probe set they include.  For each of your models, generate a prediction for test cases in the probe set.  Let&#039;s call these {M1, M2, ..., Mn} for n models.  Each model consists of the predictions for the test cases in the probe set.  In a grid search, you would cycle through all possible values for the weights and find the best RMSE for the ensemble.  So if you have a weight set W = {w1, w2, ..., wn}, you would basically have n loops over the possible values of w (which you can probably restrict to the interval [-1,1], with the constraint that they all sum 1).  So if you were combining two models:

for i = -1 to 1 step 0.1
&#160;&#160;for j = 1 to size(probe_set)
&#160;&#160;&#160;&#160;p[j] = i * M1[j] + (1 - i) * M2[j]

As you can see, each model you add increases the complexity by a factor O(ms) (where m is the number size of the probe set and s is the number of parameter values you are checking), so if you have 100 models, it will take forever this way: O(m*s^99).  But you can apply some heuristics and limit the space you search.

One final note:  You would only need to do this step once to find the weights to apply to each model.  So as long as your models remain the same you don&#039;t have to repeat this step.  If you add or change a model, you have to reconstruct this.]]></description>
		<content:encoded><![CDATA[<p>anon:<br />
I manually found the weights, so it was probably a local optimum.  First, if you are trying to submit scores to the competition, you are limited in the frequency you can submit, so doing the same thing I did is infeasible.  Also, if you have a large number of models, exhaustive grid search becomes expensive.  I don&#8217;t have code for this part, but it&#8217;s not especially difficult.</p>
<p>What you would do if you were submitting to Netflix is this.  Hold out some test cases, like the probe set they include.  For each of your models, generate a prediction for test cases in the probe set.  Let&#8217;s call these {M1, M2, &#8230;, Mn} for n models.  Each model consists of the predictions for the test cases in the probe set.  In a grid search, you would cycle through all possible values for the weights and find the best RMSE for the ensemble.  So if you have a weight set W = {w1, w2, &#8230;, wn}, you would basically have n loops over the possible values of w (which you can probably restrict to the interval [-1,1], with the constraint that they all sum 1).  So if you were combining two models:</p>
<p>for i = -1 to 1 step 0.1<br />
&nbsp;&nbsp;for j = 1 to size(probe_set)<br />
&nbsp;&nbsp;&nbsp;&nbsp;p[j] = i * M1[j] + (1 &#8211; i) * M2[j]</p>
<p>As you can see, each model you add increases the complexity by a factor O(ms) (where m is the number size of the probe set and s is the number of parameter values you are checking), so if you have 100 models, it will take forever this way: O(m*s^99).  But you can apply some heuristics and limit the space you search.</p>
<p>One final note:  You would only need to do this step once to find the weights to apply to each model.  So as long as your models remain the same you don&#8217;t have to repeat this step.  If you add or change a model, you have to reconstruct this.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: anon</title>
		<link>http://mendicantbug.com/2008/04/01/ensembles-of-knn-recommenders/#comment-698</link>
		<dc:creator><![CDATA[anon]]></dc:creator>
		<pubDate>Wed, 02 Apr 2008 18:07:19 +0000</pubDate>
		<guid isPermaLink="false">http://ealdent.wordpress.com/?p=580#comment-698</guid>
		<description><![CDATA[Jason - what confuses me is how you get those weights. Do you have code you can share?]]></description>
		<content:encoded><![CDATA[<p>Jason &#8211; what confuses me is how you get those weights. Do you have code you can share?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jon Elsas</title>
		<link>http://mendicantbug.com/2008/04/01/ensembles-of-knn-recommenders/#comment-697</link>
		<dc:creator><![CDATA[Jon Elsas]]></dc:creator>
		<pubDate>Wed, 02 Apr 2008 16:20:22 +0000</pubDate>
		<guid isPermaLink="false">http://ealdent.wordpress.com/?p=580#comment-697</guid>
		<description><![CDATA[Jason -- I wrote that homework assignment &amp; its fun to see someone getting excited about it.  Its surprisingly hard to beat the baseline of predicting the average moving rating without looking at the user information at all.

There&#039;s a lot you can do in scaling &amp; normalizing the ratings -- some users are more generous on average than others, for example, and taking that into account when you do predictions helps quite a bit.  A 5 from someone who gives all 4&#039;s and 5&#039;s means something different than a 5 from a different user.  

One thing I didn&#039;t look into at all, but is likely a promising direction, is taking into account time. I would guess ratings come in bursts &amp; someone&#039;s mood at the moment heavily influences their rating generosity.  I recently read a blog post on someone who&#039;s doing exactly this with the netflix dataset with much success.  (the link escapes me now...)

Good luck with your assignment.]]></description>
		<content:encoded><![CDATA[<p>Jason &#8212; I wrote that homework assignment &amp; its fun to see someone getting excited about it.  Its surprisingly hard to beat the baseline of predicting the average moving rating without looking at the user information at all.</p>
<p>There&#8217;s a lot you can do in scaling &amp; normalizing the ratings &#8212; some users are more generous on average than others, for example, and taking that into account when you do predictions helps quite a bit.  A 5 from someone who gives all 4&#8242;s and 5&#8242;s means something different than a 5 from a different user.  </p>
<p>One thing I didn&#8217;t look into at all, but is likely a promising direction, is taking into account time. I would guess ratings come in bursts &amp; someone&#8217;s mood at the moment heavily influences their rating generosity.  I recently read a blog post on someone who&#8217;s doing exactly this with the netflix dataset with much success.  (the link escapes me now&#8230;)</p>
<p>Good luck with your assignment.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jason Adams</title>
		<link>http://mendicantbug.com/2008/04/01/ensembles-of-knn-recommenders/#comment-695</link>
		<dc:creator><![CDATA[Jason Adams]]></dc:creator>
		<pubDate>Wed, 02 Apr 2008 13:26:06 +0000</pubDate>
		<guid isPermaLink="false">http://ealdent.wordpress.com/?p=580#comment-695</guid>
		<description><![CDATA[Let&#039;s say for movie &lt;i&gt;m&lt;/i&gt;, there are the following predicted ratings based on the above mentioned models:

3.47, 4.09, 2.75

With the weighting scheme I mentioned, where the weights are {0.45, 0.35, 0.2}, the blended rating would be 3.47 * 0.45 + 4.09 * 0.35 + 2.75 * 0.2 = 3.54.  The weights have to sum to one, or else you would need to normalize the final score in some way.

This is just one way of doing it, but I think it&#039;s fairly typical since it works well and is really easy to do a grid search over the weights on development data to optimize your parameters.  It does however make your final model less explainable.  Compare this odd blending of models to simple kNN where you can say, well I predicted this rating because k closest users said it should be this.  In the real-life case above, a model that performs worse is given a higher weight than the best model.  Why?]]></description>
		<content:encoded><![CDATA[<p>Let&#8217;s say for movie <i>m</i>, there are the following predicted ratings based on the above mentioned models:</p>
<p>3.47, 4.09, 2.75</p>
<p>With the weighting scheme I mentioned, where the weights are {0.45, 0.35, 0.2}, the blended rating would be 3.47 * 0.45 + 4.09 * 0.35 + 2.75 * 0.2 = 3.54.  The weights have to sum to one, or else you would need to normalize the final score in some way.</p>
<p>This is just one way of doing it, but I think it&#8217;s fairly typical since it works well and is really easy to do a grid search over the weights on development data to optimize your parameters.  It does however make your final model less explainable.  Compare this odd blending of models to simple kNN where you can say, well I predicted this rating because k closest users said it should be this.  In the real-life case above, a model that performs worse is given a higher weight than the best model.  Why?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: anon</title>
		<link>http://mendicantbug.com/2008/04/01/ensembles-of-knn-recommenders/#comment-694</link>
		<dc:creator><![CDATA[anon]]></dc:creator>
		<pubDate>Wed, 02 Apr 2008 13:02:51 +0000</pubDate>
		<guid isPermaLink="false">http://ealdent.wordpress.com/?p=580#comment-694</guid>
		<description><![CDATA[Can you please elaborate on the math behind the blending?]]></description>
		<content:encoded><![CDATA[<p>Can you please elaborate on the math behind the blending?</p>
]]></content:encoded>
	</item>
</channel>
</rss>

