機械学習の全体地図(2)タスクとモデル
回帰・分類・クラスタリングなど「何を出力するか」で分けたタスクと、線形モデル・決定木・ニューラルネットワークなど「規則をどう表すか」で分けたモデルを整理し、実務でのモデルの選び方の定石を紹介します。
連載 機械学習の全体地図 第2回/全8回
② タスク:何を出力するか
出力の種類で分けると抜け漏れなく整理できます。
教師ありのタスク
回帰(連続値を出す) Regression
数値そのものを予測する。
例:売上、気温、所要時間。時間順に並んだデータで未来を当てる時系列予測は、時間の順序を守って扱う回帰(または分類)。「解約までの期間」のように、観測期間中にまだ起きていないデータ(打ち切り)を含む場合は生存時間分析という専用の枠組みを使う。
分類(カテゴリを出す) Classification
| 種類 | ラベルの付き方 | 例 |
|---|---|---|
| 二値分類 | 2つのうち1つ | 不正取引か否か |
| 多クラス分類 | 3つ以上のうち、必ず1つ | 手書き数字 0〜9 |
| マルチラベル分類 | 複数を同時に付けてよい | 記事に「政治」「経済」両方 |
★1〜5の評価のように順序のあるカテゴリを当てる「順序回帰」は、回帰と分類の中間にあたる。
ランキング(並び順を出す) Learning to rank
候補を「関連の高い順」に並べる。検索結果や推薦で使う。学習の仕方は、1件ずつ点数を学ぶポイントワイズ、2件の優劣を学ぶペアワイズ、並び全体を学ぶリストワイズの3種類。
構造化予測(互いに関係する複数の値を出す) Structured prediction
1つの答えではなく、関係し合う答えの組をまとめて出す。たとえば翻訳では、訳文の各単語が前後の単語とつながっている必要があるため、1語ずつ別々に決めるのではなく文全体として出力する。下の「系列」は、文章のように順番に並んだデータのこと。
- 系列ラベリング:単語ごとにラベル(例:文中の人名・地名を抜き出す)
- 系列変換:系列から系列へ(例:翻訳、要約、音声認識)
- 物体検出:画像内の物体の位置(枠)と種類
- セグメンテーション:画素ごとに分類
教師なしのタスク
クラスタリング(似たものをまとめる) Clustering
各データを1つのグループに割り当てる「ハード」と、所属の確率を出す「ソフト」がある。
代表手法:k-means(グループ数を先に決める)、階層型クラスタリング、DBSCAN(点が密集している所をまとまりとみなし、どこにも属さない点は外れ値にする)、混合ガウスモデル(ソフト)
動かしてみる:k-meansを1歩ずつ進める
◆=グループの中心(3個)。最初は、わざと偏った位置から始めている。「別の初期値」ではランダムな3点から始める
数式で見る:k-meansが最小化するもの
μc(i) は点 i が属するグループの中心で、J はデモの「距離の二乗和」です。割り当ても中心の移動も J を増やさないので、必ずどこかで止まります。ただし最小値にたどり着く保証はなく、初期値によって違う結果に落ち着くことがあります(局所解)。そのため実務では、初期値を変えて何度か実行し、最も良い結果を使います(scikit-learn の n_init)。
次元削減・表現学習(情報を少ない数値に圧縮する) Dimensionality reduction / Representation learning
データを、扱いやすい少数の数値で表し直す(この表し方を学ぶことを表現学習と呼ぶ)。代表手法:主成分分析 PCA(データのばらつきが大きい方向を軸に取り直す)、t-SNE・UMAP(主に2次元での可視化用)、オートエンコーダ(入力をいったん小さく圧縮してから元に戻すように学ぶNN)。似たもの同士が近くなるように数値化する「類似度学習」もここに含まれ、類似検索や顔認証に使われる。
異常検知(珍しいものを見つける) Anomaly detection
正常データの性質を学び、そこから外れるものを検出する。異常の実例に正解ラベルが十分あれば、正常が大半を占める偏った二値分類としても解ける。
代表手法:Isolation Forest(ランダムな分割を繰り返し、早く孤立する点を異常とみなす)、One-Class SVM(正常データを囲む境界を学ぶ)、LOF(周りと比べて密度が低い点を異常とみなす)、オートエンコーダ(元に戻したときのずれが大きい点を異常とみなす)
密度推定(データの分布を推定する) Density estimation
ある値がどれくらい起こりやすいかを、データから見積もる。
代表手法:カーネル密度推定(各データ点の周りに小さな山を置いて足し合わせる)、混合ガウスモデル(いくつかの釣鐘型の分布の重ね合わせで表す)
相関ルール(一緒に起きる組み合わせを見つける) Association rule mining
例:「パンを買う人は牛乳も買いやすい」。代表手法:Apriori。指標は支持度・確信度・リフト。
生成(新しいデータを作る) Generative modeling
学習データの分布に従う新しい文章・画像・音声などを作る。データの分布を学ぶ点で密度推定と近い(ただしGANのように確率を直接は出さない手法もある)。文章生成では、自己教師あり学習で大規模に学ぶ方法が主流。
代表手法:自己回帰モデル(前から1つずつ続きを作る。LLM)、VAE(圧縮した数値から新しいデータを作る)、GAN(作る側と見破る側を競わせる)、拡散モデル(ノイズから少しずつ画像を作る)
強化学習のタスク
方策の学習(行動の決め方を出す) Policy learning
例:ゲームAI、ロボット制御、広告配信の最適化(バンディット)
理解度チェック
③ モデル:規則をどんな形で表すか
大きく6つの系統があります。下の図は、同じデータに対して各系統が引く境界線のイメージです。系統名をタップすると詳細が開きます。
点線は、2種類のデータを分ける境界線のイメージです。
線形モデル Linear models
各特徴量に「重み」を掛けて足し合わせた値(重み付き和)で予測する。重みが大きい特徴量ほど予測への影響が大きい。
- 線形回帰。Ridge・Lassoは、重みが大きくなりすぎないよう抑える「正則化」を加えた線形回帰で、学習データに合わせすぎる(過学習)のを防ぐ
- ロジスティック回帰:名前は「回帰」だが分類のモデル
- 線形SVM
- ARIMA:過去の値の重み付き和で未来を予測する時系列モデル
- 教師なしでは主成分分析(PCA)も線形の仲間
高速、解釈しやすい、ベースラインに最適
直線で表せない関係(例:年齢が中くらいのときだけ値が高い)は、特徴量を工夫しないと表せない
カーネル法 Kernel methods
データをより多くの次元に変換したと考えることで、直線では分けられないデータも曲線で分けられるようにする。実際には変換せずに済む計算の工夫(カーネルトリック)を使う。
- カーネルSVM、サポートベクター回帰
- ガウス過程(予測の不確かさも出せる)
中小規模データで高精度
データ数が増えると計算量が急増
決定木とアンサンブル Decision trees / Ensembles
「条件で分岐」を繰り返して予測する。複数の木を組み合わせると強くなる。
- 決定木
- ランダムフォレスト:多数の木を並列に作り、平均または多数決(バギング)
- 勾配ブースティング:前の木の誤りを次の木が直す(XGBoost、LightGBM、CatBoost)
- 教師なしでは Isolation Forest(異常検知)も木を使う
表形式データ(Excelのような行と列のデータ)で最有力(ただし件数が少ないと線形モデルに負けることもある)、数値の大きさをそろえる前処理(スケーリング)が不要、欠損に強い実装も多い
画像・音声・文章など生データには不向き、学習データの範囲の外の値を予測する(外挿)のが苦手
距離・近傍ベース Nearest neighbors
「近いデータは似た答え」という考え方で予測する。
- k近傍法(k-NN)
- 教師なしでは k-means、DBSCAN、LOF も距離の考え方を使う
仕組みが単純、学習がほぼ不要
予測時に全データと比較するため重い、スケーリング必須、特徴量が多い(高次元)と、どの点も同じくらい遠くなり精度が落ちる
確率・ベイズモデル Probabilistic / Bayesian models
データが生まれる確率の仕組みを仮定して学ぶ。たとえばナイーブベイズは「迷惑メールには『無料』という語が出やすい」といった確率を数えて判定する。
- ナイーブベイズ(文書分類の定番ベースライン)
- 混合ガウスモデル、隠れマルコフモデル(系列の背後にある見えない状態を扱う)
- ベイズ線形回帰、ベイジアンネットワーク
不確かさを確率で表せる、少ないデータでも安定しやすい
仮定が現実とずれると精度が落ちる
ニューラルネットワーク(深層学習) Neural networks / Deep learning
単純な計算をする層を何層も重ねたモデル(NNと略す)。予測に役立つ特徴の取り出し方まで自動で学ぶ。データの形に合わせて構造を選ぶ。
| 構造 | 得意なデータ・用途 |
|---|---|
| MLP(基本形のNN) | 表形式、他の構造の部品 |
| CNN | 画像(近くの画素の関係を捉える) |
| RNN・LSTM | 系列(現在は多くの用途でTransformerに置き換わった) |
| Transformer | 文章を中心に画像・音声まで汎用。LLMの基盤 |
| GNN | グラフ構造=点と線のつながり(分子、SNSの人間関係) |
| オートエンコーダ・VAE | 圧縮、異常検知、生成 |
| GAN・拡散モデル | 画像などの生成 |
画像・音声・文章で圧倒的、大量データで伸び続ける
大量のデータと計算資源が必要、判断理由の説明が難しい
数式で見る:線形モデルと正則化
線形回帰
重み w と切片 b を学習します。ŷ は予測値です。
ロジスティック回帰
シグモイド関数 σ は、どんな数も0〜1に押し込むので、p を「陽性である確率」として使えます。p が閾値以上なら陽性と判定します。
正則化:損失に「重みの大きさへの罰則」を足したものを最小にします。
λ が大きいほど重みが小さく抑えられます。L1は重みをちょうど0にしやすく、使う特徴量を選ぶ効果があります。scikit-learnの LogisticRegression の C は λ の逆数にあたり、小さいほど正則化が強くなります。
理解度チェック
モデルの選び方:実務の定石
迷ったときの出発点です。最後は、候補を同じ方法で評価して決めます。
どの場合にも共通する3つの原則
- 最初に単純なベースライン(平均値、多数派、線形モデル)を作り、それを超えるかで判断する
- 画像・文章・音声は、ゼロから作らず学習済みモデルを探して使う(転移学習)
- 候補を2〜3個に絞り、同じ交差検証(データの分け方を変えて何度か評価する方法。④で説明)で比べる。精度だけでなく、説明のしやすさ、予測の速さ、運用の手間も比べる
| データ・状況 | まず試す | 次の候補 | 注意点 |
|---|---|---|---|
| 表形式(数千件以上) | 勾配ブースティング | 線形モデル(比較用) | 欠損やカテゴリ変数をそのまま扱える実装が多い |
| 表形式(数百件以下) | 正則化付きの線形モデル | 浅い決定木、ランダムフォレスト | 評価のばらつきが大きいので、差がわずかなら単純な方を選ぶ |
| 判断の理由を説明する必要がある | ロジスティック回帰、浅い決定木 | 勾配ブースティング+SHAP(1件ごとの予測理由を示す手法)など | 誰に何を説明するかを先に決める(責任あるAI) |
| 画像 | 学習済みCNN・Vision Transformerのファインチューニング | 学習済みモデルで特徴を取り出し、線形モデルで分類 | データ拡張で件数不足を補う |
| 文章の分類 | TF-IDF(単語の出現頻度を使う古典的な方法)+ロジスティック回帰(ベースライン) | 学習済みTransformerのファインチューニング、LLMへのプロンプト | ラベルがほとんどないなら、LLMへのプロンプトから試す |
| 時系列の予測 | 過去の値や曜日を特徴量にした勾配ブースティング | ARIMAなどの統計モデル、時系列用のNN | 必ず時系列分割で評価する |
| 推薦 | 人気順(ベースライン)、協調フィルタリング | 特徴量を使ったランキング学習 | 履歴のない新しい利用者・商品に弱い(コールドスタート) |
| 異常検知(ラベルなし) | Isolation Forest | LOF、オートエンコーダ | 異常の実例が少しでもあれば評価に使う |
| 異常検知(ラベルあり) | クラスの重みを付けた勾配ブースティング | 異常検知の手法と比べる | 評価はPR-AUCで |
| クラスタリング | 標準化してからk-means | 形が不規則・ノイズあり→DBSCAN・HDBSCAN、所属確率が欲しい→混合ガウス | グループ数は指標だけでなく、業務で解釈できるかで決める |
| 可視化 | PCA | t-SNE・UMAP | t-SNEの図では、塊の大きさや塊同士の距離がそのまま意味を持たないことがある |
| 文章の生成・対話 | 既存のLLMへのプロンプト | RAG、ファインチューニング | 深層学習とLLMを参照 |
Spark