2006 年 12 月,国际会议 IEEE International Conference on Data Mining(ICDM)评选出了数据挖掘领域的十大经典算法:C4.5, k-Means, SVM, Apriori, EM, PageRank, AdaBoost, kNN, Naive Bayes, and CART.
PageRank 是早期 Google 搜索的核心算法,决定了搜索结果中的网页展示顺序
PageRank 算法最初用于网页权重的计算,它将每个网作为一个节点,网页间的超链接作为边,而最终的网页 X 权重描述了以 X 为起点,通过超链接进行随机游走 $N$ 次后,再次返回网页 X 的概率。同时为了防止随机游走进入死循环,每次随机游走还有概率 $=\alpha$ 的情况随机跳转到任意网页,不同网页的随机跳转概率是相等的
PageRank 核心思想:
- 根据网站的外部链接和内部链接的数量和质量衡量网站的价值
- 如果重要性为 $PR(i)$ 的页面 $i$ 有 $l_i$ 个外链(出度),则每个
背景故事:啤酒与尿布
Aprior 算法的 3 个关键评价指标:
- 支持度(Support):商品 X 和商品 Y 同时在数据集中出现的概率
$$ Support(X,Y) = P(XY) = \frac{number(XY)}{num(All Samples)} $$ 2. 置信度(Confidence):商品 Y 出现后,商品 X 出现的概率 $$ Confidence(X \Leftarrow Y) = P(X|Y)=P(XY)/P(Y) $$ 3. 提升度(Lift):商品 X 出现的情况中,商品 Y 也出现的概率 $$ Lift(X \Leftarrow Y) = P(X|Y)
“啤酒与尿布”,购物篮分析的经典案例
该故事据传来自20世纪90年代的美国沃尔玛超市的销售数据分析:在某些特定的情况下,“啤酒”与“尿布”两件看上去毫无关系的商品会经常出现在同一个购物篮中
这种独特的销售现象引起了管理人员的注意,其背后是美国育婴家庭的分工习惯:母亲一般在家中照看婴儿,年轻的父亲前去超市购买尿布。父亲在购买尿布的同时,往往会顺便为自己购买啤酒,这样就会出现啤酒与尿布这两件看上去不相干的商品经常会出现在同一个购物篮的现象。
沃尔玛发现了这一独特的现象,并在卖场尝试将啤酒与尿布摆放在相同的区域;沃尔玛从上个世纪 90 年代尝试将艾格拉沃发明的商品关联关系的计算方法—— Apri
K 近邻算法(k-nearest neighbors, KNN)是一种很基本的机器学习方法
算法步骤:给定样本,寻找最近的 K 个样本进行(分类/回归)预测
KNN的 3 个核心要素:
- K 值的选择,较小时容易过拟合;较大时泛化性好,但训练误差大
- 距离度量方式,比如欧氏距离、曼哈顿距离(常见距离测度)
- 决策规则,分类问题常用投票法,回归问题常用平均法
KNN 的主要优点:
- 理论成熟,思想简单,既可以用来做(非线性)分类也可以用来做回归
- 训练时间复杂度比支持向量机之类的算法低,仅为 O (n)
- 和朴素贝叶斯之类的算法比,对数据没有假设,准确度高,对异常点不敏感
- 对于类域的交叉或重叠较多
前置知识:图论基础
代码实践:图特征工程_Python实现
节点中心性度量
度中心性 (Degrree Centrality):
- 用节点的度来描述节点的重要性,即邻接节点数越多的节点越重要
- 在不同网络间比较时,需要除以网络总节点数进行标准化
特征向量中心性 ( Eigenvector Centrality): $$ c_v=\frac{1}{\lambda}\sum_{u\in N(v)}c_u $$
- 节点的重要性取决于邻接节点的重要性之和
- 其本质对应一个图邻接矩阵的特征向量求解问题
介数中心性
PyG (PyTorch Geometric),基于 PyTorch 编写和训练图神经网络 (GNN)
- 集成了各种针对图或其他不规则结构的深度学习方法
- 包括易用小批量加载器,可在许多小型和单个巨型图上运行
- 多 GPU 支持,torch.compile 支持,DataPipe 支持
- 内置大量基准数据集、支持神经网络的
NetworkX 是一个 Python 包,常用于创建、操作和挖掘图/复杂网络
- 支持以标准和非标准数据格式加载和存储网络
- 生成多种类型的随机和经典网络;网络可视化
- 分析网络结构、构建网络模型、设计新的网络算法
本教程默认使用 NetworkX=3.2.1
1 图的基本操作
1.1 图的创建与类型
G = nx.Gr"切图仔"(2006)
- 在 css3 之前,前端开发者能做的事情很有限,前端语言的能力非常薄弱
- 一个简单的圆角矩形样式要拼八张图片,更别提动画阴影之类的特效
- 大量的工作时间都是在拆卸设计稿,然后将做完后的静态页面交给后端
jQuery 问世(2006)
- jQuery 是对原生 js 的封装,简化了繁琐的 js 开发
- 开发人员可以更容易地操作 html 、处理事件、创建动画和发起 AJAX 请求
- 前端开发者已经可以承担一部分交互了,比如异步表单之类的
- 最终实现较为稳定的开发方式:DIV+CSS+jQuery+后端渲染
随着 web 项目开发越来越复杂,原生 cc