Apriori简介
Apriori 算法可以说是经典的亲和性分析算法。它只从数据集中频繁出现的商品中选取共同出现的商品组成频繁项集 ( frequent
itemset ),避免了上述复杂度呈指数级增长的问题。一旦找到频繁项集,生成关联规则就很容易了。
Apriori 算法背后的原理简洁却不失巧妙。首先,确保了规则在数据集中有足够的支持度 。 Apriori 算法的一个重要参数就是最小
支持度。比如,要生成包含商品 A 、 B 的频繁项集( A, B ),要求支持度至少为 30 ,那么 A 和 B 都必须至少在数据集中出现 30
次。更大的频繁项集也要遵守该项约定,比如要生成频繁项集( A, B, C, D ),那么子集 (A, B, C) 必须是频繁项集(当然 D 自己
也要满足最小支持度标准)。
生成频繁项集 后,将不再考虑其他可能的却不够频繁的项集(这样的集合有很多),从而大大减少测试新规则所需的时间。
其他亲和性分析算法有 Eclat 和频繁项集挖掘算法 ( FP-growth )。从数据挖掘角度看,这些算法比起基础的 Apriori 算法有很多
改进,性能也有进一步提升。接下来,先来看一下最基础的 Apriori 算法。
测试数据请下载 这里
余弦相似度
余弦相似度 通过测量两个向量的夹角的余弦值来度量它们之间的相似性。0度角的余弦值是1,而其他任何角度的余弦值都不大于1;并且其最小值是-1。从而两个向量之间的角度的余弦值确定两个向量是否大致指向相同的方向。两个向量有相同的指向时,余弦相似度的值为1;两个向量夹角为90°时,余弦相似度的值为0;两个向量指向完全相反的方向时,余弦相似度的值为-1。这结果是与向量的长度无关的,仅与向量的指向方向相关。余弦相似度通常用于正空间,因此给出的值为0到1之间。
注意这上下界对任何维度的向量空间中都适用,而且余弦相似度最常用于高维正空间。例如在信息检索中,每个词被赋予不同的维度,而一个文档由一个向量表示,其各個维度上的值对应于该词在文档中出现的频率。余弦相似度因此可以给出两篇文档在其主题方面的相似度。
另外,它通常用于文本挖掘中的文件比较。此外,在数据挖掘领域中,会用到它来度量集群内部的凝聚力。
公式如下:
$$ \cos(x,y) = \frac{x \cdot y}{||x|| \cdot ||y||} $$
其中: “⋅”表示数量积. “||x||”表示向量x的模, 计算公式是:
$$ \sqrt{\sum_{i=1}^{n}x_{i}^{2}} $$
介绍
Slope One算法是一种比较流行的基于物品的协同过滤算法, 最大的优点就是简单. 它是在一篇名为: Slope One: 基于在线评分系统的协同过滤算法的论文中提出的.
用一个简单的例子来了解它. 假设Amy给SPY打了3分, Whitney Houston打了4分; Ben给SPY打了4分. 来预测Ben会给Whitney Houston打几分.
PSY | Whitney Houston | |
---|---|---|
Amy | 3 | 4 |
Ben | 4 | ? |
先来简单预测一下: 由于Amy给Whitney Houston打的分数比PSY高一分, 所以预测Ben也会给高一分, 即5分.
Tornado 源码阅读
准备开始学习django的文档和源代码了,先总结一下看tornado源码的收获,防止忘记。
这里写的是tornadov1.2的代码,因为我看了一遍4.3版本,和1.2思路相差不大,只是
utils更多了,1.2版本代码量少,更有利于理清思路。列出我们将会涉及到的文件:
tree
.
├── httpserver.py
├── httputil.py
├── __init__.py
├── ioloop.py
├── iostream.py
├── web.py
自上而下 - 总体概览
首先,我们来一张图,表明tornado整体的框架,但是并不涉及tornado中所有文件和类,
只是其中一部分而已。
最近在处理公司的业务逻辑时碰到了分表的问题, 查了半天资料只发现了一种解决方案, 具体链接在 这里
但是不太符合我的想法, 所以我自己做了一些修改, 比如 我要对日志进行分表, 可以如下实现:
|
在github上看到这个python面试题的总结,觉得非常有用, 特别记录一下。
又是一年过去了, 回首过去一年的工作经历, 踩了太多的坑,也填了一些坑。
项目
15年做了2个项目:
- 腾达路由管理
这个项目最后并未上线,总总原因导致的结果,在这里就不提了。这个项目进一步加深了sqlalchemy和tornado的理解。同时也用到了angular,这是我在前端即backbone后又一次尝试。总体感觉不错。
- 千里眼(其实还是百米的路由器管理后台)
我负责了核心的api部分,同时也负责对接百万点(这个是百米的广告管理平台)数据。主要还是用了tornado和sqlalchemy。但是由于前期的规划和实现方法的问题,导致了很多问题,比如mysql的慢查询,分页查询等等问题,这些坑我填了好久,有些甚至至今未平!
当然,我也用到了celery框架,用过之后才发现这个框架的不凡,但是由于我是第一次用,有些地方不是很理解,也踩出了一些坑。
- 个人blog改写
原来的blog是基于zinnia的,出于学习的目的,把它用django-rest-framework和angular重写了。就是现在的blog。
当前网速较慢或者你使用的浏览器不支持博客特定功能,请尝试刷新或换用Chrome、Firefox等现代浏览器