# 色特徴分類器の実験 (Color Feature Classifier Experiments)

舌領域の画素から取った色の特徴量（107 次元．[SPEC_02「色特徴分類器」](../04_SPEC/SPEC_02_学習・評価仕様.md)）と古典的な分類器で舌色 5 分類を行い，CNN（[TEST_03](TEST_03_交差検証結果.md)・[TEST_04](TEST_04_クラス不均衡対策の実験.md)）と**同じ分割・同じ評価**で比べた結果．ラベルが舌の色そのものであり，データが 1085 枚と少ないため，手作りの色特徴のほうが強い可能性を確かめる目的で行った．表は `uv run python scripts/summarize_cv.py runs` で再生成できる．

| 項目 | 内容 |
| --- | --- |
| 実行日時 | 2026-09-28 10:54〜11:30 頃 |
| 実行場所 | Newton・Archimedes の CPU（GPU は使わない．`tias-remote run --cpu`．2 台に 9 本ずつ） |
| 本数 | 18 本（ロジスティック回帰・勾配ブースティング × ややあり込み／除外 × seed 42・43・44 ＝ 12 本，ロジスティック回帰＋重み `inverse` × 2 条件 × 3 seed ＝ 6 本） |
| 分類器 | `logistic`（標準化＋多クラスのロジスティック回帰．C を 0.01〜100 の 5 候補から選ぶ）・`hist_gb`（HistGradientBoostingClassifier．学習率 2 × 深さ 2 の 4 候補から選ぶ） |
| 候補の選び方 | fold ごとに，学習用データで各候補を学習し，内側の検証の macro F1 が最良の候補を採用する（CNN の最良エポックの選び方に対応） |
| コード | `c66b8bd-dirty`（本ブランチの実装を実行時点で未コミットのまま使用．同じ seed で CNN と `split.json` が完全に一致することはテストで確認済み） |

## 結果 (Results)

common（「あり」と淡紅）の macro F1・正解率と，all（ややあり込みの全体）の macro F1．15 fold の平均 ± 標準偏差．CNN は各モデルの最良の構成だけを抜粋した（全体は TEST_03・TEST_04）．

| モデル | 条件 | common macro F1 | common 正解率 | all macro F1 | mild→淡紅 |
| --- | --- | --- | --- | --- | --- |
| **色特徴＋ロジスティック回帰** | 込み | **0.630 ± 0.052** | 0.721 ± 0.035 | **0.556 ± 0.043** | 0.33 |
| **色特徴＋ロジスティック回帰** | 除外 | **0.644 ± 0.040** | **0.754 ± 0.031** | 0.520 ± 0.034 | 0.55 |
| 色特徴＋ロジスティック回帰（重み inverse） | 込み | 0.568 ± 0.038 | 0.618 ± 0.036 | 0.541 ± 0.034 | 0.21 |
| 色特徴＋ロジスティック回帰（重み inverse） | 除外 | 0.599 ± 0.040 | 0.672 ± 0.029 | 0.533 ± 0.036 | 0.38 |
| 色特徴＋勾配ブースティング | 込み | 0.626 ± 0.049 | 0.712 ± 0.034 | 0.555 ± 0.044 | 0.33 |
| 色特徴＋勾配ブースティング | 除外 | 0.627 ± 0.064 | 0.747 ± 0.037 | 0.512 ± 0.042 | 0.54 |
| ResNet-50（lr 1e-3・重み sqrt） | 込み | 0.590 ± 0.057 | 0.666 ± 0.070 | 0.554 ± 0.043 | 0.25 |
| ResNet-50（lr 1e-3） | 除外 | 0.637 ± 0.062 | 0.748 ± 0.045 | 0.519 ± 0.056 | 0.48 |
| ConvNeXt-Tiny（重み inverse） | 除外 | 0.632 ± 0.060 | 0.745 ± 0.030 | 0.528 ± 0.043 | 0.47 |

common でのクラス別再現率（15 fold の平均）:

| モデル | 条件 | 淡白 | 淡紅 | 紅 | 暗赤紅 | 紫 |
| --- | --- | --- | --- | --- | --- | --- |
| 色特徴＋ロジスティック回帰 | 込み | 0.56 | 0.73 | 0.65 | 0.82 | 0.41 |
| 色特徴＋ロジスティック回帰 | 除外 | 0.48 | 0.88 | 0.59 | 0.77 | 0.36 |
| 色特徴＋ロジスティック回帰（重み inverse） | 込み | **0.81** | 0.56 | **0.79** | 0.63 | **0.60** |
| 色特徴＋ロジスティック回帰（重み inverse） | 除外 | **0.78** | 0.70 | 0.71 | 0.63 | 0.52 |
| ResNet-50（lr 1e-3） | 除外 | 0.59 | 0.83 | 0.61 | 0.79 | 0.39 |

## CNN との対応比較 (Paired Comparison)

色特徴＋ロジスティック回帰 − CNN の common macro F1（同じ条件・seed・fold どうし．15 fold）．正の値は色特徴のほうが良いことを表す．

