<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	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:slash="http://purl.org/rss/1.0/modules/slash/"
	>
<channel>
	<title>超群.com的博客 &#187; slope one</title>
	<atom:link href="http://www.fuchaoqun.com/tag/slope-one/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.fuchaoqun.com</link>
	<description></description>
	<lastBuildDate>Thu, 08 Sep 2011 15:08:19 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>[视频] Music Recommender Systems</title>
		<link>http://www.fuchaoqun.com/2009/11/music-recommender-systems-video/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=music-recommender-systems-video</link>
		<comments>http://www.fuchaoqun.com/2009/11/music-recommender-systems-video/#comments</comments>
		<pubDate>Sun, 29 Nov 2009 12:44:55 +0000</pubDate>
		<dc:creator>超群.com</dc:creator>
				<category><![CDATA[Data Mining]]></category>
		<category><![CDATA[Collaborative filtering]]></category>
		<category><![CDATA[KNN]]></category>
		<category><![CDATA[recommender system]]></category>
		<category><![CDATA[slope one]]></category>
		<category><![CDATA[SVD]]></category>
		<guid isPermaLink="false">http://www.fuchaoqun.com/?p=272</guid>
		<description><![CDATA[上次去beta沙龙的视频，希望没有浪费大家的时间，感谢beta沙龙的组织工作。]]></description>
			<content:encoded><![CDATA[<p><embed width="500" height="420" wmode="transparent" quality="high" name="fm_v" id="fm_v" src="http://player.youku.com/player.php/sid/XMTM0NjMzMTYw/v.swf" type="application/x-shockwave-flash"/></p>
<p>上次去beta沙龙的<a href="http://club.blogbeta.com/133.html" target="_blank">视频</a>，希望没有浪费大家的时间，感谢<a href="http://club.blogbeta.com/" target="_blank">beta沙龙</a>的组织工作。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fuchaoqun.com/2009/11/music-recommender-systems-video/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Music Recommender Systems</title>
		<link>http://www.fuchaoqun.com/2009/11/music-recommender-systems/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=music-recommender-systems</link>
		<comments>http://www.fuchaoqun.com/2009/11/music-recommender-systems/#comments</comments>
		<pubDate>Tue, 17 Nov 2009 04:18:29 +0000</pubDate>
		<dc:creator>超群.com</dc:creator>
				<category><![CDATA[Data Mining]]></category>
		<category><![CDATA[association rules]]></category>
		<category><![CDATA[Collaborative filtering]]></category>
		<category><![CDATA[KNN]]></category>
		<category><![CDATA[music recommender systems]]></category>
		<category><![CDATA[slope one]]></category>
		<category><![CDATA[SVD]]></category>
		<guid isPermaLink="false">http://www.fuchaoqun.com/?p=262</guid>
		<description><![CDATA[周末beta沙龙和大家分享的音乐智能推荐PPT，有些内容和上次的PPT差不多，这次主要和大家分享一个完整的数据挖掘流程，同样的，还是工程方面比较多，学术方面这里有很多大牛。]]></description>
			<content:encoded><![CDATA[<div style="width:425px;text-align:left" id="__ss_2561419"><embed width="510" height="415" flashvars="sessid=BAhDOh9BY3RpdmVTdXBwb3J0OjpPcmRlcmVkSGFzaFsKWwc6DWxhbmd1YWdl%250AIgcqKlsHOgl0ZXN0MFsHOgl1c2VyewYiCXVzZXJpA3XGb1sHOgppbmJveGkA%250AWwc6Em5vdGlmaWNfY291bnRpCg%253D%253D--56a5c08d98a103d6c1c79e7a3d9ca8f5331c745d&amp;pvt=0&amp;doc=musicrecommendersystems-091122193613-phpapp01&amp;version_no=1258940212&amp;presentationId=2561419&amp;totalSlides=27&amp;startSlide=1&amp;inContest=0&amp;preview=no&amp;stitle=music-recommender-systems-2561419&amp;userName=fuchaoqun&amp;has_form=null&amp;form_after_slide_number=null&amp;form_is_blocking=false&amp;hostedIn=slideshare&amp;useHttp=1&amp;autoplay=0" allowfullscreen="true" allowscriptaccess="always" quality="high" bgcolor="#FFFFFF" name="player" id="player" style="" src="http://static.slidesharecdn.com/swf/player.swf" type="application/x-shockwave-flash"/></div>
<p>周末<a href="http://club.blogbeta.com/127.html" target="_blank">beta沙龙</a>和大家分享的<a href="http://www.slideshare.net/fuchaoqun/music-recommender-systems-2515604" target="_blank">音乐智能推荐</a>PPT，有些内容和<a href="http://www.fuchaoqun.com/2009/05/recommender-system/" target="_blank">上次的PPT</a>差不多，这次主要和大家分享一个完整的数据挖掘流程，同样的，还是工程方面比较多，学术方面<a href="http://groups.google.com/group/resys?hl=zh-CN" target="_blank">这里</a>有很多大牛。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fuchaoqun.com/2009/11/music-recommender-systems/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>智能推荐系统</title>
		<link>http://www.fuchaoqun.com/2009/05/recommender-system/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=recommender-system</link>
		<comments>http://www.fuchaoqun.com/2009/05/recommender-system/#comments</comments>
		<pubDate>Mon, 18 May 2009 10:33:19 +0000</pubDate>
		<dc:creator>超群.com</dc:creator>
				<category><![CDATA[Data Mining]]></category>
		<category><![CDATA[KNN]]></category>
		<category><![CDATA[recommender system]]></category>
		<category><![CDATA[slope one]]></category>
		<category><![CDATA[SVD]]></category>
		<guid isPermaLink="false">http://www.fuchaoqun.com/?p=224</guid>
		<description><![CDATA[断断续续的做了大半年歌曲相关性方面的试验，有一些肤浅的体会，工程方面多些，学术上仍很不足，与大家分享，望后来之君少走弯路，抑或被我带入岐途，不当之处，请指正。 PS：前段时间申请了个独立域名：http://www.fuchaoqun.com，烦请订阅feed者更新：http://www.fuchaoqun.com/feed/，原http://chaoqun.17348.com作了301跳转，将来一段时间内亦能访问。]]></description>
			<content:encoded><![CDATA[<div id="__ss_1451423" style="width: 425px; text-align: left;"><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="355" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="src" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=random-090518051254-phpapp01&amp;rel=0&amp;stripped_title=ss-1451423" /><embed type="application/x-shockwave-flash" width="425" height="355" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=random-090518051254-phpapp01&amp;rel=0&amp;stripped_title=ss-1451423" allowscriptaccess="always" allowfullscreen="true"></embed></object>
</div>
<p>断断续续的做了大半年歌曲相关性方面的试验，有一些肤浅的体会，工程方面多些，学术上仍很不足，与大家分享，望后来之君少走弯路，抑或被我带入岐途，不当之处，请指正。</p>
<p>PS：前段时间申请了个独立域名：<a href="http://www.fuchaoqun.com" target="_blank">http://www.fuchaoqun.com</a>，烦请订阅feed者更新：<a href="http://www.fuchaoqun.com/feed/" target="_blank">http://www.fuchaoqun.com/feed/</a>，原<a href="http://chaoqun.17348.com" target="_blank">http://chaoqun.17348.com</a>作了301跳转，将来一段时间内亦能访问。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fuchaoqun.com/2009/05/recommender-system/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>基于Slope One的相关歌曲推荐算法</title>
		<link>http://www.fuchaoqun.com/2009/02/slope-one-for-music-recommender-system/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=slope-one-for-music-recommender-system</link>
		<comments>http://www.fuchaoqun.com/2009/02/slope-one-for-music-recommender-system/#comments</comments>
		<pubDate>Tue, 03 Feb 2009 10:55:29 +0000</pubDate>
		<dc:creator>超群.com</dc:creator>
				<category><![CDATA[Data Mining]]></category>
		<category><![CDATA[music]]></category>
		<category><![CDATA[recommender system]]></category>
		<category><![CDATA[slope one]]></category>
		<category><![CDATA[数据挖掘]]></category>
		<category><![CDATA[歌曲推荐]]></category>
		<guid isPermaLink="false">http://chaoqun.17348.com/?p=142</guid>
		<description><![CDATA[本博客所有原创文章采用知识共享署名-非商业性使用-相同方式共享，转载请保留链接http://chaoqun.17348.com/2009/02/slope-one-for-music-recommender-system/ 不知不觉，研究歌曲相关推荐快半年了，第一篇文章利用orange进行关联规则挖掘完成于2008.08.26，到现在基本搞定基于矩阵奇异值分解(SVD)的协同过滤算法，期间得到了很多朋友的帮助，在此致谢。有些收获，将逐步的分享出来，有兴趣的可以参照研习。 对于Slope One算法，不熟悉的可以参照我之前的文章：Slope one:简单高效的推荐算法，已经被很多人证明有很好的推荐效果。 Slope one算法中有一个很重要的步骤是获取用户的打分数据，这个对很多网站都很费劲，很多用户都会听歌，但大多懒得去给歌曲打分，另外用户打分的时候会比较困惑，该打多少分呢？喜欢这首歌，是打4分还是5分呢？费劲。 我这里给出的是另外一种方法，做法是分析用户的听歌记录，一般网站都会记录这样的记录，统计一段时间内用户的听歌记录，我们得到下面格式的数据： 用户ID    歌曲ID    听歌次数 比如某个片段： 3389    9527    23 3389    9528    56 3306    1211    78 3306    9527    45 表示用户3389听歌曲9527的次数是23，听9528的次数是56，诸如此类。这样的数据当然不能直接用来做Slope one，需要把数据格式化到某个区间。我们分析一下用户听歌的行为，一般来说最喜欢的歌曲听的最多，越喜欢的歌曲听的越多，听的少的歌曲自然不那么喜欢。所以我们可以简单的模拟用户对歌曲的打分： 用户对歌曲的打分 ＝ 用户听此歌曲的次数 / 用户听单首歌曲的最大次数 这样就可以把打分数据规整到0～1之间，还是上面的数据： 3389    9527    23/56 3389    9528    56/56 3306    1211    78/78 3306    9527    45/78 用户听的最多的歌曲打分是1，其他歌曲的打分等于听歌次数除以最大次数，我们就获得了用户的打分数据了。剩下的工作就是按照标准的Slope One流程走了，程序代码可以参考：http://code.google.com/p/openslopeone/ 贴出几个实例大家看看，第一次做的结果，再去做的话应该比这个要好一些： 歌曲 推荐歌曲 南无大悲观世音菩萨   刘小茜 梵音大悲咒   齐豫 大悲咒   齐豫 [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>本博客所有原创文章采用知识共享署名-非商业性使用-相同方式共享，转载请保留链接<a href="http://chaoqun.17348.com/2009/02/slope-one-for-music-recommender-system/" target="_blank">http://chaoqun.17348.com/2009/02/slope-one-for-music-recommender-system/</a></p></blockquote>
<p>不知不觉，研究歌曲相关推荐快半年了，第一篇文章<a href="http://chaoqun.17348.com/2008/08/data-mining-with-python-orange-association_rule/" target="_blank">利用orange进行关联规则挖掘</a>完成于2008.08.26，到现在基本搞定基于矩阵奇异值分解(SVD)的协同过滤算法，期间得到了很多朋友的帮助，在此致谢。有些收获，将逐步的分享出来，有兴趣的可以参照研习。</p>
<p>对于Slope One算法，不熟悉的可以参照我之前的文章：<a href="http://chaoqun.17348.com/2008/09/slope_one/" target="_blank">Slope one:简单高效的推荐算法</a>，已经被很多人证明有很好的推荐效果。</p>
<p>Slope one算法中有一个很重要的步骤是获取用户的打分数据，这个对很多网站都很费劲，很多用户都会听歌，但大多懒得去给歌曲打分，另外用户打分的时候会比较困惑，该打多少分呢？喜欢这首歌，是打4分还是5分呢？费劲。</p>
<p>我这里给出的是另外一种方法，做法是分析用户的听歌记录，一般网站都会记录这样的记录，统计一段时间内用户的听歌记录，我们得到下面格式的数据：</p>
<blockquote><p>用户ID    歌曲ID    听歌次数</p></blockquote>
<p>比如某个片段：</p>
<blockquote><p>3389    9527    23<br />
3389    9528    56<br />
3306    1211    78<br />
3306    9527    45</p></blockquote>
<p>表示用户3389听歌曲9527的次数是23，听9528的次数是56，诸如此类。这样的数据当然不能直接用来做Slope one，需要把数据格式化到某个区间。我们分析一下用户听歌的行为，一般来说<strong>最喜欢的歌曲听的最多，越喜欢的歌曲听的越多，听的少的歌曲自然不那么喜欢</strong>。所以我们可以简单的模拟用户对歌曲的打分：</p>
<blockquote><p><strong>用户对歌曲的打分 ＝ 用户听此歌曲的次数 / 用户听单首歌曲的最大次数</strong></p></blockquote>
<p>这样就可以把打分数据规整到0～1之间，还是上面的数据：</p>
<blockquote><p>3389    9527    23/56<br />
3389    9528    56/56<br />
3306    1211    78/78<br />
3306    9527    45/78</p></blockquote>
<p>用户听的最多的歌曲打分是1，其他歌曲的打分等于听歌次数除以最大次数，我们就获得了用户的打分数据了。剩下的工作就是按照标准的Slope One流程走了，程序代码可以参考：<a href="http://code.google.com/p/openslopeone/" target="_blank">http://code.google.com/p/openslopeone/</a></p>
<p>贴出几个实例大家看看，第一次做的结果，再去做的话应该比这个要好一些：</p>
<table style="border: 1px solid black; width: 400px;" border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td style="border-right:1px solid #000;border-bottom:1px solid #000">歌曲</td>
<td style="border-bottom:1px solid #000">推荐歌曲</td>
</tr>
<tr>
<td style="border-right:1px solid #000;border-bottom:1px solid #000">南无大悲观世音菩萨   刘小茜</td>
<td style="border-bottom:1px solid #000">梵音大悲咒   齐豫<br />
大悲咒   齐豫<br />
观世音菩萨发愿偈.大悲咒   齐豫<br />
大悲咒   邝美云<br />
般若波罗蜜多心经   齐豫<br />
大悲咒   齐豫<br />
清净法身佛   齐豫<br />
阿弥陀佛在心间   小娟<br />
吉祥如意   凤凰传奇</td>
</tr>
<tr>
<td style="border-right:1px solid #000;border-bottom:1px solid #000">好一朵茉莉花   朱昌耀</td>
<td style="border-bottom:1px solid #000">理查德-克莱德曼《梦中的婚礼》   合辑（欧美）<br />
茉莉花（汉族民歌）   雷佳<br />
好一朵茉莉花-笛子   合辑（内地）<br />
最浪漫的事   赵咏华<br />
沧海一声笑   罗文<br />
how can i keep from singing   Enya<br />
生死不离   成龙<br />
羞答答的玫瑰静悄悄地开   孟庭苇</td>
</tr>
<tr>
<td style="border-right:1px solid #000">过三关   吴卓羲</td>
<td>别怪她   吴卓羲<br />
生命有一种绝对   五月天<br />
春日(电视剧&#8217;春日&#8217;主题曲)   吴卓羲<br />
爱玛仕小姐   吴卓羲<br />
别人问起   吴卓羲<br />
别怪她(Dance Remix)   吴卓羲<br />
别怪她 &#8211; 吴卓羲   合辑<br />
米老鼠   五月天<br />
One Last Dance   Craig David<br />
新不了情   薛凯琪</td>
</tr>
</tbody>
</table>
<p>Tips:</p>
<p>做Slope one之前最好过滤掉那些超热门的歌曲，因为很多人都听过了，会让这些歌曲经常出现在推荐结果里面，我的感觉是过滤掉Top100就可以了。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fuchaoqun.com/2009/02/slope-one-for-music-recommender-system/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>slope one算法在Netflix Prize上的表现</title>
		<link>http://www.fuchaoqun.com/2009/01/slope-one-on-netflix-prize/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=slope-one-on-netflix-prize</link>
		<comments>http://www.fuchaoqun.com/2009/01/slope-one-on-netflix-prize/#comments</comments>
		<pubDate>Tue, 06 Jan 2009 09:40:58 +0000</pubDate>
		<dc:creator>超群.com</dc:creator>
				<category><![CDATA[Data Mining]]></category>
		<category><![CDATA[netflix prize]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[slope one]]></category>
		<guid isPermaLink="false">http://chaoqun.17348.com/?p=125</guid>
		<description><![CDATA[本博客所有原创文章采用知识共享署名-非商业性使用-相同方式共享，转载请保留链接http://chaoqun.17348.com/2009/01/slope-one-on-netflix-prize/ 前段时间做了个slope one算法在Netflix Pirze上的测试，关于slope one算法可以参考我之前写的文章:Slope one:简单高效的推荐算法，Netflix Prize是DVD在线租赁商Netflix于2006年10月2日发起一项竞赛：任何组织或个人只要能够提交比它现有电影推荐系统Cinematch效果好10%的新方法，就可以获得100万美元的奖金。竞赛最多持续到2011年10月2日。同时，NetflixPrize还提供每年5万美元的年度进步奖。为什么是五万美元的年度进步奖呢？因为100万美元大奖存银行，每年的利息是5万美元，看来老外是挺有意思的。 Netflix Pirze采用RMSE作为评测的标准，RMSE中文的意思是均方根误差，计算的公式：  其中Ot是原始数据，Ft是预测数据，n是样本数。 目前最好的成绩是有BellKor in BigChaos创造的0.8598（2009.01.05数据），比官方数据提高9.63％，这样可以推算出官方的数据应该是0.9492左右，BellKor in BigChaos也是2008年度进步奖的获得者，他们更新数据的频率很高，如不出意外，最后的大奖应该是他们的。 目前的方向大多是SVD奇异值分解，可以参见BellKor in BigChaos他们的文章http://www.netflixprize.com/community/viewtopic.php?id=1193，这里有一个开源的项目nprize，也是一个SVD处理Netflix Prize的模型，大部分代码是Python的（国外很多用Python做数据挖掘和自然语言处理的案例），成绩到了0.9046，折算比官方数据要高4.70％，如果你想拿SVD热热手，可以看看这个开源项目，过些日子我会写一些SVD应用在推荐系统方面的文章，着急的可以阅读吴军的文章数学之美 系列十八 － 矩阵运算和文本处理中的分类问题。 由于对slope one算法比较熟悉，决定看看slope one算法在netflix pirze上的表现如何，netflix prize训练数据太大，大概有1亿多条的打分记录，OpenSlopeOne在运行效率方面不是很好，OpenSlopeOne处理几百万上千万的打分数据还是非常不错的，更多的话需要更多的机器水平扩展，如果有好的Mysql DBA可以尝试优化一下mysql server的参数，估计效果会很好，当然也需要有好的机器配合，我这里是用Python写的一个程序，多进程＋多线程＋手工Map-Reduce，需要源代码的话可以找我拿。 跑出来的结果不是很好，我的得分是0.9829，比官方数据差0.0337，大概差3.55％，分析原因可能是用户打分的数据普遍偏高，人们大多给自己喜欢的电影打分，对于不喜欢的数据打分就少很多了，下面是打分数据的分布情况： mysql&#62; select rating,count(*) as times from nf_log group by rating; +--------+----------+ &#124; rating &#124; times    &#124; +--------+----------+ &#124;      1 &#124;  4617904 &#124; &#124;      2 &#124; [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>本博客所有原创文章采用<a href="http://creativecommons.org/licenses/by-nc-sa/2.5/cn/" target="_blank"><span style="color: #356aa0;">知识共享署名-非商业性使用-相同方式共享</span></a>，转载请保留链接<a href="http://chaoqun.17348.com/2009/01/slope-one-on-netflix-prize/">http://chaoqun.17348.com/2009/01/slope-one-on-netflix-prize/</a></p></blockquote>
<p>前段时间做了个slope one算法在<a href="http://www.netflixprize.com/" target="_blank">Netflix Pirze</a>上的测试，关于slope one算法可以参考我之前写的文章:<a href="http://chaoqun.17348.com/2008/09/slope_one/" target="_blank">Slope one:简单高效的推荐算法</a>，Netflix Prize是DVD在线租赁商<a href="https://www.netflix.com" target="_blank">Netflix</a>于2006年10月2日发起一项竞赛：任何组织或个人只要能够提交比它现有电影推荐系统Cinematch效果好10%的新方法，就可以获得100万美元的奖金。竞赛最多持续到2011年10月2日。同时，NetflixPrize还提供每年5万美元的年度进步奖。为什么是五万美元的年度进步奖呢？因为100万美元大奖存银行，每年的利息是5万美元，看来老外是挺有意思的。</p>
<p>Netflix Pirze采用RMSE作为评测的标准，RMSE中文的意思是均方根误差，计算的公式： </p>
<p><img class="alignnone" src="http://farm2.static.flickr.com/1194/3171843795_1251bcff35.jpg" alt="" /></p>
<p>其中O<sup>t</sup>是原始数据，F<sup>t</sup>是预测数据，n是样本数。</p>
<p>目前最好的成绩是有<a href="http://www.commendo.at/prize08/team.html" target="_blank">BellKor in BigChaos</a>创造的0.8598（2009.01.05数据），比官方数据提高9.63％，这样可以推算出官方的数据应该是0.9492左右，BellKor in BigChaos也是2008年度进步奖的获得者，他们更新数据的频率很高，如不出意外，最后的大奖应该是他们的。</p>
<p>目前的方向大多是SVD奇异值分解，可以参见BellKor in BigChaos他们的文章<a href="http://www.netflixprize.com/community/viewtopic.php?id=1193" target="_blank">http://www.netflixprize.com/community/viewtopic.php?id=1193</a>，这里有一个开源的项目<a href="http://code.google.com/p/nprize/" target="_blank">nprize</a>，也是一个SVD处理Netflix Prize的模型，大部分代码是Python的（国外很多用Python做数据挖掘和自然语言处理的案例），成绩到了0.9046，折算比官方数据要高4.70％，如果你想拿SVD热热手，可以看看这个开源项目，过些日子我会写一些SVD应用在推荐系统方面的文章，着急的可以阅读吴军的文章<a href="http://www.googlechinablog.com/2007/01/blog-post.html" target="_blank">数学之美 系列十八 － 矩阵运算和文本处理中的分类问题</a>。</p>
<p>由于对slope one算法比较熟悉，决定看看slope one算法在netflix pirze上的表现如何，netflix prize训练数据太大，大概有1亿多条的打分记录，<a href="http://code.google.com/p/openslopeone/" target="_blank">OpenSlopeOne</a>在运行效率方面不是很好，OpenSlopeOne处理几百万上千万的打分数据还是非常不错的，更多的话需要更多的机器水平扩展，如果有好的Mysql DBA可以尝试优化一下mysql server的参数，估计效果会很好，当然也需要有好的机器配合，我这里是用Python写的一个程序，多进程＋多线程＋手工Map-Reduce，需要源代码的话可以找我拿。</p>
<p>跑出来的结果不是很好，我的得分是0.9829，比官方数据差0.0337，大概差3.55％，分析原因可能是用户打分的数据普遍偏高，人们大多给自己喜欢的电影打分，对于不喜欢的数据打分就少很多了，下面是打分数据的分布情况：</p>
<blockquote>
<pre>mysql&gt; select rating,count(*) as times from nf_log group by rating;
+--------+----------+
| rating | times    |
+--------+----------+
|      1 |  4617904 |
|      2 | 10131945 |
|      3 | 28810978 |
|      4 | 33750581 |
|      5 | 23167830 |
+--------+----------+</pre>
</blockquote>
<p>一目了然，用户对不喜欢的电影打分甚少，而且用户的平均打分达到了3.6043，所以最后算出来的打分值普遍偏高，RMSE的表现当然差了，<a href="http://www.daniel-lemire.com/fr/documents/publications/lemiremaclachlan_sdm05.pdf" target="_blank">Slope one算法</a>里面有个BI-POLAR SLOPE ONE来应对这种问题，有兴趣的可以尝试一下。</p>
<p>尽管得分情况不是很好，我用probe的数据测试看，slope one算法对用户喜欢的电影预测还是很好的，不擅长的是对用户不喜欢的电影的预测，对用户打分为1的预测普遍在3以上，拖累了它的表现。</p>
<p>我们一般要做的是对用户喜欢的东西进行推荐，slope one还是一个很不错的选择。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fuchaoqun.com/2009/01/slope-one-on-netflix-prize/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>OpenSlopeOne: An Open Source Project implementing Slope One in PHP&amp;MySQL</title>
		<link>http://www.fuchaoqun.com/2008/09/openslopeone-open-source-php-mysql/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=openslopeone-open-source-php-mysql</link>
		<comments>http://www.fuchaoqun.com/2008/09/openslopeone-open-source-php-mysql/#comments</comments>
		<pubDate>Fri, 12 Sep 2008 15:37:34 +0000</pubDate>
		<dc:creator>超群.com</dc:creator>
				<category><![CDATA[Data Mining]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Collaborative filtering]]></category>
		<category><![CDATA[openslopeone]]></category>
		<category><![CDATA[slope one]]></category>
		<guid isPermaLink="false">http://chaoqun.17348.com/?p=68</guid>
		<description><![CDATA[About OpenSlopeOne OpenSlopeOne is an implementation of Slope One based on PHP&#38;MySQL, it&#8217;s an open source project under GPL V3. It aims to a fast way to use Slope One with PHP&#38;MySQL, and it can handle tons of data. It&#8217;s localed on Google Code:     http://code.google.com/p/openslopeone/ You can get the latest code here:     svn [...]]]></description>
			<content:encoded><![CDATA[<p><strong>About OpenSlopeOne</strong></p>
<p>OpenSlopeOne is an implementation of Slope One based on PHP&amp;MySQL, it&#8217;s an open source project under GPL V3.</p>
<p>It aims to a fast way to use Slope One with PHP&amp;MySQL, and it can handle tons of data.</p>
<p>It&#8217;s localed on Google Code:</p>
<p>    <a href="http://code.google.com/p/openslopeone/" target="_blank">http://code.google.com/p/openslopeone/</a></p>
<p>You can get the latest code here:</p>
<p>    svn checkout https://openslopeone.googlecode.com/svn/trunk/openslopeone</p>
<p>it uses Zend_Db as its database layer.PHP5&amp;MySQL5 or higher.</p>
<p><strong>About Slope One</strong></p>
<p>Slope One is a family of algorithms used for <a href="http://en.wikipedia.org/wiki/Collaborative_filtering" target="_blank">Collaborative filtering</a> introduced in Slope One Predictors for Online Rating-Based Collaborative Filtering by <a href="http://www.daniel-lemire.com/fr/abstracts/SDM2005.html" target="_blank">Daniel Lemire</a> and Anna Maclachlan.</p>
<p>You can check <a href="http://en.wikipedia.org/wiki/Slope_One" target="_blank">http://en.wikipedia.org/wiki/Slope_One</a> to know more about Slope One.</p>
<p><strong>What&#8217;s the difference between OpenSlopeOne and Vogoo?</strong></p>
<p>As you know,there is also another implementation of Slope One based on PHP&amp;MySQL:<a href="http://sourceforge.net/projects/vogoo" target="_blank">Vogoo</a></p>
<p>What&#8217;s the difference?</p>
<p>OpenSlopeOne aims to a fast way to use Slope One with PHP&amp;MySQL, so it cares more about performance.</p>
<p>OpenSlopeOne has two modes to init the slope one table, one is based on pure PHP, the other is based on MySQL procedure, as you know, it will be much faster, and you can use it with any other programming language.</p>
<p>the bottleneck of Vogoo(read the source code of cronslope.php Line 70~Line 150, version 2.2) is to check whether the record exits or not. If there is tons of data, the performance is very bad.</p>
<p>In OpenSlopeOne, first I get distinct item ids, then foreach item id, i calculate the slope one of it. I do not have to check whether if it exits, and i am faster.</p>
<p><strong>Installation</strong></p>
<p>1. Modify the config ini file: config.ini.php</p>
<p>   ; &lt;?php exit; ?&gt; DO NOT REMOVE THIS LINE<br />
   [database]<br />
   host                 = localhost ; database host name or ip<br />
   username             = root      ; database user name<br />
   password             =           ; user password<br />
   dbname               =           ; database name<br />
   port                 = 3306      ; database host port,3306 as default<br />
   adapter              = PDO_MYSQL ; PDO_MYSQL or MYSQLI</p>
<p>2. Create user&#8217;s rating table:</p>
<p>    CREATE TABLE IF NOT EXISTS `oso_user_ratings` (<br />
      `user_id` int(11) NOT NULL,<br />
      `item_id` int(11) NOT NULL,<br />
      `rating` decimal(14,4) NOT NULL default &#8217;0.0000&#8242;,<br />
      KEY `item_id` (`item_id`),<br />
      KEY `user_id` (`user_id`,`item_id`)<br />
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8;</p>
<p>there is a sample data file:sample.data, you can load it into the table</p>
<p>    load data infile &#8216;sample.data&#8217; into table oso_user_ratings;</p>
<p>3. Create slope one table:</p>
<p>    CREATE TABLE IF NOT EXISTS `oso_slope_one` (<br />
      `item_id1` int(11) NOT NULL,<br />
      `item_id2` int(11) NOT NULL,<br />
      `times` int(11) NOT NULL,<br />
      `rating` decimal(14,4) NOT NULL<br />
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8;</p>
<p><strong>Usage<br />
</strong><br />
The main also the only PHP file is OpenSlopeOne.php, you must include it in your own PHP file:</p>
<p>    require &#8216;./OpenSlopeOne.php&#8217;;</p>
<p>    $openslopeone = new OpenSlopeOne();</p>
<p>1. Init the slope one table:</p>
<p>before you get the recommendtion, you must pre-computation the slope one table.</p>
<p>    $openslopeone-&gt;initSlopeOneTable($factory);</p>
<p>you can specify the mode use &#8216;PHP&#8217; or &#8216;MySQL&#8217;,If you user &#8216;PHP&#8217; mode, it&#8217;s a pure php implementation, and it might be very slow when there is tons of data.You can also use &#8216;MySQL&#8217; mode, it&#8217;s based on mysql procedure, and it will be mutch faster.</p>
<p>If you have tons of data to pre-computation, a good advice is that you do not index any colum on oso_slope_one before it done.</p>
<p>2. Get recommended items by item&#8217;s id</p>
<p>    $recommendedItems = $openslopeone-&gt;getRecommendedItemsById(9527);</p>
<p>3. Get recommended items by user&#8217;s id</p>
<p>    $recommendedItems = $openslopeone-&gt;getRecommendedItemsByUser(30002);<br />
<strong>About Author</strong></p>
<p>I am a PHP programmer in China, my blog:http://chaoqun.17348.com, mostly written in Chinese.</p>
<p>You can contack me with gtalk or mail:fuchaoqun@gmail.com</p>
<p>Welcom to any bug and advice.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fuchaoqun.com/2008/09/openslopeone-open-source-php-mysql/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
<!-- WP Super Cache is installed but broken. The path to wp-cache-phase1.php in wp-content/advanced-cache.php must be fixed! -->
