私たちの身の回りには、AI(人工知能)を活用した技術がたくさんあります。その中でも特に重要な役割を担っているのが「機械学習」です。今回は、機械学習の基本的なタスクの一つである「分類問題」について、初心者の方でも理解できるように、具体例を交えながら解説していきます。
1. 分類問題ってなんだろう?
「分類」と聞くと、ゴミの分別や書類の整理などを思い浮かべるかもしれません。機械学習における「分類問題」も、そのイメージに近いものです。
分類問題とは、与えられたデータが、あらかじめ決められたどのカテゴリ(クラスやラベルとも呼ばれます)に属するのかを識別・予測するタスクのことです。. 例えば、メールが「迷惑メール」か「通常のメール」かを判断したり、写真に写っている動物が「犬」か「猫」かを見分けたりするのが分類問題にあたります。
これは、コンピュータに大量のデータと「正解」をセットで学習させる「教師あり学習」という手法の一つです。
2. 分類問題の種類
分類問題は、分類するカテゴリの数によって、大きく2つの種類に分けられます。
二値分類 (Binary Classification)
具体例:
- メールが「スパム」か「スパムでない」かの判定
- クレジットカードの取引が「不正」か「正常」かの検知
- 検査結果から病気が「陽性」か「陰性」かを診断する医療診断支援
多クラス分類 (Multi-class Classification)
具体例:
- 手書きの数字画像が「0」から「9」のどれであるかの認識
- ニュース記事が「政治」「経済」「スポーツ」「エンタメ」などのどのジャンルに属するかの分類
- 写真に写っている動物が「犬」「猫」「鳥」「魚」のどれかを当てる画像認識
3. 代表的なアルゴリズム
分類問題を解くためには、様々な「アルゴリズム」と呼ばれる計算手法が使われます。ここでは代表的なものをいくつか紹介します。
アルゴリズム名 | 特徴 |
---|---|
ロジスティック回帰 | ある事象が起こる確率を予測し、その確率を基に分類します。シンプルで解釈しやすく、特に二値分類でよく利用されます。 |
サポートベクターマシン (SVM) | データ群を最も明確に分ける境界線(マージン最大化)を見つけ出して分類します。少ないデータでも高い精度を出すことがあります。 |
決定木 | データを条件(質問)で次々に分岐させていく、木のようなモデルを作成して分類します。結果の理由が分かりやすいのが特徴です。 |
ランダムフォレスト | 複数の決定木を作成し、それらの多数決によって最終的な分類を決定します。高い精度が期待できるアルゴリズムです。 |
ニューラルネットワーク | 人間の脳の神経回路を模したモデルです。画像認識や音声認識など、複雑なパターンの認識を得意とし、ディープラーニングの基礎となっています。 |
4. Pythonで体験!簡単な分類問題
ここでは、Pythonの機械学習ライブラリである「scikit-learn」を使って、有名な「アヤメ(Iris)の品種分類」を体験してみましょう。アヤメのがくの長さや幅、花びらの長さや幅から、3種類の品種(setosa, versicolor, virginica)のいずれかに分類する多クラス分類問題です。
# 必要なライブラリをインポート
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score
# 1. データの準備
# アヤメのデータセットを読み込む
iris = load_iris()
X = iris.data # 特徴量(がくの長さ、幅など)
y = iris.target # 正解ラベル(アヤメの品種)
# データを学習用とテスト用に分割
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# 2. モデルの選択と学習
# k-近傍法(k-NN)アルゴリズムを選択
model = KNeighborsClassifier(n_neighbors=3)
# 学習用データを使ってモデルを学習させる
model.fit(X_train, y_train)
# 3. 予測と評価
# テスト用データを使って品種を予測
y_pred = model.predict(X_test)
# 正解率を計算して表示
accuracy = accuracy_score(y_test, y_pred)
print(f"モデルの正解率: {accuracy:.2f}")
# 4. 未知のデータで予測
# 新しいアヤメのデータ(例)
unknown_iris = [[5.1, 3.5, 1.4, 0.2]] # setosaの特徴量に近いデータ
predicted_species = model.predict(unknown_iris)
# 予測結果を表示
print(f"新しいデータの予測結果: {iris.target_names[predicted_species]}")
このコードでは、k-近傍法(k-NN)というアルゴリズムを使い、学習データと近い特徴を持つデータがどの品種に分類されるかを予測しています。 最終的に、モデルの性能を「正解率」という指標で評価しています。
5. まとめ
分類問題は、与えられたデータをカテゴリに分ける、機械学習の基本的かつ非常に強力なタスクです。迷惑メールのフィルタリングから医療診断、画像認識まで、私たちの生活やビジネスの様々な場面で活用されています。
この記事を通して、「分類問題」がどのようなものか、少しでもイメージを掴んでいただけたなら幸いです。機械学習の世界への第一歩として、ぜひこの知識を活用してみてください。