分类目录归档:algorithm

常见哈希算法

MD5:32 位,单向哈希,不可逆,速度快,破解难度低

SHA256:256 位,单向哈希,不可逆,速度较快,破解难度中等

BCrypt:可变位数,单向哈希,不可逆,速度慢,破解难度高

PBKDF2:可变位数,单向哈希,不可逆,速度可调,破解难度可调

Scrypt:可变位数,单向哈希,不可逆,速度慢,破解难度高

加盐,在输入信息中随机添加字符串(salt)以提高哈希算法的安全性

MD5 算法

MD5 消息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以

Read more

PageRank 排序算法

PageRank 是早期 Google 搜索的核心算法,决定了搜索结果中的网页展示顺序

PageRank 核心思想:

  • 根据网站的外部链接和内部链接的数量和质量衡量网站的价值
  • 如果重要性为 $PR(i)$ 的页面 $i$ 有 $l_i$ 个外链(出度),则每个链接的价值为 $PR(i)/l_i$
  • 因此,页面 $j$ 的重要性(表示为 $PR(j)$ )是其链接上的价值总和

$$PR(j) = \sum_{i \rightarrow j} \frac{PR(i)}{l_i}$$

上式最大的问题在于忽略了"不存在外链的特殊页面"

因此 PageRank 算法引入了阻尼系

Read more

Apriori 关联规则算法

背景故事:啤酒与尿布

Aprior 算法的 3 个关键评价指标:

  1. 支持度(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)

Read more

KNN 最近邻算法

K 近邻算法(k-nearest neighbors, KNN)是一种很基本的机器学习方法

算法步骤:给定样本,寻找最近的 K 个样本进行(分类/回归)预测

KNN的 3 个核心要素:

  • K 值的选择,较小时容易过拟合;较大时泛化性好,但训练误差大
  • 距离度量方式,比如欧氏距离、曼哈顿距离(常见距离测度
  • 决策规则,分类问题常用投票法,回归问题常用平均法

KNN 的主要优点:

  • 理论成熟,思想简单,既可以用来做(非线性)分类也可以用来做回归
  • 训练时间复杂度比支持向量机之类的算法低,仅为 O (n)
  • 和朴素贝叶斯之类的算法比,对数据没有假设,准确度高,对异常点不敏感
  • 对于类域的交叉或重叠较多

Read more

时序预测建模

前置知识:时间序列分析时间序列距离测度

1 基础时序方法

均值回归:对历史一段时间的值取平均,作为未来每个时刻的预测

指数平滑:预测值是过去一段时间内观测值(或已预测值)的加权平均值

普通回归预测:借助时序相关特征(如节假日、周期性)实现建模预测

更多时序类衍生特征可参考 tsfresh概述

2 ARIMA

自回归(AR)模型:

  • 用变量自身的历史时间数据对变量进行预测
  • AR 模型需要满足时序平稳性的要求,时序间需要存在自相关性
  • p 阶 AR模型的公式定义如下:$y_t=\mu+\Sigma_{i=1}^p\gamma_iy_{

Read more

线性判别分析 LDA

LDA 算法是一种监督学习的降维技术

  • LDA 算法将高维空间中的d维数据通过投影转化成1维数据进行处理
  • 对于训练数据,LDA 算法会让同类数据的投影点尽可能接近,异类数据尽可能远离
  • 对于新数据分类,LDA 算法会先进行数据投影,再根据投影点位置来确定样本的类别

  • 左图思路:让不同类别的平均点距离最远的投影方式
  • 右图思路:让同类别的数据距离最近的投影方式

LDA算法降维流程如下:

​ 输入:数据集 $D = { (x_1,y_1),(x_2,y_2), ... ,(x_m,y_m) }$,其中样本 $x_i$ 是n维向量,$y_i \in {C_1, C_2, ..., C_k}$

Read more

DBSCAN密度聚类

1 DBSCAN算法概况

DBSCAN(Density-Based Spatial Clustering of Applications with Noise,基于密度的、对噪声鲁棒的空间聚类方法)是一种基于密度的经典聚类算法

2 DBSCAN算法细节

  1. 遍历所有样本,寻找关键的核心点(邻域内样本数>=MinPoints)
  2. 核心点及其邻域内的样本(包括其他核心点)形成了临时聚类簇
  3. 当核心点A属于核心点B的临时聚类簇时,合并两处临时聚类簇
  4. 重复以上过程,直至找不到新的可合并临时聚类簇

Read more

启发式算法总结

1 启发式算法

启发式算法(Heuristic Algorithms)通常是以问题为导向的(Problem Specific),没有一个通用的框架,每个不同的问题通常设计一个不同的启发式算法,通常被用来解组合优化问题

普通启发式算法一般是一种贪婪算法,需要根据特定问题进行特定设计

贪婪算法,也叫贪心算法

其基本思想是:每一步都采取当前状态下最好的选择,而不考虑全局最优解是否已经达到。在每一步中,贪心算法都会做出一个贪心决策,即选择当前状态下最优的解决方案,并且不考虑这个决策可能会导致的未来后果

以经典的装包问

Read more

蚁群算法

1 基本概念

蚁群算法(Ant Colony Algorithm,ACA)由Marco Dorigo于1992年在他的博士论文中首次提出,该算法模拟了自然界中蚂蚁的觅食行为。

蚂蚁寻径的生物过程:

  • 蚂蚁在寻找食物源时,会在其经过的路径上释放一种信息素,并能够感知其它蚂蚁释放的信息素。信息素浓度的大小表征路径的远近,信息素浓度越高,表示对应的路径距离越短
  • 通常,蚂蚁会以较大的概率优先选择信息素浓度较高的路径,并释放一定量的信息素,以增强该条路径上的信息素浓度,这样,会形成一个正反馈
  • 最终,蚂蚁能够找到一条从巢穴到食物源的最佳路径,

Read more

时序聚类

本文中大部分算法都可通过R语言的latend包复现

1 GBTM

轨迹分组算法(Group-based trajectory model,GBTM)

  • 最早由 Daniel Nagin 于 1999 年在知名心理学方法学杂志「Psychological Methods」开始推展
  • 接着由 Bobby Jones 与 Daniel Nagin 于 2001 年发表了 SAS procedure2,于是此方法慢慢

Read more