第二段階:古典的機械学習
Pythonで機械学習の基礎モデルとアルゴリズムをゼロから実装する教育プロジェクト。線形回帰からディープラーニングまで、様々なアルゴリズムを網羅し、アルゴリズムの内部動作メカニズムの透明な展示に重点を置いています。
ML-From-Scratch プロジェクト詳細
プロジェクト概要
ML-From-Scratchは、Pythonを用いて機械学習の基本的なモデルとアルゴリズムをゼロから実装するプロジェクトです。このプロジェクトの目的は、最適化され計算効率が最も高いアルゴリズムを生成することではなく、アルゴリズムの内部動作原理を透明かつ理解しやすい方法で示すことにあります。
プロジェクト作者
プロジェクト作者のErik Linder-Norénは、Apple社の機械学習エンジニアであり、機械学習、バスケットボール、そして物作りに対して情熱を抱いています。
プロジェクトの特徴
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: 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: XGBoost (Extreme Gradient Boosting)
教師なし学習アルゴリズム
- Apriori: アプリオリ(関連ルールマイニング)
- Autoencoder: オートエンコーダ
- DBSCAN: DBSCAN(密度ベースのクラスタリングアルゴリズム)
- FP-Growth: 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(ドロップアウト層)
- 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. 研究開発の基礎
- さらなるアルゴリズムの研究と改善のための基礎を提供する
- 既存の機械学習フレームワークの基盤となる実装を理解するのに役立つ
対象者
- 機械学習の初心者および中級学習者
- アルゴリズムの内部メカニズムを深く理解したい研究者
- プログラミング実装能力を向上させたい開発者
- 機械学習関連分野の学生
プロジェクトの利点
- 高い教育性: コードが明確で理解しやすく、教育的価値を重視
- 幅広いカバレッジ: 基礎から高度なアルゴリズムまで網羅
- 高い実用性: 完全な実行可能なサンプルを提供
- 継続的な更新: プロジェクトは活発で、新しいアルゴリズムの実装が常に追加されている
注意事項
- このプロジェクトは主に教育と学習を目的としており、本番環境での使用には適していません
- アルゴリズムの実装は、性能最適化よりも可読性を重視しています
- 理論学習と組み合わせて使用することをお勧めします。より効果的です