| 比べた CNN | 込み | 色特徴が上回った fold | 除外 | 色特徴が上回った fold |
| --- | --- | --- | --- | --- |
| ConvNeXt-Tiny（対策なし） | +0.089 ± 0.065 | 14 / 15 | +0.052 ± 0.063 | 11 / 15 |
| ConvNeXt-Tiny（重み inverse） | +0.045 ± 0.069 | 11 / 15 | +0.012 ± 0.063 | 8 / 15 |
| ResNet-50（lr 1e-3） | +0.084 ± 0.093 | 13 / 15 | +0.008 ± 0.063 | 8 / 15 |
| ResNet-50（lr 1e-3・重み sqrt） | +0.041 ± 0.076 | 12 / 15 | +0.011 ± 0.069 | 9 / 15 |
| ViT-Small | +0.051 ± 0.082 | 11 / 15 | +0.064 ± 0.074 | 13 / 15 |
| EfficientNet-B0（lr 1e-3） | +0.102 ± 0.062 | 14 / 15 | +0.067 ± 0.061 | 13 / 15 |
| 色特徴＋勾配ブースティング | +0.005 ± 0.045 | 7 / 15 | +0.018 ± 0.057 | 10 / 15 |

重み `inverse` の効果（色特徴＋ロジスティック回帰．対策あり − なし）: common macro F1 は込み −0.062（0/15 fold），除外 −0.046（2/15 fold）．淡白 +0.25〜0.30・紫 +0.16〜0.18 に対して淡紅 −0.17〜0.18・暗赤紅 −0.14〜0.20．

## 分かったこと (Findings)

1. **色特徴＋ロジスティック回帰は，これまでのどの CNN と比べても同等以上だった**．除外では common macro F1 0.644 で CNN の最良（ResNet-50 lr 1e-3 の 0.637・ConvNeXt＋inverse の 0.632）と並び（対応比較で +0.01 前後．8/15 fold），**込みでは 0.630 で CNN の最良（0.590）を約 +0.04 上回った**（11〜14/15 fold）
2. **fold 間のばらつきが CNN より小さい**（標準偏差 0.040〜0.052．CNN は 0.045〜0.070）．seed による揺れもほぼ無い（mild→淡紅 の割合の標準偏差 0.01）
3. **「ややあり」の込み／除外による差が小さい**（+0.014．9/15 fold）．CNN は除外で大きく上がった（ResNet-50 で +0.09）．CNN は境界例を入れると学習が乱れるが，単純な線形モデルは影響を受けにくいと考えられる
4. 勾配ブースティングはロジスティック回帰と同程度か少し下（除外で −0.018）．非線形な分類器にしても伸びない
5. ロジスティック回帰で選ばれた正則化は強め（C = 0.1 が 30 fold 中 17，0.01 が 10）で，**単純なモデルで十分**なことを示す
6. **重み `inverse` は macro F1 を下げた**が，淡白 0.81・紫 0.60 と，**少数クラスの再現率はこれまでで最も高い**．淡紅・暗赤紅との入れ替わりが大きすぎて macro F1 では損になる．用途（見逃したくないクラスがあるか）によっては選択肢になる
7. 計算コストは極めて小さい．1 本（5 fold）の所要の大半は画像の読み込みと特徴抽出（Archimedes で約 62 秒，Newton で約 115 秒）で，ロジスティック回帰の学習は 5 fold で約 1 秒．GPU が要らない

## 注意 (Caveats)

- 差の多くは fold 間のばらつき（標準偏差 0.04〜0.07）と同程度で，確定的に言えるのは「色特徴＋ロジスティック回帰は CNN に劣らない（込みでは上回る）」まで
- 比較相手の CNN の学習率・対策は結果を見て選んだもの（TEST_03・TEST_04）で，CNN 側に有利な比較になっている．一方，色特徴側の候補（C など）は内側の検証だけで選んでおり，held_out は見ていない
- 特徴の定義（ヒストグラムの範囲・ビン数）は TEST_02 の集計値（全データの平均色）を根拠に固定した．範囲を決めるのに全データの平均だけを使っており，ラベルごとの分布は使っていない
- TIASjudge のルールベース（平均色による判定）との比較ではない（Step 6 は保留中）．ただし「色の統計だけで CNN 並み」という結果は，ルールベースとの比較の土台になる

## 次の一手 (Next Steps)

- **CNN と色特徴の併用**（CNN の予測確率と色特徴の分類器の予測確率の平均，または CNN の特徴と色特徴の連結）．両者の誤り方が違えば上乗せが期待できる
- どの特徴が効いているか（ロジスティック回帰の係数・特徴の絞り込み）を調べる．平均色だけで足りるのか，分布の形（分位点・ヒストグラム）が効いているのかが分かれば，TIASjudge のルールの改良にも使える
- ルールベース（Step 6）との比較: 同じ色空間で「平均色だけ」の分類器を作れば，TIASjudge に近い条件で比べられる

## 実験 ID (Run IDs)

手元の `runs/` に回収済み（`.gitignore` 対象）．名前の `color_logistic`・`color_hist_gb` が分類器，末尾 `_cwinv` が重み `inverse` を表す．実験 ID の日時は 2026-09-28 10:54〜11:22．

```bash
ls -d runs/*_cv_color_*
```
