「いくつ?」と「どれ?」
前の章では、勉強時間からテストの点数を、広告費から売上を予測しました。どちらも 「いくつになるか」という数値 を答える問題です。このような問題を 回帰 と呼びます。
一方で、身の回りのAIが解いている問題には、もう一つ大きな種類があります。
- 届いたメールは、迷惑メールか、そうでないか
- 写真に写っているのは、犬か、猫か、鳥か
- このクレジットカードの利用は、本人によるものか、不正利用か
これらは「いくつか」ではなく、あらかじめ決まった選択肢の中から「どれに当てはまるか」 を答える問題です。このような問題を 分類 と呼びます。
実は、実務で使われている機械学習の多くは分類です。迷惑メールフィルタ、顔認証、医療画像の診断支援、不良品の検出など、「AIが判断している」と言われる場面の多くは、この分類の問題として作られています。
「ラベル」と「境界線」
分類でも、学習の流れは回帰と同じです。入力 X と正解 y の組をたくさん用意して、モデルに学習させます。違うのは、正解 y が数値ではなく グループの名前 になる点です。
分類における正解のことを ラベル と呼び、選択肢となる各グループのことを クラス と呼びます。コンピュータは文字より数値を扱う方が得意なので、ラベルは「不合格なら0、合格なら1」のように、番号に置き換えて表すのが一般的です。
import numpy as np
# 1人分のデータ = [勉強時間, 睡眠時間]
X = np.array([[1, 8], [2, 7], [3, 6], [6, 7], [7, 6], [8, 8]])
# ラベル: 0 = 不合格, 1 = 合格
y = np.array([0, 0, 0, 1, 1, 1])
このデータを、横軸を勉強時間、縦軸を睡眠時間にしてグラフに点を打つと、不合格の人の点は左側に、合格の人の点は右側に集まります。すると、2つのグループの間に「ここより右なら合格」という 境界線 を引けそうです。
分類モデルの学習とは、直感的に言えば、データからこの境界線を見つけること です。一度境界線が決まれば、新しい人のデータが来たとき「境界線のどちら側にあるか」で、その人のクラスを予測できます。
回帰では「データの点の近くを通る線」を探しました。分類では「2つのグループの点を分ける線」を探します。同じ「線を見つける」でも、目的が違うことに注目してください。
よくある誤解:「ラベルが数字なら回帰で解ける?」
ラベルを0と1で表すと、「数値なのだから、回帰で予測すればいいのでは?」と思うかもしれません。ここに分類の大事なポイントがあります。
例えば、写真に写っている動物を「犬 = 1、猫 = 2、鳥 = 3」という番号で表したとします。回帰のように数値として扱うと、次のようなおかしなことが起こります。
- 「犬(1)と鳥(3)の平均は猫(2)」という、意味のない計算ができてしまう
- 予測値が「2.4」のように、どのクラスにも当てはまらない値になる
ラベルの番号は ただの名前(背番号のようなもの) で、大小関係や足し算に意味はありません。だからこそ、分類には分類のための専用の考え方やモデルが必要になります。
この章では、次の流れで分類を学んでいきます。
- ロジスティック回帰: 前の章の一次関数を使って、分類を「確率」で考える
- 決定木: 「はい/いいえ」の質問を重ねて分類する
- モデルの評価: 作ったモデルが本当に役に立つのかを、正しく確かめる方法
特に3つ目の「評価」は、精度の高さだけに目を奪われないために、実務でとても重要になる考え方です。