Skip to content

機械学習から始めるなでしこ3 入門(番外編)

なでしこ3 は日本語で書くプログラミング言語です。助詞(「を」「で」「と」)で引数の役割を表し、「iris.csv」を開いてCSV取得 のように手順がそのまま文になります。本シリーズでは、Python 版と同じ題材の機械学習のアルゴリズムを TDD で自作し、なでしこ3 の書き方を学びます。

なでしこ3 版は、14 言語で完成したシリーズの番外編です。処理系には Go で書かれた nadesiko3go(コマンド名 gonako)を使います。2 つの軸で対比します。1 つは Python 版 で、同じ手順を英語の識別子と日本語の文で書き比べます。2 つめは Haskell 版・Go 版 で、機械学習のライブラリが無い言語という点が同じです。なでしこ3 版はさらに進んで、線形代数もテストの道具も自作します。

特徴

  • 日本語で書く: 関数名も変数名も日本語にする。●(特徴量を)ルール判定とは のように、機械学習の用語がそのままコードに現れる
  • 助詞が引数の役割を示す: 「名前」で実際と期待が一致確認 のように、引数の順番ではなく助詞で役割が決まる
  • 識別子に助詞を入れられない: ルールで判定 は「ルール」の定義に割られる。名前は助詞を含まない名詞のつながりにし、変数名にはカタカナと漢字を使う
  • テストの道具を自作する: テスティングフレームワークが無く、ASSERT等 は最初の失敗で止まる。失敗を数えて最後に報告するテスト補助を作り、その道具もテストする
  • 残る守りはテストだけ: 型の検査もカバレッジも無く、lint は未定義の名前を半分しか捕まえない。名前を 終了 にするとプログラムが黙って終わるので、テストが最後まで走ったことも確かめる
  • = はゆるい比較: JavaScript の == と同じで 0 = 「」 が真になる。型まで比べる === を使い分ける

ほかの版との違い

  • Notebook による探索と可視化の節は設けません。グラフは Python 版 と Kotlin 版 の可視化の節を参照してください
  • 総合演習(付録 A)の解答例は作りません。演習問題は言語に依存しないので、Python 版の付録 A の問題になでしこ3 で取り組んでください
  • 機械学習のライブラリも行列の命令もありません。 決定木・回帰・ロジスティック回帰・ランダムフォレスト・K-means・主成分分析に加えて、正規方程式を解く連立一次方程式と固有値分解も自作します。「ライブラリへの置き換え」の節は「ほかの言語版の数値との突き合わせ」の節に差し替えます(ADR 015)
  • カバレッジを測る仕組みがありません。 シリーズで唯一、カバレッジを数字で示せない版です
  • 乱数は java.util.Random と同じ線形合同法を自作します。 乱数 にシードを渡す口が無いためです。数値は float64 だけなので、PHP 版よりさらに細かく掛け算を分けます
  • CSV は CSV取得 を使いますが、BOM と空行は取り除かれません。数字だけのセルは自動で数値になります
  • 第 15 章の予測 API は、JSON の標準入出力でやりとりするコマンドとして作ります。 HTTP サーバーの命令が無いためです

開発環境

ツール 用途
nadesiko3go(gonako)3.8.8 言語・処理系(タグ 3.8.8 の疑似版で固定)
Go 1.26(GOTOOLCHAIN=go1.26.8) gonako の導入
自作のテスト補助(test/helper.nako3) テスト(検査の件数と失敗を数え、最後に報告する)
自作の関数の網羅(tools/function_coverage.nako3) カバレッジの代わり(テストから届かない関数を見つける)
gonako lint 文法の検査(1 回に 1 ファイル)
gonako format 整形(検査用のモードが無いので、差分で判定する)

Nix の環境(nix develop .#nadesiko3)は Go 1.25.5 です。nadesiko3go は Go 1.26 を要求するので、導入のスクリプトが GOTOOLCHAIN で 1.26.8 のツールチェーンに切り替えます。

ライブラリ

外部のライブラリは使いません。

自作するもの 用途 初出
テスト補助 テスト 第 1 章
小数点以下の桁をそろえる表示 報告の数値(書式指定の命令が無いため) 第 1 章
線形合同法 乱数(訓練データとテストデータの分割) 第 2 章
連立一次方程式・固有値分解 線形代数(正規方程式・主成分分析) 第 7 章

選定の理由と、章ごとの方針は ADR 015 を参照してください。

サンプルコード

サンプルコードは apps/nadesiko3/ にあります。学習データの配置方法は 第 1 章 の「題材とデータ」を参照してください。

nix develop .#nadesiko3
cd apps/nadesiko3
./tools/install-gonako.sh
./tools/check.sh
./bin/gonako main.nako3 chapter01

リポジトリのルートで npx gulp apps:check:nadesiko3 を実行すると、CI と同じ順(文法・整形・テスト・関数の網羅)でまとめて検査できます。

章構成

全 15 章を公開しています。実データ(配布データ)での実測は、どの章もまだ行っていません。

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

章 テーマ 状態
第 1 章 機械学習とはじめてのテスト 公開済み(実データでの実測は未確認)
第 2 章 データの前処理と三角測量 公開済み(実データでの実測は未確認)
第 3 章 決定木による分類と明白な実装 公開済み(実データでの実測は未確認)

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

章 テーマ 状態
第 4 章 バージョン管理とデータ管理 公開済み
第 5 章 パッケージ管理と静的解析 公開済み
第 6 章 タスクランナーと CI/CD 公開済み

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

章 テーマ 状態
第 7 章 線形回帰による数値予測 公開済み(実データでの実測は未確認)
第 8 章 実践的な分類と前処理パイプライン 公開済み(実データでの実測は未確認)
第 9 章 特徴量エンジニアリング 公開済み(実データでの実測は未確認)

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

章 テーマ 状態
第 10 章 ロジスティック回帰とアンサンブル学習 公開済み(実データでの実測は未確認)
第 11 章 評価指標と交差検証 公開済み(実データでの実測は未確認)
第 12 章 正則化とモデル選択 公開済み(実データでの実測は未確認)

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

章 テーマ 状態
第 13 章 主成分分析による次元削減 公開済み(実データでの実測は未確認)
第 14 章 K-means によるクラスタリング 公開済み(実データでの実測は未確認)
第 15 章 機械学習 API とモジュール設計 公開済み(実データでの実測は未確認)

付録

総合演習(Bank)の解答例は Python 版のみです。演習問題は言語に依存しないので、Python 版の付録 A の問題になでしこ3 で取り組んでください。