第二阶段:经典机器学习
用Python从零实现机器学习基础模型和算法的教育项目,涵盖从线性回归到深度学习的各种算法,注重算法内部工作机制的透明展示
ML-From-Scratch 项目详细介绍
项目概述
ML-From-Scratch 是一个用Python从零开始实现机器学习基础模型和算法的项目。这个项目的目的不是为了产生最优化和计算效率最高的算法,而是以透明和易于理解的方式展示算法的内部工作原理。
项目作者
项目作者Erik Linder-Norén是苹果公司的机器学习工程师,对机器学习、篮球和构建事物充满热情。
项目特点
1. 教育导向
- 注重算法内部工作机制的透明展示
- 代码实现清晰易懂,便于学习和理解
- 提供丰富的示例和可视化结果
2. 技术栈
- 主要语言: Python
- 核心依赖: NumPy(用于数值计算)
- 可视化: Matplotlib(用于绘图展示)
3. 覆盖范围广泛
从线性回归到深度学习,涵盖机器学习的各个重要领域
安装和使用
安装步骤
$ git clone https://github.com/eriklindernoren/ML-From-Scratch
$ cd ML-From-Scratch
$ python setup.py install
运行示例
# 多项式回归示例
$ python mlfromscratch/examples/polynomial_regression.py
# 卷积神经网络示例
$ python mlfromscratch/examples/convolutional_neural_network.py
# DBSCAN聚类示例
$ python mlfromscratch/examples/dbscan.py
实现的算法分类
监督学习算法
- Adaboost: 自适应提升算法
- Bayesian Regression: 贝叶斯回归
- Decision Tree: 决策树
- Elastic Net: 弹性网络回归
- Gradient Boosting: 梯度提升
- K Nearest Neighbors: K近邻算法
- Lasso Regression: Lasso回归
- Linear Discriminant Analysis: 线性判别分析
- Linear Regression: 线性回归
- Logistic Regression: 逻辑回归
- Multi-class Linear Discriminant Analysis: 多类线性判别分析
- Multilayer Perceptron: 多层感知器
- Naive Bayes: 朴素贝叶斯
- Neuroevolution: 神经进化
- Particle Swarm Optimization of Neural Network: 粒子群优化神经网络
- Perceptron: 感知器
- Polynomial Regression: 多项式回归
- Random Forest: 随机森林
- Ridge Regression: 岭回归
- Support Vector Machine: 支持向量机
- XGBoost: 极端梯度提升
无监督学习算法
- Apriori: 关联规则挖掘
- Autoencoder: 自编码器
- DBSCAN: 基于密度的聚类算法
- FP-Growth: 频繁模式增长算法
- Gaussian Mixture Model: 高斯混合模型
- Generative Adversarial Network: 生成对抗网络
- Genetic Algorithm: 遗传算法
- K-Means: K均值聚类
- Partitioning Around Medoids: 围绕中心点的分割
- Principal Component Analysis: 主成分分析
- Restricted Boltzmann Machine: 受限玻尔兹曼机
深度学习组件
- Neural Network: 神经网络框架
- 各种层类型:
- Activation Layer(激活层)
- Average Pooling Layer(平均池化层)
- Batch Normalization Layer(批标准化层)
- Constant Padding Layer(常量填充层)
- Convolutional Layer(卷积层)
- Dropout Layer(Dropout层)
- Flatten Layer(展平层)
- Fully-Connected (Dense) Layer(全连接层)
- Fully-Connected RNN Layer(全连接RNN层)
- Max Pooling Layer(最大池化层)
- Reshape Layer(重塑层)
- Up Sampling Layer(上采样层)
- Zero Padding Layer(零填充层)
示例运行结果
1. 卷积神经网络示例
+---------+
| ConvNet |
+---------+
Input Shape: (1, 8, 8)
+----------------------+------------+--------------+
| Layer Type | Parameters | Output Shape |
+----------------------+------------+--------------+
| Conv2D | 160 | (16, 8, 8) |
| Activation (ReLU) | 0 | (16, 8, 8) |
| Dropout | 0 | (16, 8, 8) |
| BatchNormalization | 2048 | (16, 8, 8) |
| Conv2D | 4640 | (32, 8, 8) |
| Activation (ReLU) | 0 | (32, 8, 8) |
| Dropout | 0 | (32, 8, 8) |
| BatchNormalization | 4096 | (32, 8, 8) |
| Flatten | 0 | (2048,) |
| Dense | 524544 | (256,) |
| Activation (ReLU) | 0 | (256,) |
| Dropout | 0 | (256,) |
| BatchNormalization | 512 | (256,) |
| Dense | 2570 | (10,) |
| Activation (Softmax)| 0 | (10,) |
+----------------------+------------+--------------+
Total Parameters: 538570
Training: 100% [------------------------------------------------------------------------] Time: 0:01:55
Accuracy: 0.987465181058
2. 深度Q网络示例
+----------------+
| Deep Q-Network |
+----------------+
Input Shape: (4,)
+-------------------+------------+--------------+
| Layer Type | Parameters | Output Shape |
+-------------------+------------+--------------+
| Dense | 320 | (64,) |
| Activation (ReLU) | 0 | (64,) |
| Dense | 130 | (2,) |
+-------------------+------------+--------------+
Total Parameters: 450
3. 神经进化示例
+---------------+
| Model Summary |
+---------------+
Input Shape: (64,)
+----------------------+------------+--------------+
| Layer Type | Parameters | Output Shape |
+----------------------+------------+--------------+
| Dense | 1040 | (16,) |
| Activation (ReLU) | 0 | (16,) |
| Dense | 170 | (10,) |
| Activation (Softmax) | 0 | (10,) |
+----------------------+------------+--------------+
Total Parameters: 1210
Population Size: 100
Generations: 3000
Mutation Rate: 0.01
[0 Best Individual - Fitness: 3.08301, Accuracy: 10.5%]
[1 Best Individual - Fitness: 3.08746, Accuracy: 12.0%]
...
[2999 Best Individual - Fitness: 94.08513, Accuracy: 98.5%]
Test set accuracy: 96.7%
学习价值
1. 深度理解算法原理
- 通过从零实现,可以深入理解每个算法的核心思想
- 代码结构清晰,有助于理解算法的具体实现细节
2. 实践编程技能
- 提升NumPy等科学计算库的使用技能
- 学习如何将数学理论转化为代码实现
3. 研究和开发基础
- 为进一步的算法研究和改进提供基础
- 有助于理解现有机器学习框架的底层实现
适用人群
- 机器学习初学者和中级学习者
- 希望深入理解算法内部机制的研究人员
- 想要提升编程实现能力的开发者
- 机器学习相关专业的学生
项目优势
- 教育性强: 代码清晰易懂,注重教学价值
- 覆盖面广: 从基础到高级算法应有尽有
- 实用性强: 提供完整的可运行示例
- 持续更新: 项目活跃,不断添加新的算法实现
注意事项
- 该项目主要用于教学和学习,不适合生产环境使用
- 算法实现注重可读性而非性能优化
- 建议结合理论学习使用,效果更佳