機械学習から始めるプログラミング入門
本記事シリーズは、機械学習を題材にして、さまざまなプログラミング言語の特徴を実践的に学ぶためのガイドです。
データを読み込み、前処理し、モデルを学習・評価し、API として届けるまでの流れを、テスト駆動開発(TDD)で一歩ずつ実装します。各アルゴリズムはまず自作し、次にその言語の機械学習ライブラリで置き換えて結果を突き合わせます。自作で原理と言語の書き方を学び、置き換えでエコシステムを学びます。
執筆計画は 執筆計画アウトライン を、執筆の進め方は 執筆ワークフロー を参照してください。
言語別解説
言語は 3 つの波に分けて順に追加します。第 1 波の Python 版・Kotlin 版・TypeScript 版・F# 版は全章を執筆済みです。F# は当初第 2 波でしたが、第 1 波に移しました。第 2 波は Java 版・C# 版・Scala 版・Go 版・Rust 版の全章を執筆済みです。第 3 波は Ruby 版・Clojure 版の全章を執筆済みです。
| 波 |
言語 |
環境 |
特徴 |
状況 |
| 1 |
Python |
CPython |
機械学習ライブラリが成熟、型ヒント、Jupyter Lab による探索と可視化 |
完了 |
| 1 |
Kotlin |
JVM |
静的型付け、OOP と FP の融合、Kotlin Notebook による探索と可視化 |
完了 |
| 1 |
TypeScript |
Node.js |
静的型付け、機械学習ライブラリが限られる環境での自作 |
完了 |
| 1 |
F# |
.NET |
判別共用体・パイプライン・型プロバイダ、Polyglot Notebooks による探索と可視化 |
完了 |
| 2 |
Java |
JVM |
record・sealed interface・Stream API、Kotlin 版との対比 |
完了 |
| 2 |
C# |
.NET |
record・LINQ・ML.NET の IDataView、F# 版との対比 |
完了 |
| 2 |
Scala |
JVM |
case class・不変のコレクション・enum、Java 版との対比 |
完了 |
| 2 |
Go |
Go |
構造体・error の戻り値、ライブラリが限られる環境での自作 |
完了 |
| 2 |
Rust |
Rust |
所有権と借用・Result と ?・linfa、Java 版/C# 版との対比 |
完了 |
| 3 |
Ruby |
CRuby |
動的型付け・ブロックと Enumerable・Rumale、Python 版との対比 |
完了 |
| 3 |
Clojure |
JVM(JDK 21) |
不変のマップとベクタ・S 式・Java の相互運用・Tribuo、Java 版/Scala 版との対比 |
完了 |
| 3 |
Elixir |
BEAM(OTP 27) |
パターンマッチと関数節・パイプライン・自作の乱数・Nx と Scholar、F# 版/Clojure 版との対比 |
完了 |
| 3 |
PHP |
PHP 8.4 |
漸進的な型付け(strict_types と PHPStan レベル 9)・readonly class・Rubix ML、Ruby 版/Elixir 版との対比 |
完了 |
| 3 |
Haskell |
GHC 9.10 |
失敗を Either で表す・IO を境界に閉じ込める・hmatrix、Rust 版/F# 版との対比 |
完了 |
14 言語のあとに、日本語プログラミング言語なでしこ3 の版を番外編として書いています。章構成の表と統合解説の比較には含めていません。
| 言語 |
環境 |
特徴 |
状況 |
| なでしこ3 |
nadesiko3go 3.8.8(Go) |
日本語で書く・助詞で引数を表す・テストの道具も線形代数も自作、Python 版/Haskell 版との対比 |
全 15 章公開(実データでの実測待ち) |
章構成
第 1 部: 機械学習と TDD の基本サイクル
第 2 部: 開発環境と自動化
第 3 部: 回帰と実践的な前処理
第 4 部: モデルの改善と評価
第 5 部: 教師なし学習と実運用
付録
| 付録 |
テーマ |
Python |
| A |
総合演習(Bank) |
Python |
多言語統合解説
14 言語(第 1 波の Python・Kotlin・TypeScript・F#、第 2 波の Java・C#・Scala・Go・Rust、第 3 波の Ruby・Clojure・Elixir・PHP・Haskell)で同じ 15 章を書いた結果を、横断的に比べます。どの版から読むか迷ったら、第 5 章 学習ロードマップ を参照してください。
学習データ
学習データは書籍『スッキリわかる Python による機械学習入門』(インプレス, 2020)の配布データを使います。配布データは書籍購入者のみ利用できるため、本リポジトリには含まれていません。書籍サポートページ から sukkiri-ml-codes.zip を入手し、tmp/ に置いてから次を実行してください。
npx gulp data:setup
npx gulp data:check
学習データは apps/data/sukkiri-ml/ に配置されます。データが無い環境では、実データを使うテストはスキップされます。
対象読者
- プログラミングの基本構文を理解している方
- 機械学習の仕組みをコードを書きながら理解したい方
- 複数のプログラミング言語でのデータ処理の違いに興味がある方
- テスト駆動開発を実践的な題材で身につけたい方
参照