魚49匹は長さと重さという名前のある変数2つで、写真1枚は名前のないピクセル784個でコンピュータに入る。まず2つのデータを並べ、「変数一つでルールを探す」方法が魚ではうまくいき、写真では見当違いのマスを選んでしまう様子を見る。続いて魚のデータで分類の基本ツール(ルール、パーセプトロン・SVMの直線、k-NNの距離と標準化)を確かめ、なぜ写真にはパターンを探す特徴が必要なのかへと進む。
魚49匹は長さ・重さの2つの数で、写真1枚は数千個のピクセルの数でコンピュータに入る。どちらも数なのに、なぜ写真の分類はずっと難しいのだろうか?
市場から仕入れた魚49匹(タイ35、ワカサギ14)を見分けようとしています。コンピュータに渡せるのは、物差しで測った長さと、はかりで量った重さです。
| 匹数 | 長さの範囲 | 重さの範囲 | |
|---|---|---|---|
| タイ | 35 | 25.4 ~ 41.0 cm | 242 ~ 1,000 g |
| ワカサギ | 14 | 9.8 ~ 15.0 cm | 6.7 ~ 19.9 g |
魚のデータを使った機械学習(決定木、k-NN、回帰、ロジスティック回帰、交差検証など)は、『Fish Market Dataでやさしく学ぶ機械学習(Fish Market Data로 쉽게 따라하는 머신러닝)』で詳しく扱っています。この回では、そのうち「画像分類へ進むのに必要な部分」だけを押さえます。
同じことを写真でやるとどうなるでしょうか? チワワとマフィンの写真を縦横28マス、グレースケールでごく小さく縮めても、1枚に784個の数が出てきます。カラーの224 × 224なら150,528個です。
数が多いこと以上に大きな違いがあります。「長さ25.4cm」はそれ自体に意味がありますが、「412番目のマスの明るさ187」は単独では何の意味もありません。この回ではまずこの違い、つまり変数(名前と意味があるマス)と特徴(複数のマスが一緒に作るパターン)の違いを示し、魚のデータで分類の基本ツール(ルール、直線、距離)を確かめたあと、なぜ写真には別の方法が必要なのかへ進みます。
魚のデータは実際の測定値です(Kaggle Fish Marketデータセットからタイとワカサギだけを選んだもの [R1])。タイは体高があって大きく、ワカサギは細くて小さいので、この違いが長さと重さという数にそのまま表れます。そのため魚のほうは簡単な分類で、写真と並べると「何が写真の分類を難しくしているのか」がはっきりします。
まず結論から並べて見る。魚は変数一つで一行のルールが完成し、写真では同じ方法が見当違いのマスを選ぶ。写真で意味が生まれるのはマスではなく、複数のマスの配置、つまり特徴である。
| 変数 (variable) | 特徴 (feature) | |
|---|---|---|
| 意味 | 名前と単位がある測定値 | 複数の値が一緒に作るパターンを数に要約したもの |
| 例 | 長さ25.4cm、重さ242g | 「暗い点が3つ、三角形に」「上側にとがったエッジ」 |
| 誰が作るか | 人が何を測るかを決めて測る | フィルタ・ニューラルネットワークが生データ(ピクセル)から計算または学習する |
| マス一つの意味 | ある | 生データのマス(ピクセル)一つにはない。配置にある |
| 相性のよい方法 | ルール(決定木)、線形モデル、k-NN | 畳み込みニューラルネットワーク(CNN)のようにパターンを探すモデル |
| 説明しやすさ | 簡単:「重さが131gより重いから」 | 難しい:学習したフィルタが何を見ているかを別途のぞき込む必要がある |
機械学習では、どちらも「特徴(特徴量)」と呼ぶことがあります。このシリーズでは違いをはっきりさせるため、人が名前をつけた測定値を変数、生データの配置から見つけ出したパターンを特徴と呼び分けます。
左(モバイルでは上)が魚、右(下)が写真です。まず両方のデータで「変数一つ > 基準値ならこちら」というルールを探してみます。魚はこれで終わりですが、写真ではルールが見当違いのマスを選びます。そこで写真では、フィルタで作った特徴マップからパターンを見ます。ルールとパターンは「学習用」80枚から探し、学習に使っていない「新しい写真」80枚で確かめます。
変数ごとに名前と意味があるので、人が読める一行のルールで済みます。
① 同じやり方で「ピクセル一つ > 基準値」のルールを784マスすべてから探してみます。
② フィルタで特徴マップを作り、マップ全体からパターンを要約します。
点と魚の色:● タイ・チワワ ● ワカサギ・マフィン。右の②の2つのフィルタ(暗い部分探し、エッジ探し)は、この比較のために人が選んだものです。CNNはこうしたフィルタを数十~数百個データから学び、組み合わせます(4-2・4-3)。「新しい写真」は同じ12枚を学習用とは違うようにずらし、明るさを変えて作ったものなので、まったく別の写真で行うテストより簡単です。実際の写真では、2つのパターンだけで100%を出すのは難しいでしょう。
魚のデータのマスは名前と意味がある変数です。「長さ」という変数一つにタイとワカサギの違いが込められているので、「長さ > 基準値ならタイ」という一行のルールで49匹すべてを当てられます。人が読んで説明できるルールであり、決定木のようなルールベースのモデルが得意とする領域です。人が「何を測るか」をうまく選んであげたおかげでもあります。
写真のマス(ピクセル)も形式上は変数ですが、名前も意味もありません。同じやり方でルールを探すと、コンピュータは784マスの中から偶然よく当たったマス、多くの場合は端の背景のマスを選び、初めて見る写真では性能が落ちます。写真で意味が生まれるのはマス一つではなく、複数のマスが一緒に作るパターン(暗い点がいくつ、どこに、どんな形で)です。だからフィルタで特徴マップを作り、マップ全体からパターンを要約すれば、新しい写真でもよく当てられます。
まとめると、どちらも「特徴で判断する」という点は同じです。違うのは、特徴を人が名前をつけて用意したのか(変数 → ルール)、複数のマスの配置から見つけ出さなければならないのか(ピクセル → パターン)です。表データでもロジスティック回帰のようにルール以外のモデルを使いますし、写真の特徴にもルールを当てはめられるので、この対比は「どんなデータで何がうまくいきやすいか」という傾向として理解すればよいでしょう。
では、784個のマスをすべて使えばよいのでしょうか? マスが増えれば分け方も増えますが、意味のないマスがほとんどなので、問題が消えるわけではありません。4-2ではパターンを探すフィルタを、4-3ではこの問題を「平面で分ける」という視点から見ていきます。
左の魚で「ルールを自動で探す」を、右の写真で「ピクセルルールを自動で探す」を押してみてください。魚のルールは49匹すべてを当て、人が読むことができます。写真のルールは784マスのうち写真の隅の背景のマスを選び、初めて見る写真では正解率が落ちます。右の②のように、フィルタで特徴マップを作ってパターンを要約して、はじめて写真が分けられます。この対比が、このシリーズ全体の出発点です。
1行がサンプル1つ、数のマスが特徴、正解のマスがターゲットである。魚の表と写真の表で違うのは、マスの数とマス一つの意味だけだ。
分類モデルが学ぶデータは、いつも同じ形の表です。1行がサンプル1つで、行ごとに特徴(特徴量、feature)という数のマスがいくつかと、ターゲット(ラベル、正解)のマスが1つあります。魚の分類なら、1行が魚1匹、特徴は長さと重さの2マス、ターゲットは「タイ」または「ワカサギ」です。写真の分類もまったく同じです。1行が写真1枚、特徴はピクセルの数(4-2で詳しく扱います)を一列に並べたもの、ターゲットは「チワワ」または「マフィン」です。
かんたんに言うと健康診断表です。1人が1行で、身長・体重・血圧が特徴のマス、いちばん最後の「再検査の要否」がターゲットのマスです。魚の表は項目が2つの短い診断表、写真の表は項目が784個のとても長い診断表です。違いは項目一つひとつに名前と意味があるかどうかです。「長さ25.4cm」はそれ自体に意味がありますが、「412番目のマスの明るさ187」は単独では何の意味もありません。
左は魚49匹のうち6匹、右はチワワ・マフィンの写真80枚のうち6枚です。写真は28 × 28のグレースケールに縮めてから一列に広げました。右の表の行を押すと、その写真がどのように一列になるのかが下に表示されます。
魚のデータ:Kaggle Fish Marketデータセットのタイ(Bream)35匹・ワカサギ(Smelt)14匹の長さ・重さ。パク・ヘソン『独学 機械学習+ディープラーニング(혼자 공부하는 머신러닝+딥러닝)』のサンプルコード(MITライセンス)に載っている値をそのまま使いました。写真データ:4-4の回の画像の12マス(チワワ6、マフィン6)を28 × 28に縮め、1枚ごとに位置を±4マスずらし、明るさを70~130%に変えて、それぞれ40枚ずつ作りました。
Q1. 写真分類の表で、ターゲット(ラベル)にあたるものは?
Q2. カラーの32 × 32の写真を一列に広げると、特徴は何マスになりますか?
Q3. 魚は変数一つでルールが作れるのに、写真ではピクセル一つで作ったルールが新しい写真であまり当たらない最大の理由は?
ターゲット(target)は当てるべき正解で、正解を人がつける作業がラベリングです。写真の表の行を押してみると、28 × 28の行列が1行目からつながって、784マスの一列になる様子(平坦化)が見られます。形式は魚の表と同じになりますが、マス一つひとつの名前と意味は消えてしまいます。
変数に意味があれば、境界は単純になる。間違えるたびに線を動かすパーセプトロンと、最も広い道路を通すSVMが、同じ魚のデータにどんな線を引くかを見る。
点一つが魚1匹です。紫の線が現在の境界で、線の右上が「タイ」です。パーセプトロンは魚を1匹ずつ見ながら、間違えたときだけ線を動かします。赤い円は今間違えた魚、白い円は当たった魚です。
2つの群れを分ける直線は無数にあります。SVMはその中から、2つの群れの間の空いた道路(マージン)が最も広い直線を選びます。紫の実線が境界、点線が道路の両側の端です。チェックを入れると、パーセプトロンが止まった線(緑の点線)と比べられます。
パーセプトロンと線形SVMは境界の形が同じです(直線一本、w·z + b = 0)。パーセプトロンはすべて当てたらそこで止まるので、片方の群れにぴったり寄った線になることがあり、SVMは両方の群れから最も遠い線(マージン最大)を選びます。コード1では、SVMのマージン幅は標準化単位で1.233、境界を決めたサポートベクターは最も大きいワカサギ(15.0cm、19.9g)と最も小さいタイ(25.4cm、242g)の2匹でした。
順番も覚えておきましょう。パーセプトロン(1958)が先で、SVM(1990年代)が後です [R3] [R4]。どちらも元の座標に直線を一本引く方法なので、マスに意味がある魚の表では十分ですが、ピクセルの座標では行き詰まります(4-3)。
魚のデータを使った機械学習(決定木、k-NN、回帰、ロジスティック回帰、交差検証など)は、『Fish Market Dataでやさしく学ぶ機械学習(Fish Market Data로 쉽게 따라하는 머신러닝)』で詳しく扱っています。この回では、そのうち「画像分類へ進むのに必要な部分」だけを押さえます。
パーセプトロンは長さと重さに重みを掛けて足し、その合計が0より大きければタイと答えます。学習は「間違えた魚のほうへ線を少し動かす」ことの繰り返しです。SVMの図でチェックボックスをオンにすると、パーセプトロンが止まった線とSVMの線を重ねて見られます。この重み付き和(w·x + b)は、4-2の畳み込みと4-3のニューラルネットワークでそのまま再び登場します。
新しい魚(25cm、150g)はタイだろうか? 最も近い隣人に尋ねる方法は、「近い」をどう測るかによって答えがひっくり返る。
三角が新しく捕れた魚(初期値:長さ25cm、重さ150g)です。k近傍法は、最も近い5匹の正解で多数決をとります。「元の単位」と「標準化」を切り替えながら、隣人が誰に変わるかを見てください。
元の単位で距離を測ると、長さ10cmの差と重さ10gの差が同じ大きさで入ります。ところが重さは数百gずつ差があるので、距離はほとんど重さで決まってしまいます。そのため長さ25cmの新しい魚でも、重さ150gがワカサギたち(20g以下)に「近い」と計算され、隣人5匹のうち4匹がワカサギになります。標準化すると2つの特徴が同じ物差しになり、隣人5匹がすべてタイに変わります(コード1の結果と同じ)。
ルール(セクション3)は変数一つだけを見るので、単位の影響を受けません。パーセプトロン・SVM・k-NNのように複数の特徴を混ぜて距離や重み付き和を計算する方法では、単位をそろえる必要があります。写真はすべてのマスが0~255なのでこの問題は小さいのですが、その代わり別の問題が生じます(セクション7)。
k近傍法(k-NN)は、新しいサンプルに最も近いk個の正解で多数決をとります [R5]。単純ですが「距離」がすべてなので、重さ(g)のように数の大きな変数が距離を独占すると、見当違いの隣人を選んでしまいます。写真のピクセルはすべて0~255なので単位の問題は小さいのですが、その代わり「同じ位置の数の差」が意味を反映できないという、より大きな問題があります(4-2 セクション3)。
写真のマスを魚の変数のように使うと、どこまで通用するのか? 形の違うペアと似たペアで結果が分かれる。
| 数字のペア | ルールが選んだピクセル | ピクセル一つのルール(テスト) | 64マスの重み付き和(テスト) |
|---|---|---|---|
| 0 対 1 | (5行, 5列) | 98.3% | 100.0% |
| 3 対 8 | (6行, 4列) | 86.0% | 98.3% |
| 4 対 9 | (5行, 2列) | 93.9% | 98.3% |
8 × 8の手書き数字を64マスの表とみなし、魚で使った「変数一つ > 基準値」のルールを当てはめました。形がまったく違う0と1は、真ん中のピクセル一つでもほぼすべて分けられます(真ん中が空いていれば0)。しかし3と8のように形が似たペアでは、ピクセル一つのルールは86.0%にとどまり、64マスすべての重み付き和をとってはじめて98.3%になります。
形が似ているほど、マス一つではなく複数のマスが一緒に作る形を見なければなりません。手書き数字は位置がきちんとそろった小さな写真なので重み付き和だけでもうまくいきますが、位置・照明・背景がばらばらな実際の写真では、重み付き和でも行き詰まります(4-2 セクション3、4-3 セクション2)。だから写真の分類には、パターンを探す段階、つまり特徴抽出が必要なのです。
まとめると、変数に意味がある表データでは、ルール・直線・距離のような単純なツールで十分です。写真ではマス一つに意味がないので、隣り合うマスの模様を探すフィルタと、その模様を積み重ねて形を作る層が必要です。4-2では写真が数の行列になる過程とフィルタを、4-3では層を重ねる理由を、4-4ではそれでも残る難しさを扱います。
どちらのコードも、Colabに標準でインストールされているライブラリと組み込みデータだけを使う。「ノートブック(.ipynb)をダウンロード」したあとColabでファイル → ノートブックをアップロードで開くか、コピーして新しいノートブックのセルに貼り付ける。
決定木の一段だけのルール、標準化した座標でのパーセプトロンと線形SVM、新しい魚(25cm、150g)のk-NN予測を、標準化の前後で計算する。自分のデータに置き換えるには、いちばん上の4つのリストを自分の測定値に替える。
8 × 8の手書き数字を64マスの表とみなし、ピクセル一つのルールと64マスの重み付き和(ロジスティック回帰)を、0 対 1、3 対 8、4 対 9で比べる。自分のデータに置き換えるには、compare(a, b)の数字のペアを替える。
ChatGPT、Qwen、ClaudeのようなAIアシスタントに貼り付けるプロンプトである。「コピー」を押すと、プロンプトの後ろに選んだコードが一緒につく。〔 〕の中を自分の状況に書き換えて使えばよい。
AIの答えは出発点にすぎない。提案された論文・数値・ライブラリ関数は、必ず原文と公式ドキュメントで確認する。コンテストや論文でAIの助けを借りた場合は、主催者や学術誌の規定に従って、使用した事実と範囲を明記する。
本文の黄色い点線の下線と同じ辞書である。シリーズ全体で同じ表記を使う。セクション名を押すと、最初に登場した箇所へ移動する。
たとえは理解の第一歩だが、誤解の種にもなる。人の目・脳のたとえには強さを示した。直接 実際に同じことをしているという根拠がある · 部分 一部の性質だけが似ている · なし 対応するものが知られていない
| 概念 | 日常のたとえ | 人の目・脳のたとえ | たとえが当てはまらない点 |
|---|---|---|---|
| 決定木 | 二十の扉 | なし | 実際の決定木は、質問の基準値をデータから計算して選ぶ。人のように「もっともらしい質問」を思い浮かべるわけではない |
| パーセプトロン | 間違えた問題だけを見直す誤答ノート | 部分 神経細胞が入力を集め、しきい値を超えると信号を送るという考えから生まれた | 実際の神経細胞は時間とともに変化する電気信号を扱い、学習規則もはるかに複雑だ |
| SVMのマージン | 両陣営の間に最も広い道路を通す | なし | 道路の幅は「標準化した単位」で測ったものだ。単位を変えれば、最も広い道路の位置も変わる |
| k-NN | 引っ越してきた町で、いちばん近いご近所5軒に聞いてみる | なし | 隣人を「何m離れているか」ではなく「何g、何cm違うか」で測るので、物差しをそろえないと遠い家を近いと勘違いする |
| 標準化 | 身長と体重を「クラスで何番目くらいか」に置き換えて比べる | なし | 順位は順番しか残さないが、標準化は平均からどれだけ離れているか(間隔)を残す |
E-1 著者紹介 · E-2 学術参考文献 · E-3 図・データの参考資料
講師、実務OJT担当者、チューターのための運営ガイドである。時間は目安なので、実際の授業に合わせて調整する。
| 対象 | 機械学習を初めて学ぶ大学生・社会人。Excelの表は扱えるが、モデルは初めての人 |
|---|---|
| 前提知識 | 平均と標準偏差、座標平面上の直線の式。3-2のパーセプトロンを読んでいるとよい |
| 学習目標 | ① 変数と特徴の違いを、魚と写真の例で説明できる ② サンプル・特徴・ターゲットでデータを説明し、ルール・パーセプトロン・SVM・k-NNが境界を決めるやり方の違いを言える ③ 標準化が必要な場合と、ピクセル一つを変数のように使ってはいけない理由を言える |
| 所要時間の目安 | 読む 35~45分 · 実習デモ 20分 · Colab実習 25分(コード1 15分、コード2 10分) |
導入5分(セクション1)→ セクション2 変数 vs 特徴 15分 → セクション3 表の構造 5分 → セクション4 パーセプトロン 10分 → セクション5 k-NN 5分 → セクション6 橋渡し 5分 → 確認問題 5分。
セクション1・2を自社のデータ表に置き換えて描く 20分 → セクション3のルールとセクション5のSVMの比較 20分 → セクション6 標準化の落とし穴探し(自社データの単位点検) 20分 → コード1を自社データで実行 30分。
入門者はセクション1・2・3・6だけ。中級者にはセクション4の更新式を手で一度計算させ、コード1のSVMのサポートベクターがなぜ2匹なのかを説明させる。
| セクション | 立ち止まって尋ねる質問 | 操作のコツ |
|---|---|---|
| 1 問題 | 「長さ25.4cmと、412番目のマスの187の違いは?」 | 魚の表と写真の数の個数を並べて指し示す |
| 2 変数 vs 特徴 | 「ピクセルルールが選んだマスはチワワと関係があるか?」 | 両側の「自動で探す」を順に押す |
| 3 特徴・ターゲット | 「この表で正解のマスはどこか?」 | 写真の行を押して、広げた一列を見る |
| 4 ルールと直線 | 「当たった魚を見るときは、なぜ線を動かさないのか?」 | 「1匹ずつ」で赤い円(間違い)のところで止め、SVMの図にパーセプトロンの線を重ねる |
| 5 標準化 | 「新しい魚の隣人はなぜワカサギなのか?」 | 元の単位 → 標準化に切り替え、重さのスライダーも動かす |
| 6 ピクセルは変数? | 「0と1はうまくいくのに、3と8はなぜうまくいかないのか?」 | コード2の結果表の2つの列を比べる |
| 誤解 | 正しい説明 | 見せる場面 |
|---|---|---|
| SVMがうまくいかなかったので、パーセプトロンが生まれた | 順番は逆である。パーセプトロン(1958)の後にSVM(1990年代)が登場した | セクション5の解説 |
| 重みを求めるものはすべてパーセプトロンだ | 線形SVM・ロジスティック回帰も重みを求める。違いは境界を選ぶ基準である | セクション4・5の数式の比較 |
| 特徴さえ多ければ標準化は要らない | 距離・重み付き和を使う方法は、単位が違うと結果がひっくり返る | セクション6の(25cm、150g) |
| ルールベースのモデルは時代遅れだ | 特徴に意味がある表データでは今でも強く、説明もしやすい | セクション3の一行のルール |
| 写真も表なのだから、同じ方法が通用する | 形式は同じだが、マス一つに意味がないので、パターンを探す段階が必要である | セクション7とコード2 |
サンプル49(行)、特徴2(長さ・重さ)、ターゲットはタイ1 / ワカサギ0の1マスである。
w ← w + 0.5 × (+1) × (0.2, −0.1) = w + (0.1, −0.05)。bは0.5大きくなる。
同じである。どちらもw·z + b = 0の直線である。SVMはその中からマージンが最も広いものを選ぶ。
距離がほとんど重さの差で決まるからである。150gは、数値上タイ(242g以上)よりワカサギ(20g以下)に近い。
基準値の数字が10倍になるだけで、当てる魚は同じである。変数一つだけを見るルールは単位の影響を受けない。
コード1からStandardScalerを外してSVMを学習させ、境界とサポートベクターがどう変わるかを見て、セクション6と結びつけて2文で説明する。
コード2で決定木の深さを1、3、10と増やし、3 対 8の学習・テストの正解率を表にまとめ、深くなるほど学習とテストの差がどう変わるかを解釈する。
| 入門者 | セクション4・5の数式は飛ばしても流れは途切れない。セクション3と6の実習だけはしっかりやってみる |
|---|---|
| 発展 | ロジスティック回帰をセクション4・5と同じ表で比較し、確率を出す分類器と境界だけを出す分類器の違いを発表させる |
| さらに学ぶ | Fish Market Dataでやさしく学ぶ機械学習(魚のデータによる機械学習の全体) · アン・サンソン『ビジネスのためのデータサイエンス(비즈니스를 위한 데이터 과학)』講義案 |
| 講師用資料 | 確認問題の採点基準と課題の解答例は、教育者用の解答ページ(4-1)で見られる |
「4-1 タイ vs ワカサギ」の回を最後まで読みました。研究室のみんなが一言ずつまとめます。