第二階段:經典機器學習
用 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. 研究和開發基礎
- 為進一步的演算法研究和改進提供基礎
- 有助於理解現有機器學習框架的底層實現
適用人群
- 機器學習初學者和中級學習者
- 希望深入理解演算法內部機制的研究人員
- 想要提升程式設計實現能力的開發者
- 機器學習相關專業的學生
專案優勢
- 教育性強: 程式碼清晰易懂,注重教學價值
- 覆蓋面廣: 從基礎到高級演算法應有盡有
- 實用性強: 提供完整的可執行範例
- 持續更新: 專案活躍,不斷添加新的演算法實現
注意事項
- 該專案主要用於教學和學習,不適合生產環境使用
- 演算法實現注重可讀性而非性能優化
- 建議結合理論學習使用,效果更佳