NumPyで紐解く、機械学習のレシピ帳:eriklindernoren/ML-From-Scratch


NumPyで紐解く、機械学習のレシピ帳:eriklindernoren/ML-From-Scratch

eriklindernoren/ML-From-Scratch

2025-09-05

五郎さん、今日は神保町で新しいプロジェクトの打ち合わせっすか? いやー、それにしても、五郎さんの目の前にあるそのGitHubリポジトリ、「eriklindernoren/ML-From-Scratch」、なんだか気になりますね。

「ん?なんだか腹が減ってきたな。いや、そうじゃなくて。この『ML-From-Scratch』ってやつ、一体何なんだ?」

ふふ、五郎さん、それはまさに今日の五郎さんの胃袋…じゃなくて、開発者の好奇心を刺激する素晴らしいリポジトリなんですよ!

五郎さんの心の声
「お、こいつは面白いな。まるで、知らない街の小料理屋に入った時のようなワクワク感だ。」

このリポジトリ、例えるなら、「機械学習のレシピを、材料から自分で作ってみる」ようなものなんです。普通、機械学習って、Scikit-learnとかTensorFlowとか、全部できあがった料理を注文する感覚じゃないですか。便利だけど、どうやって作られてるのか、材料は何なのか、よくわからない。

でも、この『ML-From-Scratch』は、それとは全然違う。

「なるほど。つまり、このリポジトリは、機械学習という料理の、一つ一つの材料、つまりNumPyだけで書かれた実装を、見せてくれるってことか。まるで、板前さんが目の前で魚を捌いてくれるように…」

そうです!五郎さん、まさにその通りです。

五郎さんの心の声
「ただ美味いだけの料理はもう飽きた。これからは、美味さの秘密を知りたい…」

このリポジトリは、ただ単にコードを写経するだけじゃない、深い学びがあります。

アルゴリズムの理解が深まる
ブラックボックスになっていた機械学習モデルの内部が、全部NumPyの配列操作として見えてきます。これはもう、料理の隠し味を知るようなもの。例えば、線形回帰の勾配降下法が、どうやって重みを更新しているのか、手で触れるように理解できます。

NumPyの腕前が上がる
NumPyは、データサイエンスの基本中の基本。このリポジトリのコードを読むことで、配列のブロードキャストやスライシングといった、NumPyの高度なテクニックを実戦的に学べます。これは、包丁の使い方を学ぶようなものですね。

既存ライブラリのデバッグ・チューニングに役立つ
「あれ? Scikit-learnのあのモデル、なぜか期待した結果が出ないな…」なんて時、このリポジトリで基礎的な実装を確認することで、問題の切り分けやパラメータ調整のヒントが見つかるかもしれません。

五郎さんの心の声
「さて、腹ごしらえの前に、まずはこの『ML-From-Scratch』という名の定食屋に、どうやって入るかだな…」

導入はめちゃくちゃシンプルです。

リポジトリをクローンする

git clone https://github.com/eriklindernoren/ML-From-Scratch.git
cd ML-From-Scratch

必要なライブラリをインストールする

pip install -r requirements.txt

これだけです! あとは、好きなモデルのディレクトリに入って、コードを読んで、動かしてみるだけ。

五郎さんの心の声
「この店の一番人気、線形回帰…いや、線形回帰定食か。よし、これを注文してみよう。」

supervised_learning/linear_regression.py を見てみましょう。 シンプルな線形回帰の実装なのに、こんなにスッキリしているのかと驚かされます。

# 一部抜粋
class LinearRegression():
    def __init__(self, n_iterations=100, learning_rate=0.001):
        self.n_iterations = n_iterations
        self.learning_rate = learning_rate
    
    def fit(self, X, y):
        # 重みとバイアスを初期化
        self.W = np.zeros(np.shape(X)[1])
        self.w0 = 0
        self.X, self.y = X, y

        # 勾配降下法
        for _ in range(self.n_iterations):
            y_pred = self.X.dot(self.W) + self.w0
            
            # 勾配を計算
            # ここが一番面白いところ。数式がそのままコードになってる!
            grad_W = -(2 / self.m) * (self.X.T.dot(self.y - y_pred))
            grad_w0 = -(2 / self.m) * np.sum(self.y - y_pred)
            
            # 重みを更新
            self.W -= self.learning_rate * grad_W
            self.w0 -= self.learning_rate * grad_w0

    def predict(self, X):
        return X.dot(self.W) + self.w0

五郎さんの心の声
「ふむ、なるほど。つまり、このgrad_Wってやつが、一番美味しくなるための隠し味、じゃなくて、最適な重みを求めるための道しるべってわけか…。」

そうなんです!このコードは、まさに数学的な概念が、生身のNumPyコードとして目の前に現れているんです。

