从零开始的机器学习
关于
Python 实现了一些基础的机器学习模型和算法,完全从零开始。
这个项目的目的不是为了产生尽可能优化和计算高效的算法,而是为了以透明和易于理解的方式呈现它们的内部工作原理。
目录
安装
$ git clone https://github.com/eriklindernoren/ML-From-Scratch
$ cd ML-From-Scratch
$ python setup.py install
示例
多项式回归
$ python mlfromscratch/examples/polynomial_regression.py
图:正则化多项式回归模型在瑞典林雪平2016年测量的温度数据上的训练进展。
使用 CNN 进行分类
$ python mlfromscratch/examples/convolutional_neural_network.py
+---------+
| ConvNet |
+---------+
输入形状: (1, 8, 8)
+----------------------+------------+--------------+
| 层类型 | 参数 | 输出形状 |
+----------------------+------------+--------------+
| Conv2D | 160 | (16, 8, 8) |
| 激活函数 (ReLU) | 0 | (16, 8, 8) |
| Dropout | 0 | (16, 8, 8) |
| BatchNormalization | 2048 | (16, 8, 8) |
| Conv2D | 4640 | (32, 8, 8) |
| 激活函数 (ReLU) | 0 | (32, 8, 8) |
| Dropout | 0 | (32, 8, 8) |
| BatchNormalization | 4096 | (32, 8, 8) |
| Flatten | 0 | (2048,) |
| Dense | 524544 | (256,) |
| 激活函数 (ReLU) | 0 | (256,) |
| Dropout | 0 | (256,) |
| BatchNormalization | 512 | (256,) |
| Dense | 2570 | (10,) |
| 激活函数 (Softmax) | 0 | (10,) |
+----------------------+------------+--------------+
总参数: 538570
训练: 100% [------------------------------------------------------------------------] 时间: 0:01:55
准确率: 0.987465181058
图:使用 CNN 对数字数据集进行分类。
基于密度的聚类
$ python mlfromscratch/examples/dbscan.py
图:使用 DBSCAN 对月亮数据集进行聚类。
生成手写数字
$ python mlfromscratch/unsupervised_learning/generative_adversarial_network.py
+-----------+
| 生成器 |
+-----------+
输入形状: (100,)
+------------------------+------------+--------------+
| 层类型 | 参数 | 输出形状 |
+------------------------+------------+--------------+
| Dense | 25856 | (256,) |
| 激活函数 (LeakyReLU) | 0 | (256,) |
| BatchNormalization | 512 | (256,) |
| Dense | 131584 | (512,) |
| 激活函数 (LeakyReLU) | 0 | (512,) |
| BatchNormalization | 1024 | (512,) |
| Dense | 525312 | (1024,) |
| 激活函数 (LeakyReLU) | 0 | (1024,) |
| BatchNormalization | 2048 | (1024,) |
| Dense | 803600 | (784,) |
| 激活函数 (TanH) | 0 | (784,) |
+------------------------+------------+--------------+
总参数: 1489936
+---------------+
| 判别器 |
+---------------+
输入形状: (784,)
+------------------------+------------+--------------+
| 层类型 | 参数 | 输出形状 |
+------------------------+------------+--------------+
| Dense | 401920 | (512,) |
| 激活函数 (LeakyReLU) | 0 | (512,) |
| Dropout | 0 | (512,) |
| Dense | 131328 | (256,) |
| 激活函数 (LeakyReLU) | 0 | (256,) |
| Dropout | 0 | (256,) |
| Dense | 514 | (2,) |
| 激活函数 (Softmax) | 0 | (2,) |
+------------------------+------------+--------------+
总参数: 533762
图:生成对抗网络生成手写数字的训练进展。
深度强化学习
$ python mlfromscratch/examples/deep_q_network.py
+----------------+
| 深度 Q 网络 |
+----------------+
输入形状: (4,)
+-------------------+------------+--------------+
| 层类型 | 参数 | 输出形状 |
+-------------------+------------+--------------+
| Dense | 320 | (64,) |
| 激活函数 (ReLU) | 0 | (64,) |
| Dense | 130 | (2,) |
+-------------------+------------+--------------+
总参数: 450
图:深度 Q 网络解决 OpenAI gym 中的 CartPole-v1 环境。
使用 RBM 的图像重建
$ python mlfromscratch/examples/restricted_boltzmann_machine.py
图:显示网络在训练过程中如何更好地重建 MNIST 数据集中的数字 2。
进化神经网络
$ python mlfromscratch/examples/neuroevolution.py
遗传算法
$ python mlfromscratch/examples/genetic_algorithm.py
+--------+ | GA | +--------+
描述:实现一个遗传算法,目标是生成用户指定的目标字符串。该实现通过计算每个候选者与目标之间的字母距离来评估其适应度。候选者作为父代被选中,概率与候选者的适应度成正比。再生产通过父代对之间的单点交叉实现。通过以均匀概率随机分配新字符来实现变异。
参数
目标字符串:'Genetic Algorithm' 种群大小:100 变异率:0.05
[0 最接近候选者: 'CJqlJguPlqzvpoJmb', 适应度: 0.00] [1 最接近候选者: 'MCxZxdr nlfiwwGEk', 适应度: 0.01] [2 最接近候选者: 'MCxZxdm nlfiwwGcx', 适应度: 0.01] [3 最接近候选者: 'SmdsAklMHn kBIwKn', 适应度: 0.01] [4 最接近候选者: ' lotneaJOasWfu Z', 适应度: 0.01] ... [292 最接近候选者: 'GeneticaAlgorithm', 适应度: 1.00] [293 最接近候选者: 'GeneticaAlgorithm', 适应度: 1.00] [294 答案: 'Genetic Algorithm']
关联分析
$ python mlfromscratch/examples/apriori.py
+-------------+ | Apriori | +-------------+
最小支持度:0.25 最小置信度:0.8 事务: [1, 2, 3, 4] [1, 2, 4] [1, 2] [2, 3, 4] [2, 3] [3, 4] [2, 4]
频繁项集: [1, 2, 3, 4, [1, 2], [1, 4], [2, 3], [2, 4], [3, 4], [1, 2, 4], [2, 3, 4]]
规则: 1 -> 2 (支持度: 0.43, 置信度: 1.0) 4 -> 2 (支持度: 0.57, 置信度: 0.8) [1, 4] -> 2 (支持度: 0.29, 置信度: 1.0)
实现
监督学习
- Adaboost
- 贝叶斯回归
- 决策树
- 弹性网
- 梯度提升
- K近邻
- Lasso回归
- 线性判别分析
- 线性回归
- 逻辑回归
- 多类线性判别分析
- 多层感知器
- 朴素贝叶斯
- 神经进化
- 粒子群优化神经网络
- 感知器
- 多项式回归
- 随机森林
- 岭回归
- 支持向量机
- XGBoost