Home
Login

第二階段:經典機器學習

用 Python 從零實現機器學習基礎模型和演算法的教育專案,涵蓋從線性迴歸到深度學習的各種演算法,注重演算法內部工作機制的透明展示

MachineLearningPythonNumPyGitHubTextFreeEnglish

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. 研究和開發基礎

  • 為進一步的演算法研究和改進提供基礎
  • 有助於理解現有機器學習框架的底層實現

適用人群

  • 機器學習初學者和中級學習者
  • 希望深入理解演算法內部機制的研究人員
  • 想要提升程式設計實現能力的開發者
  • 機器學習相關專業的學生

專案優勢

  1. 教育性強: 程式碼清晰易懂,注重教學價值
  2. 覆蓋面廣: 從基礎到高級演算法應有盡有
  3. 實用性強: 提供完整的可執行範例
  4. 持續更新: 專案活躍,不斷添加新的演算法實現

注意事項

  • 該專案主要用於教學和學習,不適合生產環境使用
  • 演算法實現注重可讀性而非性能優化
  • 建議結合理論學習使用,效果更佳