五郎さん、このリポジトリは、機械学習という大海原を、自分の手漕ぎボートで進むための羅針盤です。

「よし、決めた。今日はこの『ML-From-Scratch』をじっくりと味わってみるか。腹は…まだ減ってるが、それどころじゃなくなってきたな。ふふ、まるで新しい街の路地裏に入り込んだみたいだ。この先には、一体どんな『味』が待っているんだろう…」


eriklindernoren/ML-From-Scratch




AI-Engineering-Hub: ソフトウェアエンジニアのための実践的AI開発ガイド

このリポジトリは、AIを学びたい、あるいはプロジェクトに組み込みたいと考えているエンジニアにとって、多くのメリットを提供します。実践的な知識の習得 理論だけでなく、実際のコード例やプロジェクトを通じてLLMやRAGの仕組みを理解できます。これにより、単なる知識としてではなく、動くものとして技術を習得できるのが大きな強みです。


Chronos入門:ソフトウェアエンジニアのための時系列予測AI活用術

こんにちは!お呼び立ていただきありがとうございます。時系列予測の分野で話題のChronosについて、ソフトウェアエンジニアの皆さんの視点から、分かりやすく、そしてフレンドリーにご説明しますね!「ランジェリーショップで悩む彼女」のように、たくさんの選択肢から「どれが一番自分に合うのかしら?」と迷う気持ち、よく分かります。時系列予測の世界も同じで、色々なモデルがあって迷っちゃいますよね。でも、Chronosはそんな悩みを解決してくれるかもしれませんよ!


nautechsystems/nautilus_trader:アルゴリズム取引の未来を創る

皆さん、こんにちは。お集まりいただき、ありがとうございます。本日は、金融とテクノロジーの融合が生み出した、非常に興味深いプロジェクトについてお伝えします。ご紹介するのは、nautechsystems/nautilus_trader。これは、高性能なアルゴリズム取引プラットフォームであり、イベント駆動型のバックテスターとしても機能する、まさにソフトウェアエンジニアにとっての宝箱のような存在です。


クレーンゲームの達人から学ぶ!「Resume Matcher」で理想の転職を掴み取れ

やぁ、未来のトップエンジニアの卵たち!そして、今まさにキャリアアップを目指す現役エンジニアの皆さん!突然ですが、皆さん、クレーンゲームは得意ですか? 私はですねぇ、昔からどうも苦手でして…。アームが掴んだと思ったら、スルッと落ちていくあの絶望感、たまらないですよねぇ(白目)。


水着選びに悩む彼女を救え!pathwaycom/llm-appで学ぶAIアプリケーション開発

ただ、今回はご要望に沿うように、説明の中では「大規模言語モデル(LLM)」という一般的な言葉を使うようにするね。さて、彼女の水着選びに悩む様子をコント風に…って、これはなかなか面白いお題だね! ソフトウェアエンジニアの視点から、この状況を「pathwaycom/llm-app」を使ってどう解決するか、コント形式で解説していくよ。


新米エンジニアよ、AIの基礎を叩き込め!「ML-For-Beginners」で差をつけろ!

今日はな、テメーらみたいなピヨピヨの新入りでも、一丁前にAIとか機械学習とか言えるようになっちまう、とっておきのモンを紹介してやるぜ!それがこれだ、どーん!microsoft/ML-For-Beginners [python, education


データの謎を解く名探偵!pandas-aiで始める会話型データ分析

ソフトウェアエンジニアの皆さん、こんにちは!日々、データの海で奮闘していることと思います。ユーザーの行動分析、サービスのパフォーマンス監視、膨大なログからのエラー特定. ..。そんなとき、「このデータから、特定の期間のユーザーログイン数を教えて」「売上が一番高かった月のトップ10商品をリストアップして」といった質問に、SQLクエリを書いて、データフレームを操作して


宇宙飛行士のためのAIツールキット:TensorZeroでLLM開発を加速せよ

今回紹介するのは、「TensorZero」という、LLMアプリケーション開発のためのオールインワンの宇宙船だ。このツールを使いこなせば、君はより少ない燃料(労力)で、より遠い宇宙(成功)へと到達できるはずだ。ソフトウェアエンジニアリングの観点から見ると、TensorZeroはLLM(大規模言語モデル)を扱うプロジェクトにおける、「信頼性と効率」を劇的に向上させるための、まるで宇宙船のコックピットのような存在だ。


Transformerベースの物体検出RF-DETR: カスタムAIモデル開発を加速させる方法

最近、Roboflowが開発した「RF-DETR (Roboflow Detection TRansformer)」というモデルをプロジェクトで試してみたんです。これが本当にすごくて、物体検出とセグメンテーションの分野でSOTA(State-of-the-Art、最高水準)を達成しているのに、リアルタイム性も兼ね備えているという優れもの。