機械学習の総合ガイド
機械学習とは何か?
機械学習(Machine Learning)は、コンピュータがデータから自動的にパターンを見つけ出し、新しいデータに対して予測や判断を行えるようにする技術です。
なぜ機械学習が必要なのか?
従来のプログラミングでは、人間が明確なルールを書いてコンピュータに指示していました:
入力データ + プログラム → 出力
しかし、以下のような場面では従来の方法では限界があります:
- 画像認識: 「猫の写真を判別する」ルールを人間が書くのは極めて困難
- スパムメール検出: 新しいスパムの手口に柔軟に対応する必要がある
- 推薦システム: ユーザーの好みは複雑で個人差が大きい
- 自然言語処理: 言語の微妙なニュアンスを理解する必要がある
機械学習では、データから自動的にパターンを学習します:
入力データ + 正解データ → アルゴリズム(モデル)
新しい入力データ + 学習済みモデル → 予測結果
機械学習の 3 つの主要カテゴリ
1. 教師あり学習(Supervised Learning)
- 特徴: 正解が分かっているデータ(ラベル付きデータ)を使って学習
- 目的: 新しいデータの正解を予測する
- 例: スパムメール判定、株価予測、医療診断
2. 教師なし学習(Unsupervised Learning)
- 特徴: 正解が分からないデータから隠れたパターンを発見
- 目的: データの構造や特徴を理解する
- 例: 顧客のグループ分け、異常検知、データの次元削減
3. 強化学習(Reinforcement Learning)
- 特徴: 行動の結果から報酬や罰を受けながら最適な行動を学習
- 目的: 長期的な報酬を最大化する戦略を見つける
- 例: ゲーム AI、自動運転、ロボット制御
教師あり学習の手法
回帰問題(連続値の予測)
線形回帰(Linear Regression)
概要: データ間の関係を直線(またはより高次の曲線)で表し、連続値を予測する最も基本的な手法です。
数学的背景: 予測式:
$$ y = w₀ + w₁x₁ + w₂x₂ + ... + wₙxₙ $$
- y: 予測したい値(目的変数)
- x₁, x₂, ..., xₙ: 入力データ(説明変数)
- w₀, w₁, ..., wₙ: 学習で求めるパラメータ(重み)
行列形式では: y = Xw
- X: 入力データの行列(m×n、m はデータ数、n は特徴数)
- w: 重みベクトル(n×1)
最小二乗法による解: 誤差を最小化するために、予測値と実際の値の差の二乗和を最小化します。
解析解:
$$ w = (X^T X)^(-1) X^T y $$
使用場面:
- 売上予測(過去のデータから将来の売上を予測)
- 住宅価格予測(立地、広さ、築年数から価格を予測)
- 温度予測(時間、湿度、気圧から温度を予測)
ロジスティック回帰(Logistic Regression)
概要: 分類問題を確率の観点から解く手法で、結果を 0〜1 の確率で表現します。
数学的背景: シグモイド関数を使用:
$$ σ(x)=\frac{1}{1+{e}^{-x}} $$
$$ z = w₀ + w₁x₁ + w₂x₂ + ... + wₙxₙ $$
なぜシグモイド関数を使うのか?
- 出力が 0〜1 の範囲に収まるため、確率として解釈できる
- S 字カーブなので、境界付近で急激に変化し、分類に適している
最尤推定法:
尤度関数を最大化(または対数尤度を最大化)してパラメータを求めます。
対数尤度: L(w) = Σ[yᵢ log(p(xᵢ)) + (1-yᵢ) log(1-p(xᵢ))]
使用場面:
- スパムメール判定(メールがスパムである確率を算出)
- 病気診断(症状から病気である確率を算出)
- マーケティング(顧客が商品を購入する確率を算出)
分類問題(カテゴリの予測)
サポートベクターマシン(Support Vector Machine, SVM)
概要: データを最適に分離する超平面を見つけることで、高精度な分類を実現する手法です。
数学的背景:
目的関数(マージン最大化): min ||w||²
制約条件: yᵢ(w^T xᵢ + b) ≥ 1 (すべてのデータについて)
カーネルトリック: 非線形分離可能なデータに対して、データを高次元空間にマッピングして線形分離を行います。
- RBF カーネル:
K(x, x') = exp(-γ||x - x'||²) - 多項式カーネル:
K(x, x') = (γx^T x' + r)^d
マージンとは? 分離超平面と最も近いデータ点(サポートベクター)との距離。 マージンが大きいほど、新しいデータに対する汎化性能が高くなります。
使用場面:
- 画像分類(手書き文字認識、物体検出)
- テキスト分類(文書のカテゴリ分け)
- バイオインフォマティクス(遺伝子分類)
決定木(Decision Tree)
概要: データを特徴ごとに分割し、ツリー構造で予測を行う直感的でわかりやすいアルゴリズムです。
数学的背景: 情報利得(Information Gain)を最大化する特徴を選択します。
エントロピー: H(S) = -Σ p(c) log₂ p(c)
- p(c): クラス c の確率
情報利得: IG(S, A) = H(S) - Σ |Sᵥ|/|S| × H(Sᵥ)
- A: 分割に使う特徴
- Sᵥ: 特徴 A の値 v を持つデータの集合
ジニ不純度:
分類においてはジニ不純度もよく使われます。
Gini(S) = 1 - Σ p(c)²
使用場面:
- 医療診断(症状から病気を特定)
- 融資審査(収入、勤続年数等から融資可否を判断)
- ビジネス戦略(市場条件から戦略を選択)
ランダムフォレスト(Random Forest)
概要: 複数の決定木を組み合わせて予測精度を向上させるアンサンブル手法です。
数学的背景: バギング(Bootstrap Aggregating)とランダム特徴選択を組み合わせます。
- ブートストラップサンプリング: 元データからランダムに復元抽出で N 個のサンプルを作成
- ランダム特徴選択: 各ノードで全特徴からランダムに m 個選択(通常 m = √(全特徴数))
- 多数決・平均: 分類は多数決、回帰は平均値を出力
バイアス-バリアンス トレードオフ:
- 個々の決定木は高バリアンス(データに敏感)
- 多数の木の平均を取ることでバリアンスを減少
- 予測精度とモデルの安定性が向上
使用場面:
- 複雑なパターン認識(画像分類、音声認識)
- 高次元データの分析(遺伝子解析、金融データ分析)
- 特徴量の重要度評価
k 近傍法(k-Nearest Neighbors, kNN)
概要: 新しいデータに最も近い k 個のデータの多数決(または平均)で予測を行う、シンプルで直感的なアルゴリズムです。
数学的背景: 距離メトリック:
- ユークリッド距離:
d(x, y) = √(Σ(xᵢ - yᵢ)²) - マンハッタン距離:
d(x, y) = Σ|xᵢ - yᵢ| - ミンコフスキー距離:
d(x, y) = (Σ|xᵢ - yᵢ|^p)^(1/p)
分類: class = arg max Σ I(yⱼ = c) (最もよく現れるクラス)
回帰: y = (1/k) Σ yⱼ (k 個の近傍の平均値)
k の選択:
- k が小さいと:ノイズに敏感、複雑な境界を学習
- k が大きいと:滑らかな境界、単純すぎる可能性
使用場面:
- 推薦システム(似たユーザーの好みを参考)
- 画像認識(似た画像から分類)
- 異常検知(正常データから遠いデータを検出)
ナイーブベイズ(Naive Bayes)
概要: ベイズの定理を用いて確率論的に分類を行う手法で、「ナイーブ」(素朴)な独立性仮定を置くのが特徴です。
数学的背景: ベイズの定理:
$$ P(B|A) = \frac{P(A|B)P(B)}{P(A)} $$
- P(C|X): データ X が与えられたときのクラス C の確率(事後確率)
- P(X|C): クラス C が与えられたときのデータ X の確率(尤度)
- P(C): クラス C の確率(事前確率)
- P(X): データ X の確率(周辺確率)
ナイーブ(独立性)仮定:
特徴量は互いに独立であると仮定します:
P(x₁, x₂, ..., xₙ|C) = P(x₁|C) × P(x₂|C) × ... × P(xₙ|C)
分類の決定:
Ĉ = arg max P(C) × ∏ P(xᵢ|C)
主な種類:
- ガウシアンナイーブベイズ: 連続値に対して正規分布を仮定
- 多項式ナイーブベイズ: 離散値(単語の出現回数など)に対して多項分布を仮定
- ベルヌーイナイーブベイズ: バイナリ特徴量(単語の有無など)に対してベルヌーイ分布を仮定
なぜ「ナイーブ」なのに良く働くのか?
- 独立性仮定は現実的でなくても、分類境界の推定には十分な場合が多い
- データが少なくても動作する(高次元データに強い)
- 計算が高速で実装が簡単
使用場面:
- スパムメール分類(単語の出現パターンから判定)
- テキスト分類(文書のカテゴリ分け)
- 医療診断(症状の組み合わせから病気を推定)
- 感情分析(レビューの感情を分析)
教師なし学習の手法
クラスタリング(データのグループ分け)
k-means
概要: データを k 個のクラスタに分割し、各クラスタの重心との距離の二乗和を最小化する代表的なクラスタリング手法です。
数学的背景:
目的関数: J = ΣΣ ||xᵢ - μⱼ||²
- xᵢ: データ点 i
- μⱼ: クラスタ j の重心
- クラスタ j に属するデータの集合を Cⱼ とする
アルゴリズム:
- k 個の重心をランダムに初期化
- 各データを最も近い重心のクラスタに割り当て
- 各クラスタの重心を再計算:
μⱼ = (1/|Cⱼ|) Σ xᵢ - 収束するまで 2-3 を繰り返し
使用場面:
- 顧客セグメンテーション(購買履歴でグループ分け)
- 画像分割(ピクセルの色情報でグループ分け)
- 遺伝子分析(類似の発現パターンでグループ分け)
階層型クラスタリング(Hierarchical Clustering)
概要: データ間の類似度に基づいて階層的な樹形図(デンドログラム)を作成し、自然なクラスタ構造を発見する手法です。
数学的背景: 凝集型(ボトムアップ):
- 各データを個別のクラスタとして開始
- 最も近い 2 つのクラスタを統合
- 1 つのクラスタになるまで繰り返し
距離メトリック(クラスタ間距離):
- 単連結法:
d(A,B) = min{d(a,b) : a∈A, b∈B} - 完全連結法:
d(A,B) = max{d(a,b) : a∈A, b∈B} - 平均連結法:
d(A,B) = (1/|A||B|) ΣΣ d(a,b) - Ward 法: クラスタ内分散の増加量が最小となるように統合
使用場面:
- 系統樹の作成(生物種の進化関係)
- 社会ネットワーク分析(コミュニティ発見)
- 市場セグメンテーション(階層的な顧客分類)
次元削減(データの圧縮と可視化)
主成分分析(Principal Component Analysis, PCA)
概要: 高次元データを少数の主要な成分に圧縮し、データの分散を最大限保持しながら次元削減を行う線形手法です。
数学的背景:
データ行列 X(n×p、n はサンプル数、p は特徴数)から、分散共分散行列を計算:
C = (1/(n-1)) X^T X
固有値分解:
C v = λ v
- v: 固有ベクトル(主成分の方向)
- λ: 固有値(その主成分の分散の大きさ)
主成分得点:
Z = X W
- W: 固有ベクトルを列に持つ行列(主成分の重み)
- Z: 主成分得点(変換後のデータ)
寄与率:
第 k 主成分の寄与率 = λₖ / Σλᵢ
累積寄与率が 80-90%になるまでの成分を選択することが多い。
使用場面:
- 画像圧縮(ピクセル情報の次元削減)
- データ可視化(高次元データを 2D/3D プロット)
- ノイズ除去(主要成分のみを使用)
強化学習の手法
強化学習は、エージェントが環境との相互作用を通じて最適な行動戦略を学習するパラダイムです。
基本概念
マルコフ決定過程(Markov Decision Process, MDP)
強化学習の数学的基礎:
- 状態 S: エージェントが置かれている状況
- 行動 A: エージェントが取れる行動
- 報酬 R: 行動の結果得られる報酬
- 方策 π: 状態から行動への写像
- 価値関数 V: 状態または状態-行動ペアの価値
Q 学習(Q-Learning)
概要: 状態-行動価値関数 Q(s,a)を学習し、各状態で最適な行動を選択するモデルフリー手法です。
数学的背景:
ベルマン方程式:
Q(s,a) = R(s,a) + γ max Q(s',a')
Q 学習の更新式:
Q(s,a) ← Q(s,a) + α[r + γ max Q(s',a') - Q(s,a)]
- α: 学習率(0 < α ≤ 1)
- γ: 割引因子(0 ≤ γ < 1)
- r: 即座の報酬
ε-greedy 戦略:
- 確率 ε で探索(ランダムな行動)
- 確率(1-ε)で活用(最適と思われる行動)
使用場面:
- ゲーム AI(チェス、囲碁、ビデオゲーム)
- ロボティクス(経路計画、動作制御)
- 自動取引(金融市場での売買戦略)
方策勾配法(Policy Gradient Methods)
概要: 方策を直接パラメータ化し、期待報酬を最大化するようにパラメータを更新する手法です。
数学的背景:
方策をパラメータ θ で表現: π(a|s,θ)
目的関数: J(θ) = E_π[Σ r_t]
REINFORCE アルゴリズム:
∇J(θ) = E_π[∇ log π(a|s,θ) Q^π(s,a)]
実際の更新式:
θ ← θ + α ∇ log π(a_t|s_t,θ) G_t
- G_t: 時刻 t からの累積報酬
使用場面:
- 連続行動空間の制御
- 確率的な方策が必要な環境
- 複雑な戦略空間を持つゲーム
Actor-Critic
概要: Actor(方策)と Critic(価値関数)の 2 つのニューラルネットワークを組み合わせ、安定した学習を実現する手法です。
数学的背景:
- Actor: 方策 π(a|s,θ) を更新
- Critic: 価値関数 V(s,φ) を更新
Advantage 関数:
A(s,a) = Q(s,a) - V(s) = r + γV(s') - V(s)
更新式:
- Critic:
φ ← φ + α_v ∇_φ [A(s,a)]² - Actor:
θ ← θ + α_π ∇_θ log π(a|s,θ) A(s,a)
使用場面:
- ロボット制御(歩行、マニピュレーション)
- 自動運転(運転行動の学習)
- リソース管理(クラウド資源の最適配分)
深層学習(Deep Learning)
深層学習は、多層のニューラルネットワークを用いて複雑なパターンを学習する手法群です。
畳み込みニューラルネットワーク(CNN)
概要: 画像データの空間的な特徴を効果的に捉えるために設計されたネットワーク構造です。
数学的背景:
畳み込み演算:
(f * g)(x,y) = ΣΣ f(i,j) g(x-i, y-j)
フィルタ(カーネル): 小さな重み行列(例:3×3)で、画像の局所的な特徴を検出
- エッジ検出フィルタ
- ブラーフィルタ
- シャープネスフィルタ
プーリング: 特徴マップのサイズを削減し、平行移動不変性を獲得
- Max Pooling:
max(region) - Average Pooling:
mean(region)
使用場面:
- 画像分類・物体検出
- 医療画像診断
- 自動運転での環境認識
再帰ニューラルネットワーク(RNN)・LSTM
概要: 時系列データや順序を持つデータを処理するために設計されたネットワークです。
数学的背景:
RNN:
h_t = tanh(W_hh h_{t-1} + W_xh x_t + b_h)
y_t = W_hy h_t + b_y
LSTM(長短期記憶): 勾配消失問題を解決するため、ゲート機構を導入:
- 忘却ゲート:
f_t = σ(W_f [h_{t-1}, x_t] + b_f) - 入力ゲート:
i_t = σ(W_i [h_{t-1}, x_t] + b_i) - 出力ゲート:
o_t = σ(W_o [h_{t-1}, x_t] + b_o)
セル状態の更新:
C_t = f_t * C_{t-1} + i_t * tanh(W_C [h_{t-1}, x_t] + b_C)
使用場面:
- 機械翻訳・自然言語処理
- 株価予測・時系列分析
- 音声認識・生成
Transformer・Attention 機構
概要: 系列データを並列処理可能にし、長距離依存関係を効果的に捉える革新的なアーキテクチャです。
数学的背景:
Self-Attention:
Attention(Q,K,V) = softmax(QK^T/√d_k)V
- Q: Query 行列
- K: Key 行列
- V: Value 行列
- d_k: キーの次元数
Multi-Head Attention:
複数の attention head を並列実行し、異なる種類の関係性を捉える:
MultiHead(Q,K,V) = Concat(head_1,...,head_h)W^O
head_i = Attention(QW_i^Q, KW_i^K, VW_i^V)
位置エンコーディング:
PE(pos, 2i) = sin(pos/10000^{2i/d_{model}})
PE(pos, 2i+1) = cos(pos/10000^{2i/d_{model}})
使用場面:
- 大規模言語モデル(GPT、BERT)
- 機械翻訳(Google Translate)
- 画像生成(Vision Transformer)
アンサンブル学習
複数のモデルを組み合わせて予測精度を向上させる手法群です。
バギング(Bagging)
概要: Bootstrap サンプリングにより複数のモデルを訓練し、それらの予測を平均化する手法です。
数学的背景:
最終予測値(回帰): ŷ = (1/M) Σ f_m(x)
最終予測値(分類): ŷ = arg max Σ I(f_m(x) = c)
分散の削減: M 個の独立なモデルの分散が σ² の場合、平均の分散は σ²/M
使用場面:
- ランダムフォレスト
- Extra Trees
- 不安定なモデルの安定化
ブースティング(Boosting)
概要: 弱い学習器を順次訓練し、前のモデルの誤りを次のモデルで修正していく手法です。
AdaBoost の数学的背景:
- サンプル重み初期化:
w_i = 1/N - 弱分類器 h_t を訓練
- エラー率計算:
ε_t = Σ w_i I(h_t(x_i) ≠ y_i) - 分類器重み:
α_t = (1/2) ln((1-ε_t)/ε_t) - サンプル重み更新:
w_i ← w_i exp(-α_t y_i h_t(x_i))
最終分類器: H(x) = sign(Σ α_t h_t(x))
使用場面:
- AdaBoost(顔検出)
- Gradient Boosting(XGBoost, LightGBM)
- 弱い特徴の組み合わせ
スタッキング(Stacking)
概要: 複数の基底モデルの予測結果を入力として、メタモデルが最終予測を行う手法です。
数学的背景:
- 基底モデル:
f_1(x), f_2(x), ..., f_M(x) - メタ特徴:
z = [f_1(x), f_2(x), ..., f_M(x)] - メタモデル:
g(z) = final_prediction
交差検証による予測値生成: 過学習を防ぐため、基底モデルの予測値は交差検証で生成
使用場面:
- Kaggle コンペティション
- 異なる種類のモデルの組み合わせ
- 高精度が要求されるタスク
このように、機械学習には様々な手法があり、それぞれが異なる問題設定や データの性質に適しています。先輩の作業内容や解決したい問題に応じて、適切な手法を選択することが重要ですね ♪