问答 第291页

【大部分人都理解错了的FPgrowth算法】 摘要 韩家炜教授等人提出FP-growth(Frequent Pattern growth)算法是频繁模式(Frequent Pattern, FP)挖掘领域的经典算法,其高效性能的背后是强大的信息压缩树——频繁模式树(Frequent Pattern Tree, FP...【怎么拉黑淘宝店铺?】 截止到2020年6月30日止,淘宝暂时没有可以把店铺拉黑的功能,但是如果想拒收某淘宝店家的消息,可以借助软件把客服加入黑单。将淘宝店铺加入黑名单的操作方法如下。1、打开千牛在底部的菜单栏中选择“消息”。2、打开想要拉黑店家的对话框,点击右上“人头标志”。3、点击左上角的...

大部分人都理解错了的FPgrowth算法

摘要 韩家炜教授等人提出FP-growth(Frequent Pattern growth)算法是频繁模式(Frequent Pattern, FP)挖掘领域的经典算法,其高效性能的背后是强大的信息压缩树——频繁模式树(Frequent Pattern Tree, FPTree),但在构建FPTree的过程中很容易忽略一些关键的步骤,如正确的频繁模式顺序(Frequent Pattern Ordering, FPO)和排序结果的稳定性,这篇文章从原论文出发,分析当前网络上高点击量的复现文章的不当之处,给出一个较为合理的复现方法。

引言
FP-growth算法由韩家炜[1]等人于2000年提出,其中FPTree是使得这一算法相比Aprioris等算法较为高效的关键数据结构,FPTree将数据库中的所有事务(Transactions)高度压缩成树的路径,所有的频繁项(Frequent Items, FIs)都成为树的一个节点,每个节点都拥有相应的计数,代表该FI在数据库中出现的次数,其中叶子节点的计数等于前向遍历路径中的FIs出现在数据库中的次数。因此所有的挖掘工作都以最初的FPTree为中心展开,而在构建一棵FPTree时,核心步骤在于对每一条事务进行降序排序。但是,在这一过程中要保证FIs出现顺序的一致性,否则树的结构是不唯一的,那么挖掘的结果就会产生偏差。 这是大部分人在复现的时候容易忽略的一个点,而另外一种情况出现在流行机器学习畅销书 《Machine Learning in Action》(译为:机器学习实践)中,该书的FP-growth的实现版本结果存在随机性。 在网络上我选取了两篇点击量较高的FP-growth的复现文章:

这两篇文章相似程度极高,且都是参考了《Machine Learning in Action》这一书。可见这一错误传播的广泛程度。本文使用的数据集与FP-growth原论文使用的数据集相同,即:

图1: 数据集取自Han J et al.[1]

正确的FPTree如下图所示:

图2: 正确的FPTree取自Han J et al.[1]

之后在所提到的复现文章提供的算法上运行图1的数据集,分析他们的不足之处。另外,本文所使用的Python语言版本为3.7.6。

注: 本文对于所提到的书籍或文章均无恶意,仅从良性学术交流的目的出发,互相学习。由于本人才疏学浅,文中难免出现不妥之处,烦请各位雅正。

他们错在哪?
从前文中,我们知道FPTree的正确性取决于正确顺序的FIs,图1左边为原始数据库中的事务,假定最小支持度(minimum support)为3,那么在第一次扫描数据库之后可以得到如下的FIs:
$$ \langle (f:4) , (c:4) , (a:3) , (b:3) , (m:3) , (p:3) \rangle $$
之后根据FIs的出现次数以降序排序,但是真的这样就可以的到与图1右边一致的排序结果了吗?我们分别以直接降序排序的方法和文章[1,2]所提供的算法来对比测试一下。
使用直接降序排序方法得出结果:
直接排序的结果中$T200, T500$与图1中的结果有较大出入,而这样的排序结果产生的FPTree如下图所示:
图3: 直接降序排序产生的FPTree
显然这样的FPTree是无法得出正确的结果的。这种方法忽略了生成FPTree的两个重要环节,在原论文中描述如下:
(3) If multiple transactions share an identical frequent item set, they can be merged into one with the number of occurrences registered as count. It is easy to check whether two sets are identical if the frequent items in all of the transactions are sorted according to a fixed order.
(4) If two transactions share a common prefix, according to some sorted order of frequent items, the shared parts can be merged using one prefix structure as long as the count is registered properly. If the frequent items are sorted in their frequency descending order, there are better chances that more prefix strings can be shared.
规则(3)阐述的是如果多个事务共享同一个FIs,那么应该让他们的顺序保持一致,以图1的例子来说,$T100, T500$实质是共享FIs的,那么它们应该都表示成$f,c,a,m,p$。而规则(4)则是说如果两个事务拥有同样的前缀,那么在降序排序的情况下,它们的前缀也应高保持一致,以图1来说,$T100, T200$是有共同前缀$f,c$,此时应该保持前缀是一致的,即都应该以$f,c$为前缀。
下面分别讨论文章[1,2]的做法,由于文章[1,2]均参考了《Machine Learning In Action》,自然不会犯直接排序这样的低级错误,但是它所提供的算法真的就完美吗?
文章1所提供的排序代码:
文章2所提供的排序代码:
可以看出两者的排序思想是一致的(因此结果只需给出其中一个的即可),下图展示排序结果:
图4: 不稳定的排序结果
图3中展示两次运行的结果,它们虽然符合了规则(3)(4)的要求,但是两次排序的结果截然不同,这样的结果在Apriori这样的算法中没什么影响,但是在FPTree这样对顺序敏感的结构中却是致命的,这样会导致两棵完全不同的FPTree,进而有不同的Conditional Pattern Base和Conditional Pattern Tree。其原因是它们都是用了frozenset的数据结构,如下图所示:
图5: 不稳定的Frozenset
可以看到两次frozenset的存储结果是不一致的,因为frozenset并不稳定,详情可以见 StackOverflow: 3812429。这样的做法到底对结果的影响有多大?我们评估一下这两个算法的结果,如下图所示:
图6: 不稳定的FI
图5展示的结果中,$a,m$两次排序由于随机性所得出来的FIs完全不一致,而在原论文中正确的FIs如下图所示:
图7: 原论文中的结果
且不论是哪一次的运行结果中以$m$为后缀的FIs都没有包括$a$, 这是一个比较意外的事情,也许是在使用不同语言所提供的数据结构时作者没有考虑清楚,但其思想还是值得学习的。为了完全复现原文的结果,我的一个不成熟的想法是,抛弃set这种方便但不稳定的结构,换成list或者tuple。

一个不成熟的尝试
这里我使用的比较笨拙的方法实现规则(3)(4),对于规则(3)我们只需要检查当前的FIs是否与已存在的路径有完全相同的元素,如果是,则用后者替换即可保证一致性,否则不做任何处理:
其中self.__order_frequent_itemsets就是一个已经存在在FPTree中的FIs数组。而对于规则(4)的处理则比较麻烦,因为检查前缀是一个计算复杂度较高的任务,而且原论文中也没有特别清晰的说明前缀的具体定义,如$f,c,a,m,p$与$c,f,a,b,m$,前者$f,c$可以是后者的一个前缀,而$f,c,a,m$同样也可以作为后者的前缀,并且它们符合计数排序的规则,但是两者的排序结果截然不同。因此我这里考虑的是以$support \; count$为分割标准,如对于$c,f,a,b,m$而言,$f,c$的$support \; count$都为4,而$a,b,m$都为3,但我们不考虑最后一层,因为它们都可能成为叶子节点。因此可以以如下方式实现:
其中self.__fitemsets是一个存储FIs计数的字典。然后我们在构建树的过程中按照以下方式即可既保证一致性也保证稳定性:
最后运行图1的数据集可以得出与原论文一致的FPTree结构:
图8: 本文算法执行的结果
本文实验代码可在附录中下载。

结论
FPTree是非常强大的事务信息压缩结构,其思想贡献以远超FP-growth本身,但FPTree却是对顺序极其敏感,因此在复现的过程中希望各位读者要多加留心,而对于文章[1,2]所提供的算法存在的结果随机性问题,从目前的分析来看的确存在的,而原因可能是多样的,但是如果这样的方法一旦被放入开源框架中危害则是巨大的,所以希望相关的从业人员能够提供更多的改进建议。本文可能还有其他的不当之处,还是烦请各位读者能够慷慨赐教,感谢!

参 考 文 献
[1] Han, J., Pei, J., & Yin, Y. (2000). Mining frequent patterns without candidate generation. ACM sigmod record, 29(2), 1-12.

附 录
继续阅读:大部分人都理解错了的FPgrowth算法

怎么拉黑淘宝店铺?

截止到2020年6月30日止,淘宝暂时没有可以把店铺拉黑的功能,但是如果想拒收某淘宝店家的消息,可以借助软件把客服加入黑单。

将淘宝店铺加入黑名单的操作方法如下。

1、打开千牛在底部的菜单栏中选择“消息”。

2、打开想要拉黑店家的对话框,点击右上“人头标志”。

3、点击左上角的三个点。

4、会出现以下的界面点”举报“。

5、点击“移至黑名单”后出现确定界面。

6、再点击“确定”,这时候这个店铺发的消息就看不到了。

截止到2019年9月9日,淘宝没有将店铺拉黑的这个功能。不喜欢这个店铺,可以将这个店铺对应的客服加入黑名单。

淘宝没有将店铺拉黑的这个功能,有拉黑卖家旺旺的功能。如果您不喜欢这家店铺,您可以取消关注这家店铺,并将这家店铺的旺旺客服添加到黑名单中。这样,把卖家旺旺拉黑了,那么卖家发旺旺消息过来的话,就会看不到了。而且卖家家看到买家的头像,一直都是灰色的,显示不在线。加入黑名单的方法如下:

1、首先第一步,在手机上打开登录好的千牛软件(手机上的旺旺APP软件也可以的),在联系人中找到要拉黑的旺旺联系人,并点击该联系人左边的头像图标进去。

2、然后第二步,在进入到头像的个人资料的页面点击右上角的三个点的图标按钮。

3、最后一步,在底部弹出来的列表选项中点击加入黑名单的选项就可以了。

目前为止淘宝上并没有将淘宝店铺商家拉黑的功能,如果想用平布商家,可以屏蔽商家的旺旺号,将其拉黑就可以屏蔽商家给你发送的任何消息。

首先在计算机端登录旺旺软件,将旺旺号打开,此时可以找到商家的旺旺号,聊天窗口具有直接关闭功能。如果你被卖家恶意骚扰,你可以直接向淘宝客服投诉,让他们为你或王旺软件处理投诉。

拉黑只是阻止了对方和你之间的交流,他对你的行为也被阻止了。这时,你仍然是他的好朋友,但是因为你属于“不正常的关系”,你的存在只能在他的陌生人中。

如果他不在家里的电脑上上网,下次他登录时,你就会从他的陌生人中消失。这也需要腾讯系统的响应时间,有时会滞后!如果你想被列入一个陌生人的黑名单之外的组,这与再次添加这个朋友是相同的验证过程。

淘宝没有将店铺拉黑的这个功能,有拉黑买家的功能。

用自己的卖家账号在电脑上登录到店铺的后台,卖家中心、在这个页面的左侧导航这里,找到:营销中心;鼠标放在右侧的按钮,弹出菜单中点:客户运营平台、进入到客户运营平台的首页。再在左侧这里点:客户列表、右边展开你店铺所有的客户订单信息。找到你需要禁止下单的买家昵称。

在客户级别这里,有一个按钮:添加分组;这个添加分组既可设置买家地址所属省份,亦可以添加禁止下单、在弹出的一列菜单中,在最底部这里,就会看到有:禁止购买、点选:禁止购买;那么,该买家以后都不能在你店铺购物。

在淘宝上拉黑有两种形式,一种是卖家只把买家从旺旺中拉黑,那么买家发旺旺消息给卖家的话,卖家都是看不到了,也无法回复买家的任何消息。而且买家看到卖家的头像,都是一直灰色的,显示不在线。

如果您已经被淘宝卖家在后台添加到【禁止购买】的分组之中,这样会导致您即便已经下单也是提交不了订单,如果您在订单中看到【已经被本店限制购买】就是证明已经被商家拉黑了;

继续阅读:怎么拉黑淘宝店铺?

淘宝宝贝的搜索排名规则是什么

1、默认综合排名=人气+销量+信誉+价格,其中人气=浏览量。2、新品排名靠前:新品就是不存在同款并且第一次上架的产品。上架新品会出现标志,新品标志会保留21天,这21天就是扶持期,排名靠前。3、公益宝贝排名靠前。4、橱窗产品排名靠前: 越到下架时间的产品排名靠前。5、收藏人气高,浏览高的产品排名靠前。6、转化高的产品排名靠前。7、销量高的宝贝排名靠前。...
继续阅读:淘宝宝贝的搜索排名规则是什么

亚马逊平板充电屏幕动不了

请使用 5V 2A的充电器手机充电器多是 5V 1A的 电流不够购买“亚马逊 Kindle fire HD 快速充电器 变压器 USB插头 HP 原装电源”另外,建议关机充电,不要只是锁屏充电...
继续阅读:亚马逊平板充电屏幕动不了

推广语有哪些

推广语有以下几种类型:1. 简洁明了型推广语。这类推广语通常简明扼要,能够迅速传达产品或服务的主要特点。例如:“高效便捷,一键操作。”这样的推广语能够迅速吸引目标客户的注意力。2. 情感共鸣型推广语。这类推广语通过触动消费者的情感,引发共鸣,从而激发购买欲望。例如:“陪伴是最长情的告白,选择我们,让您的生活更加温馨。”通过温馨的氛围营造,让消费者产生情感上的认同。3. 权威专业型推广语。这类推广语强调品牌或产品的专业性和权威性,给消费者以信任感。例如:“全球领先的技术,专业的团队,为您打造最优质的服务。”通...
继续阅读:推广语有哪些

如何向海外华人推广APP?

1. 渠道一:搜索引擎推广针对海外华人推广APP,可以考虑使用当地的搜索引擎,如Google、Bing和Yahoo等。对这些搜索引擎进行详细了解后,我们可先从Google、Bing和Yahoo开始尝试。2. 渠道二:移动网盟推广移动网盟是另一种推广途径,国内的一些知名移动网盟如多盟、有米、inmobi等,都有海外事业部,他们拥有独特的海外资源。我们可以考虑与这些网盟合作,进行APP的激活推广。3. 渠道三:社交平台和博客海外社交平台如Facebook、Twitter等,以及博客平台如Google+、Word...
继续阅读:如何向海外华人推广APP?

我是一名2013届本科毕业生,现在进入了华润万家运营管理培训生岗位实习...

营运就是在卖场做管理,工作环境比较恶劣,看你能不能放下身段,泡在卖场里,如果能还是不错的。前景的话看个人,要熬得住。估计升到店长要个八年左右把。店长目前年薪应该在15万左右,其他的不好说。运营跟财务还是有区别的,做的工作不一定对口。 MT 要靠自己的努力证明自己,学习零售行业各方面的知识,以及锻炼合作能力,提升思考分析能力等等我在总部,公司工资偏低,老油条比较多,蹲着就不会走了那种,一般是在总部做采购助理,然后有机会调外区,还有就是要经常无条件加班,你看下适合你就来吧!营运这边我不清楚请问你是哪个区的?...
继续阅读:我是一名2013届本科毕业生,现在进入了华润万家运营管理培训生岗位实习...

seo排名优化软件好不好用?有用过没?

百度SEO排名优化很好用的。百度SEO快排系统是一款高效、智能的工具,它能够帮助您的网站快速提升在百度搜索引擎中的排名。相较于传统的SEO优化方法,这个系统大大缩短了优化周期,只需7天便可实现霸屏效果。百度SEO快排系统基于大数据分析和机器学习技术,能够全面优化您的网站,从内容、链接、用户体验等多个方面进行综合优化。它能够帮助您的网站获得更多的有机流量,提高用户的点击率和停留时间,进而提升排名。能够根据不同的行业和关键词进行定制化的优化方案,确保您的网站在搜索结果中脱颖而出。百度SEO排名使用注意事项使用百...
继续阅读:seo排名优化软件好不好用?有用过没?

淘宝网挂钟 怎么样?

可以的,选择一个合适的厂家,合适的产品,那么商品都是非常好的。千万不要贪图便宜去买特别便宜的,那样质量不能得到保证。这个还算是比较不错的,因为在这上面购买的话,比在店里面能够节约100块钱左右,相对来说比较实惠,而且质量还是差不多的,可以选择在这里购买。可以买啊,买品牌的样式好的都可以尝试...
继续阅读:淘宝网挂钟 怎么样?

在什么网站可以及时看到日本漫画,此外,想看台湾配音的日本动漫...

株式会社。(台湾配音的动画最经典的莫过于名侦探柯南,那些一般不提供观看点的,因为涉及到一些复杂版权问题,只能从电视或视频网站观看网友录制的作品)土豆或http://www.u17.com/日本漫画:爱漫画——http://www.imanhua.com/台版配音暂时不知道我一般在贴吧看。。。贴吧更会比较快吧。。。台配的话搜国语版一般都会出来的说。178漫画怎么样?...
继续阅读:在什么网站可以及时看到日本漫画,此外,想看台湾配音的日本动漫...