史上最强:numpy实现全部机器学习算法
点击上方“小白学视觉”,选择加"星标"或“置顶”
重磅干货,第一时间送达
来自于加州伯克利大学的David Bourgin 使用Numpy实现了几乎全部的机器学习算法,真正实现了手撸ML的愿景。多少“调包侠”的愿望都被这位小哥实现了!
该项目超过3万行代码,除了算法本身,还有很多的数据预处理代码!
地址:https://github.com/ddbourgin/numpy-ml
手撸算法的目的在于能够更好的学习和深入理解算法,而不是要替代已有的框架,毕竟成熟的框架在效率和精准度上都已经得到验证。
我们来看下已经实现的算法:
1. 高斯混合模型
EM 训练
2. 隐马尔可夫模型
维特比解码
似然计算
通过 Baum-Welch/forward-backward 算法进行 MLE 参数估计
3. 隐狄利克雷分配模型(主题模型)
用变分 EM 进行 MLE 参数估计的标准模型
用 MCMC 进行 MAP 参数估计的平滑模型
4. 神经网络
4.1 层/层级运算
Add
Flatten
Multiply
Softmax
全连接/Dense
稀疏进化连接
LSTM
Elman 风格的 RNN
最大+平均池化
点积注意力
受限玻尔兹曼机 (w. CD-n training)
2D 转置卷积 (w. padding 和 stride)
2D 卷积 (w. padding、dilation 和 stride)
1D 卷积 (w. padding、dilation、stride 和 causality)
4.2 模块
双向 LSTM
ResNet 风格的残差块(恒等变换和卷积)
WaveNet 风格的残差块(带有扩张因果卷积)
Transformer 风格的多头缩放点积注意力
4.3 正则化项
Dropout
归一化
批归一化(时间上和空间上)
层归一化(时间上和空间上)
4.4 优化器
SGD w/ 动量
AdaGrad
RMSProp
Adam
4.5 学习率调度器
常数
指数
Noam/Transformer
Dlib 调度器
4.6 权重初始化器
Glorot/Xavier uniform 和 normal
He/Kaiming uniform 和 normal
标准和截断正态分布初始化
4.7 损失
交叉熵
平方差
Bernoulli VAE 损失
带有梯度惩罚的 Wasserstein 损失
4.8 激活函数
ReLU
Tanh
Affine
Sigmoid
Leaky ReLU
4.9 模型
Bernoulli 变分自编码器
带有梯度惩罚的 Wasserstein GAN
4.10 神经网络工具
col2im (MATLAB 端口)
im2col (MATLAB 端口)
conv1D
conv2D
deconv2D
minibatch
5. 基于树的模型
决策树 (CART)
[Bagging] 随机森林
[Boosting] 梯度提升决策树
6. 线性模型
岭回归
Logistic 回归
最小二乘法
贝叶斯线性回归 w/共轭先验
7.n 元序列模型
最大似然得分
Additive/Lidstone 平滑
简单 Good-Turing 平滑
8. 强化学习模型
使用交叉熵方法的智能体
首次访问 on-policy 蒙特卡罗智能体
加权增量重要采样蒙特卡罗智能体
Expected SARSA 智能体
TD-0 Q-learning 智能体
Dyna-Q / Dyna-Q+ 优先扫描
9. 非参数模型
Nadaraya-Watson 核回归
k 最近邻分类与回归
10. 预处理
离散傅立叶变换 (1D 信号)
双线性插值 (2D 信号)
最近邻插值 (1D 和 2D 信号)
自相关 (1D 信号)
信号窗口
文本分词
特征哈希
特征标准化
One-hot 编码/解码
Huffman 编码/解码
词频逆文档频率编码
11. 工具
相似度核
距离度量
优先级队列
Ball tree 数据结构
传送门:https://github.com/ddbourgin/numpy-ml
交流群
欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~