【发布时间】:2012-04-30 09:41:28
【问题描述】:
this Hadoop tutorial 的hive_trend_mapper.py 程序中用于计算维基百科趋势的公式背后的基本原理是什么?
实际上有两个组成部分:每月趋势和每日趋势。我将关注每日趋势,但类似的问题也适用于每月趋势。
在每日趋势中,pageviews 是该主题每天浏览量的数组,每天一个元素,total_pageviews 是该数组的总和:
# pageviews for most recent day
y2 = pageviews[-1]
# pageviews for previous day
y1 = pageviews[-2]
# Simple baseline trend algorithm
slope = y2 - y1
trend = slope * log(1.0 +int(total_pageviews))
error = 1.0/sqrt(int(total_pageviews))
return trend, error
我表面上知道它在做什么:它只查看过去一天的变化 (slope),并将其扩展到 1+total_pageviews (log(1)==0) 的日志,所以这个比例因子是非负的)。它可以被视为将当月的总浏览量视为权重,但随着它的增长而缓和 - 这样,总浏览量不再对“足够流行”的事物产生影响,但同时对无关紧要的事物产生重大变化。没有那么重。
但是为什么要这样做呢?为什么我们要打折最初不受欢迎的东西?大增量不应该更多对于持续流行度较低的商品,而less对于已经流行的商品(大增量可能在一小部分范围内)标准差)?作为稻草人,何不干脆把y2-y1 搞定?
error 有什么用处?本教程并没有真正有意义地再次使用它。再说一次,它也没有告诉我们trend 是如何使用的——这是最终产品中绘制的内容,对吗?
我在哪里可以阅读这里的理论背景(最好是介绍性的)?这种疯狂有名字吗?这是某处的教科书公式吗?
提前感谢您的任何回答(或讨论!)。
【问题讨论】:
标签: algorithm