Skip to content

機械学習から始めるプログラミング入門

本記事シリーズは、機械学習を題材にして、さまざまなプログラミング言語の特徴を実践的に学ぶためのガイドです。

データを読み込み、前処理し、モデルを学習・評価し、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# 版との対比 完了

番外編(Extra)

14 言語のあとに、日本語プログラミング言語なでしこ3 の版を番外編として書いています。章構成の表と統合解説の比較には含めていません。

言語 環境 特徴 状況
なでしこ3 nadesiko3go 3.8.8(Go) 日本語で書く・助詞で引数を表す・テストの道具も線形代数も自作、Python 版/Haskell 版との対比 全 15 章公開(実データでの実測待ち)

章構成

第 1 部: 機械学習と TDD の基本サイクル

章 テーマ Python Kotlin TypeScript F# Java C# Scala Go Rust Ruby Clojure Elixir PHP Haskell
1 機械学習とはじめてのテスト Python Kotlin TypeScript F# Java C# Scala Go Rust Ruby Clojure Elixir PHP Haskell
2 データの前処理と三角測量 Python Kotlin TypeScript F# Java C# Scala Go Rust Ruby Clojure Elixir PHP Haskell
3 決定木による分類と明白な実装 Python Kotlin TypeScript F# Java C# Scala Go Rust Ruby Clojure Elixir PHP Haskell

第 2 部: 開発環境と自動化

章 テーマ Python Kotlin TypeScript F# Java C# Scala Go Rust Ruby Clojure Elixir PHP Haskell
4 バージョン管理とデータ管理 Python Kotlin TypeScript F# Java C# Scala Go Rust Ruby Clojure Elixir PHP Haskell
5 パッケージ管理と静的解析 Python Kotlin TypeScript F# Java C# Scala Go Rust Ruby Clojure Elixir PHP Haskell
6 タスクランナーと CI/CD Python Kotlin TypeScript F# Java C# Scala Go Rust Ruby Clojure Elixir PHP Haskell

第 3 部: 回帰と実践的な前処理

章 テーマ Python Kotlin TypeScript F# Java C# Scala Go Rust Ruby Clojure Elixir PHP Haskell
7 線形回帰による数値予測 Python Kotlin TypeScript F# Java C# Scala Go Rust Ruby Clojure Elixir PHP Haskell
8 実践的な分類と前処理パイプライン Python Kotlin TypeScript F# Java C# Scala Go Rust Ruby Clojure Elixir PHP Haskell
9 特徴量エンジニアリング Python Kotlin TypeScript F# Java C# Scala Go Rust Ruby Clojure Elixir PHP Haskell

第 4 部: モデルの改善と評価

章 テーマ Python Kotlin TypeScript F# Java C# Scala Go Rust Ruby Clojure Elixir PHP Haskell
10 ロジスティック回帰とアンサンブル学習 Python Kotlin TypeScript F# Java C# Scala Go Rust Ruby Clojure Elixir PHP Haskell
11 評価指標と交差検証 Python Kotlin TypeScript F# Java C# Scala Go Rust Ruby Clojure Elixir PHP Haskell
12 正則化とモデル選択 Python Kotlin TypeScript F# Java C# Scala Go Rust Ruby Clojure Elixir PHP Haskell

第 5 部: 教師なし学習と実運用

章 テーマ Python Kotlin TypeScript F# Java C# Scala Go Rust Ruby Clojure Elixir PHP Haskell
13 主成分分析による次元削減 Python Kotlin TypeScript F# Java C# Scala Go Rust Ruby Clojure Elixir PHP Haskell
14 K-means によるクラスタリング Python Kotlin TypeScript F# Java C# Scala Go Rust Ruby Clojure Elixir PHP Haskell
15 機械学習 API とモジュール設計 Python Kotlin TypeScript F# Java C# Scala Go Rust Ruby Clojure Elixir PHP Haskell

付録

付録 テーマ Python
A 総合演習(Bank) Python

多言語統合解説

14 言語(第 1 波の Python・Kotlin・TypeScript・F#、第 2 波の Java・C#・Scala・Go・Rust、第 3 波の Ruby・Clojure・Elixir・PHP・Haskell)で同じ 15 章を書いた結果を、横断的に比べます。どの版から読むか迷ったら、第 5 章 学習ロードマップ を参照してください。

章 テーマ
第 1 章 言語とライブラリの概要
第 2 章 データ構造の比較
第 3 章 アルゴリズムの実装の比較
第 4 章 ライブラリのエコシステムの比較
第 5 章 学習ロードマップ

学習データ

学習データは書籍『スッキリわかる Python による機械学習入門』(インプレス, 2020)の配布データを使います。配布データは書籍購入者のみ利用できるため、本リポジトリには含まれていません。書籍サポートページ から sukkiri-ml-codes.zip を入手し、tmp/ に置いてから次を実行してください。

npx gulp data:setup
npx gulp data:check

学習データは apps/data/sukkiri-ml/ に配置されます。データが無い環境では、実データを使うテストはスキップされます。

対象読者

  • プログラミングの基本構文を理解している方
  • 機械学習の仕組みをコードを書きながら理解したい方
  • 複数のプログラミング言語でのデータ処理の違いに興味がある方
  • テスト駆動開発を実践的な題材で身につけたい方

参照