第2章:機械学習の基礎知識

概念・手法・エコシステム

📖 読了時間: 20-25分 📊 難易度: 入門〜中級 💻 コード例: 5個 📝 演習問題: 4問

この章では、機械学習の基本概念、3つの学習タイプ、主要なアルゴリズム、そして実践的なワークフローを学びます。専門用語を理解し、実装への準備を整えます。

学習目標

この章を完了すると、以下のスキルを習得できます:

2.1 機械学習の定義と分類

2.1.1 機械学習とは

機械学習(Machine Learning: ML)は、データから自動的にパターンを学習し、予測や判断を行うコンピュータプログラムの総称です。

古典的定義(Arthur Samuel, 1959):

"明示的にプログラムすることなく、コンピュータに学習する能力を与える研究分野"

形式的定義(Tom Mitchell, 1997):

"タスクTにおいて、経験Eから学習し、性能指標Pで測定した性能が向上するプログラム"

具体例で理解する:

システムが過去のメールデータから学習し、新しいメールをスパムか否か判定する精度が向上すれば、それは「機械学習している」と言えます。

AI、ML、DLの関係

graph TD A[人工知能 AI
Artificial Intelligence] --> B[機械学習 ML
Machine Learning] B --> C[深層学習 DL
Deep Learning] A1[知的な振る舞いを
示すシステム全般] -.-> A B1[データから
パターンを学習] -.-> B C1[ニューラルネットワーク
を使った学習] -.-> C style A fill:#e3f2fd style B fill:#fff3e0 style C fill:#f3e5f5

包含関係:

2.1.2 機械学習の3つの学習タイプ

機械学習は、データの種類と学習方法によって3つに大別されます。

1. 教師あり学習(Supervised Learning)

定義: ラベル付きデータ(入力と正解のペア)から学習する手法

仕組み:

入力データ(特徴量) + 正解ラベル → モデル訓練 → 予測

具体例:

主要アルゴリズム:

2. 教師なし学習(Unsupervised Learning)

定義: ラベルなしデータから、隠れたパターンや構造を発見する手法

仕組み:

入力データのみ(正解なし) → モデル → パターン発見

具体例:

主要アルゴリズム:

3. 強化学習(Reinforcement Learning)

定義: 試行錯誤を通じて、報酬を最大化する行動を学習する手法

仕組み:

エージェント → 行動 → 環境 → 報酬・状態フィードバック → 学習

主要概念:

具体例:

3つの学習タイプの比較

学習タイプ データ 目的 適用例 難易度
教師あり学習 ラベル付き 予測・分類 スパム判定、価格予測、画像認識
教師なし学習 ラベルなし パターン発見 顧客分析、異常検知、データ圧縮
強化学習 報酬シグナル 行動最適化 ゲームAI、ロボット、自動運転 最高

学習タイプの選択フローチャート

graph TD A[解きたい問題] --> B{正解データは
ある?} B -->|Yes| C{出力は何?} B -->|No| D{目的は?} C -->|連続値
例:価格| E[回帰
Linear Regression] C -->|カテゴリ
例:スパム/非スパム| F[分類
Logistic Regression
Decision Tree] D -->|グループ分け| G[クラスタリング
K-means] D -->|次元削減| H[次元削減
PCA] D -->|異常検知| I[異常検知
Isolation Forest] J{試行錯誤で
最適化?} -->|Yes| K[強化学習
Q-learning
DQN] style E fill:#e8f5e9 style F fill:#e8f5e9 style G fill:#fff3e0 style H fill:#fff3e0 style I fill:#fff3e0 style K fill:#f3e5f5

2.2 機械学習の重要用語集(20語)

機械学習を学ぶ上で必須となる専門用語を、カテゴリ別に整理しました。各用語は日本語・英語・定義・具体例の4点セットで理解しましょう。

基礎用語(8語)

用語(日本語) 用語(英語) 定義と具体例
1. 特徴量 Feature モデルへの入力となるデータの属性や性質。住宅価格予測なら「広さ、築年数、駅距離」など。特徴量の質がモデル性能を大きく左右します。適切な特徴量を設計することを「特徴量エンジニアリング」と呼びます。
2. ラベル Label 教師あり学習における正解データ。スパム判定なら「スパム」「非スパム」のラベル、住宅価格予測なら「価格」の数値。ラベル付きデータの収集はコストがかかるため、データ数が限られることが多いです。
3. 訓練データ Training Data モデルの学習に使うデータセット。全データの70-80%を訓練に使うのが一般的。訓練データが多いほど、モデルは複雑なパターンを学習できますが、過学習のリスクも増えます。
4. テストデータ Test Data 学習済みモデルの性能を評価するための未学習データ。全データの20-30%を使用。重要:テストデータは学習に一切使わず、最終評価のみに使います。テストデータで高性能なら汎化性能が高いと判断できます。
5. モデル Model 入力から出力への写像を表現する数式やプログラム。線形回帰なら $y = wx + b$ という数式、ニューラルネットワークなら多層の計算グラフ。訓練により、モデルのパラメータ(重みw、バイアスb)が最適化されます。
6. 予測 Prediction 学習済みモデルが新しい入力データに対して出力する値。回帰なら連続値(例:価格3,500万円)、分類ならクラス(例:スパム)。予測精度を向上させることが機械学習の主目的です。
7. 損失関数 Loss Function 予測値と正解との差(誤差)を数値化する関数。回帰では平均二乗誤差(MSE)、分類では交差エントロピーがよく使われます。学習の目的は損失関数を最小化することです。損失が小さいほど予測精度が高いことを意味します。
8. 過学習 Overfitting 訓練データに過度に適合し、未知データへの予測性能が低下する現象。訓練精度は高いがテスト精度が低い場合に発生。対策:データ数を増やす、モデルを単純化、正則化、交差検証など。機械学習で最も注意すべき問題の一つです。

手法用語(7語)

用語(日本語) 用語(英語) 定義と具体例
9. 回帰 Regression 連続値を予測するタスク。住宅価格、株価、気温などの数値予測。代表的手法:線形回帰、リッジ回帰、ランダムフォレスト。出力が「3,500万円」「25.3℃」のように具体的な数値になります。
10. 分類 Classification カテゴリ(クラス)を予測するタスク。スパム判定、病気診断、画像認識など。2値分類(Yes/No)と多クラス分類(猫/犬/鳥)があります。出力は「スパム」「良性」「猫」などのラベルです。
11. クラスタリング Clustering 正解ラベルなしでデータをグループ分けする教師なし学習。顧客セグメンテーション、文書分類、画像圧縮などに使用。K-meansでは事前にグループ数Kを指定し、データを自動的にK個に分割します。
12. 交差検証 Cross-Validation データをK個に分割し、1つをテスト、残りを訓練に使う操作をK回繰り返す手法。K-fold交差検証(K=5や10が一般的)により、モデルの汎化性能を正確に評価できます。データが少ない場合に特に有効です。
13. ハイパーパラメータ Hyperparameter 学習前に人間が設定する調整項目。学習率、木の深さ、ニューロン数など。モデルのパラメータ(重みw、バイアスb)とは異なり、訓練では更新されません。Grid SearchやRandom Searchで最適値を探索します。
14. 正則化 Regularization 過学習を防ぐためにモデルの複雑さにペナルティを課す手法。L1正則化(Lasso)はパラメータをゼロに近づけ、L2正則化(Ridge)は小さな値に抑制します。正則化により汎化性能が向上します。
15. アンサンブル Ensemble 複数のモデルの予測を組み合わせて精度を向上させる手法。バギング(Random Forest)、ブースティング(XGBoost)、スタッキングなど。「三人寄れば文殊の知恵」の原理で、単一モデルより高精度になることが多いです。

評価用語(5語)

用語(日本語) 用語(英語) 定義と具体例
16. 精度 Accuracy 全予測のうち正解した割合。計算式:$\text{Accuracy} = \frac{\text{正解数}}{\text{全データ数}}$。100個中85個正解なら精度85%。シンプルだが、データが偏っている場合(スパム1% vs 非スパム99%)は誤解を招く指標です。
17. 再現率 Recall 実際の正例のうち、正しく検出できた割合。計算式:$\text{Recall} = \frac{\text{真陽性}}{\text{真陽性 + 偽陰性}}$。病気診断で「病気の人を見逃さない」ことが重要な場合に重視。再現率が高いほど見逃しが少ないです。
18. 適合率 Precision モデルが正と予測したもののうち、実際に正だった割合。計算式:$\text{Precision} = \frac{\text{真陽性}}{\text{真陽性 + 偽陽性}}$。スパム判定で「非スパムをスパムと誤判定しない」ことが重要な場合に重視。適合率が高いほど誤検知が少ないです。
19. F1スコア F1 Score 適合率と再現率の調和平均。計算式:$\text{F1} = 2 \times \frac{\text{Precision} \times \text{Recall}}{\text{Precision} + \text{Recall}}$。両方のバランスを取る指標で、どちらか一方だけが高くても良いスコアになりません。データが不均衡な場合に精度より有用です。
20. AUC-ROC AUC-ROC ROC曲線(横軸:偽陽性率、縦軸:真陽性率)の下側面積。0.5は完全ランダム、1.0は完全分類を意味します。閾値に依存しない評価指標で、分類器の総合的な性能を示します。AUC=0.9以上なら優秀なモデルと評価されます。

2.3 主要フレームワーク比較

機械学習の実装には、目的に応じたフレームワークの選択が重要です。ここでは4つの主要フレームワークを詳しく比較します。

2.3.1 scikit-learn(サイキットラーン)

特徴: Pythonで最も広く使われる汎用機械学習ライブラリ

強み:

弱み:

適用場面:

2.3.2 PyTorch(パイトーチ)

特徴: Meta(旧Facebook)開発の深層学習フレームワーク

強み:

弱み:

適用場面:

2.3.3 TensorFlow / Keras(テンソルフロー / ケラス)

特徴: Google開発の本番環境向け深層学習フレームワーク(Kerasは高水準API)

強み:

弱み:

適用場面:

2.3.4 XGBoost / LightGBM(エックスジーブースト / ライトジービーエム)

特徴: 勾配ブースティングに特化した高速ライブラリ

強み:

弱み:

適用場面:

フレームワーク比較表

フレームワーク 得意分野 学習難易度 速度 本番環境 GPU対応
scikit-learn 古典的ML、表形式データ ×
PyTorch 深層学習、研究開発 高(GPU)
TensorFlow/Keras 本番環境、大規模システム 中〜高 高(GPU)
XGBoost/LightGBM 表形式データ、コンペ 高(CPU)

フレームワーク選択フローチャート

graph TD A[扱うデータの種類は?] --> B{表形式データ
CSV/Excel} A --> C{画像・テキスト・音声} B --> D{データサイズ} D -->|小〜中
10万行以下| E[scikit-learn
初学者向け] D -->|大
10万行以上| F[XGBoost/LightGBM
高精度・高速] C --> G{目的は?} G -->|研究・実験| H[PyTorch
柔軟性重視] G -->|本番デプロイ| I[TensorFlow/Keras
スケーラビリティ重視] style E fill:#e8f5e9 style F fill:#e8f5e9 style H fill:#f3e5f5 style I fill:#fff3e0

2.4 機械学習エコシステム

機械学習プロジェクトは、データ収集から本番運用まで複数のステップで構成されます。全体像を理解することが重要です。

graph LR A[データソース
DB/API/ファイル] --> B[データ収集
Scraping/ETL] B --> C[データストレージ
Data Lake/DWH] C --> D[前処理
クリーニング/正規化] D --> E[特徴量エンジニアリング
変換/選択/生成] E --> F[モデル訓練
学習/調整] F --> G[評価
精度検証] G --> H{性能OK?} H -->|No| I[ハイパーパラメータ調整
特徴量追加] I --> F H -->|Yes| J[デプロイ
本番環境] J --> K[モニタリング
性能監視] K --> L[フィードバック
データ追加] L --> B style A fill:#e3f2fd style F fill:#fff3e0 style J fill:#e8f5e9 style K fill:#ffebee

各コンポーネントの役割:

2.5 機械学習ワークフロー詳細(7ステップ)

実際の機械学習プロジェクトは、以下の7ステップで進行します。各ステップの詳細、時間見積もり、注意点を理解しましょう。

Step 0:問題定式化(最も重要、見落とされがち)

目的: 解くべき問題をML的に定義する

実施内容:

時間見積もり: 1-2週間(ステークホルダーとの議論含む)

よくある失敗:

具体例:

ビジネス課題: 顧客離反を減らしたい

ML問題定式化:

Step 1:データ収集

目的: 学習に必要なデータを集める

データソース:

必要データ量の目安:

時間見積もり: 1-4週間

注意点:

Step 2:探索的データ分析(EDA: Exploratory Data Analysis)

目的: データの特性を理解し、問題点を発見する

実施内容:

時間見積もり: 数日-1週間

ツール: pandas、matplotlib、seaborn、pandas-profiling

Step 3:前処理・データクリーニング

目的: データをMLモデルが扱える形式に変換する

実施内容:

1. 欠損値処理

2. 外れ値処理

3. スケーリング(正規化・標準化)

4. カテゴリ変数のエンコーディング

時間見積もり: 数日-1週間

注意点:

Step 4:特徴量エンジニアリング

目的: モデルの予測精度を向上させる特徴量を作成する

手法:

時間見積もり: 数日-2週間

具体例:

住宅価格予測で、「広さ」と「築年数」から新しい特徴量を作成:

Step 5:モデル選択と訓練

目的: 適切なアルゴリズムを選び、学習させる

戦略:

  1. ベースラインモデル:最もシンプルなモデル(線形回帰、ロジスティック回帰)
  2. 複数モデルの比較:決定木、ランダムフォレスト、XGBoost、SVM
  3. 最良モデルの選択:交差検証で性能評価

時間見積もり: 数時間-数日

ツール: scikit-learn、XGBoost、LightGBM

Step 6:評価とハイパーパラメータチューニング

目的: モデルの性能を最大化する

評価手法:

チューニング手法:

時間見積もり: 数日-1週間

Step 7:モデル解釈と検証

目的: モデルが正しく動作しているか確認する

実施内容:

時間見積もり: 数日-1週間

ワークフロー全体の時間見積もり

gantt title 機械学習プロジェクトのタイムライン dateFormat YYYY-MM-DD section 準備 問題定式化 :a1, 2024-01-01, 14d section データ データ収集 :a2, 2024-01-15, 21d EDA :a3, 2024-02-05, 7d 前処理 :a4, 2024-02-12, 7d section モデル 特徴量エンジニアリング :a5, 2024-02-19, 14d モデル訓練 :a6, 2024-03-04, 3d 評価・チューニング :a7, 2024-03-07, 7d 検証 :a8, 2024-03-14, 7d

プロジェクト全体: 2-3ヶ月(小〜中規模)、6-12ヶ月(大規模)

2.6 特徴量の深掘り

特徴量(Feature)は、機械学習モデルへの入力となるデータの属性です。適切な特徴量を設計することで、モデルの精度が劇的に向上します。

2.6.1 特徴量の種類

1. 数値特徴量(Numerical Features)

連続値: 無限に細かく分割できる数値

離散値: 整数値

2. カテゴリ特徴量(Categorical Features)

名義(Nominal): 順序関係がない

順序(Ordinal): 順序関係がある

3. テキスト特徴量(Text Features)

変換手法:

4. 時系列特徴量(Time Series Features)

派生特徴量:

5. 画像特徴量(Image Features)

変換手法:

2.6.2 カテゴリ変数の数値化(コード例)

"""
カテゴリ変数を数値に変換する2つの手法

目的: 機械学習モデルはカテゴリを直接扱えないため、数値化が必要
対象: 初学者
実行時間: 約3秒
"""

import pandas as pd
from sklearn.preprocessing import LabelEncoder

# 1. サンプルデータの準備
df = pd.DataFrame({
    'color': ['red', 'blue', 'green', 'red', 'blue'],
    'size': ['S', 'M', 'L', 'M', 'S'],
    'price': [100, 150, 200, 120, 90]
})

print("元のデータ:")
print(df)
print("\n" + "="*50 + "\n")

# 2. Label Encoding(ラベルエンコーディング)
# 各カテゴリを整数に変換(赤→0, 青→1, 緑→2)
le = LabelEncoder()
df['color_label'] = le.fit_transform(df['color'])

print("Label Encoding後:")
print(df[['color', 'color_label']])
print("\n注意: 数値に順序関係が生まれる(blue=1 > red=0)が、実際には順序はない")
print("\n" + "="*50 + "\n")

# 3. One-Hot Encoding(ワンホットエンコーディング)
# 各カテゴリを独立したバイナリ列に変換
df_onehot = pd.get_dummies(df, columns=['size'], prefix='size')

print("One-Hot Encoding後:")
print(df_onehot)
print("\nsize_S, size_M, size_Lの3列が作成され、該当する列だけ1、他は0")

# 期待される出力:
# 元のデータ:
#   color size  price
# 0   red    S    100
# 1  blue    M    150
# 2 green    L    200
# 3   red    M    120
# 4  blue    S     90
#
# Label Encoding後:
#   color  color_label
# 0   red            2
# 1  blue            0
# 2 green            1
# 3   red            2
# 4  blue            0
#
# One-Hot Encoding後:
#   color  price  color_label  size_L  size_M  size_S
# 0   red    100            2       0       0       1
# 1  blue    150            0       0       1       0
# 2 green    200            1       1       0       0
# 3   red    120            2       0       1       0
# 4  blue     90            0       0       0       1

2.6.3 数値特徴量のスケーリング(コード例)

"""
数値特徴量のスケーリング(標準化・正規化)

目的: 異なるスケールの特徴量を統一し、モデル学習を安定化
対象: 初学者
実行時間: 約3秒
"""

import numpy as np
from sklearn.preprocessing import StandardScaler, MinMaxScaler

# 1. サンプルデータ(住宅データ)
data = np.array([
    [50, 10, 500],   # 広さ(m²), 築年数, 駅距離(m)
    [60, 15, 300],
    [70, 5, 800],
    [80, 20, 200],
    [90, 8, 600]
])

print("元のデータ:")
print("  広さ(m²)  築年数  駅距離(m)")
print(data)
print("\n注意: スケールが全く異なる(広さ:50-90, 築年数:5-20, 距離:200-800)")
print("\n" + "="*50 + "\n")

# 2. 標準化(Standardization)
# 平均0、標準偏差1に変換
scaler_std = StandardScaler()
data_std = scaler_std.fit_transform(data)

print("標準化後(平均0、標準偏差1):")
print(data_std)
print("\n各列の平均:", data_std.mean(axis=0))
print("各列の標準偏差:", data_std.std(axis=0))
print("\n" + "="*50 + "\n")

# 3. 正規化(Normalization)
# 0-1の範囲に変換
scaler_norm = MinMaxScaler()
data_norm = scaler_norm.fit_transform(data)

print("正規化後(0-1の範囲):")
print(data_norm)
print("\n各列の最小値:", data_norm.min(axis=0))
print("各列の最大値:", data_norm.max(axis=0))

# 期待される出力:
# 元のデータ:
#   広さ(m²)  築年数  駅距離(m)
# [[ 50  10 500]
#  [ 60  15 300]
#  [ 70   5 800]
#  [ 80  20 200]
#  [ 90   8 600]]
#
# 標準化後(平均0、標準偏差1):
# [[-1.41 -0.39  0.00]
#  [-0.71  0.78 -1.00]
#  [ 0.00 -1.17  1.50]
#  [ 0.71  1.56 -1.50]
#  [ 1.41 -0.78  0.50]]
#
# 正規化後(0-1の範囲):
# [[0.00 0.33 0.50]
#  [0.25 0.67 0.17]
#  [0.50 0.00 1.00]
#  [0.75 1.00 0.00]
#  [1.00 0.20 0.67]]

2.6.4 特徴量の選択と重要度(コード例)

"""
特徴量の選択と重要度の評価

目的: どの特徴量が予測に重要かを判断し、不要な特徴量を削除
対象: 初〜中級者
実行時間: 約5秒
"""

import pandas as pd
from sklearn.datasets import load_diabetes
from sklearn.ensemble import RandomForestRegressor
import matplotlib.pyplot as plt

# 1. サンプルデータの読み込み(糖尿病データセット)
diabetes = load_diabetes()
X = pd.DataFrame(diabetes.data, columns=diabetes.feature_names)
y = diabetes.target

print("データセット情報:")
print(f"サンプル数: {X.shape[0]}, 特徴量数: {X.shape[1]}")
print(f"特徴量: {list(X.columns)}")
print("\n" + "="*50 + "\n")

# 2. ランダムフォレストで特徴量重要度を計算
model = RandomForestRegressor(n_estimators=100, random_state=42)
model.fit(X, y)

# 3. 特徴量重要度の取得
importances = pd.DataFrame({
    'feature': X.columns,
    'importance': model.feature_importances_
}).sort_values('importance', ascending=False)

print("特徴量重要度ランキング:")
print(importances)
print("\n" + "="*50 + "\n")

# 4. 相関係数の計算
correlations = X.corrwith(pd.Series(y)).abs().sort_values(ascending=False)

print("目的変数との相関係数(絶対値):")
print(correlations)

# 期待される出力:
# データセット情報:
# サンプル数: 442, 特徴量数: 10
# 特徴量: ['age', 'sex', 'bmi', 'bp', 's1', 's2', 's3', 's4', 's5', 's6']
#
# 特徴量重要度ランキング:
#    feature  importance
# 2      bmi    0.289345
# 8       s5    0.201928
# 4       s1    0.127654
# ...
#
# 目的変数との相関係数(絶対値):
# bmi    0.586450
# s5     0.565883
# bp     0.441484
# ...

2.6.5 特徴量エンジニアリングの実例(コード例)

"""
特徴量エンジニアリング: 新しい特徴量の作成

目的: 既存の特徴量から、より予測力の高い派生特徴量を作成
対象: 中級者
実行時間: 約3秒
"""

import pandas as pd
import numpy as np

# 1. サンプルデータ(住宅価格予測)
df = pd.DataFrame({
    '広さ': [50, 60, 70, 80, 90],
    '築年数': [10, 15, 5, 20, 8],
    '駅距離': [500, 300, 800, 200, 600],
    '部屋数': [2, 3, 3, 4, 2],
    '価格': [3000, 3500, 4200, 4500, 3800]  # 万円
})

print("元の特徴量:")
print(df)
print("\n" + "="*50 + "\n")

# 2. 派生特徴量の作成

# (1) 交互作用項: 広さと築年数の積
df['広さ×築年数'] = df['広さ'] * df['築年数']

# (2) 比率: 広さあたりの価格
df['価格per広さ'] = df['価格'] / df['広さ']

# (3) 多項式: 築年数の二乗(経年劣化は非線形)
df['築年数²'] = df['築年数'] ** 2

# (4) カテゴリ化: 駅距離を「近い/遠い」に変換
df['駅近フラグ'] = (df['駅距離'] < 400).astype(int)

# (5) ドメイン知識: 部屋数あたりの広さ
df['広さper部屋'] = df['広さ'] / df['部屋数']

# (6) 対数変換: 駅距離の対数(遠距離の影響を軽減)
df['log_駅距離'] = np.log1p(df['駅距離'])

print("特徴量エンジニアリング後:")
print(df)
print("\n" + "="*50 + "\n")

print("新しい特徴量の統計:")
print(df[['広さ×築年数', '価格per広さ', '駅近フラグ', '広さper部屋']].describe())

# 期待される出力:
# 元の特徴量:
#    広さ  築年数  駅距離  部屋数   価格
# 0   50     10    500      2  3000
# 1   60     15    300      3  3500
# 2   70      5    800      3  4200
# 3   80     20    200      4  4500
# 4   90      8    600      2  3800
#
# 特徴量エンジニアリング後:
#    広さ  築年数  駅距離  部屋数   価格  広さ×築年数  価格per広さ  築年数²  駅近フラグ  広さper部屋  log_駅距離
# 0   50     10    500      2  3000         500        60.0      100          0       25.0    6.215
# 1   60     15    300      3  3500         900        58.3      225          1       20.0    5.704
# 2   70      5    800      3  4200         350        60.0       25          0       23.3    6.685
# 3   80     20    200      4  4500        1600        56.2      400          1       20.0    5.298
# 4   90      8    600      2  3800         720        42.2       64          0       45.0    6.397

本章のまとめ

この章では、機械学習の基礎知識を体系的に学びました。以下の内容を習得しました:

習得した知識とスキル

次章への橋渡し

第2章では、機械学習の理論と概念を学びました。次の第3章では、実際にPythonコードを書いて、6つの機械学習モデルを実装します。環境構築から始まり、データ前処理、モデル訓練、評価まで、手を動かして体験します。

第3章で学ぶこと:

演習問題

問題1(難易度:easy)

教師あり学習と教師なし学習の違いを、具体例とともに説明してください。

ヒント

「正解ラベル」の有無に注目してください。教師あり学習では入力と正解のペアが必要ですが、教師なし学習では正解なしでパターンを発見します。

解答例

教師あり学習(Supervised Learning)

定義: ラベル付きデータ(入力と正解のペア)から学習する手法

具体例:

教師なし学習(Unsupervised Learning)

定義: ラベルなしデータから、隠れたパターンや構造を発見する手法

具体例:

主な違い

項目 教師あり学習 教師なし学習
データ ラベル付き ラベルなし
目的 予測・分類 パターン発見
評価 精度、F1スコアなど シルエット係数など

問題2(難易度:easy)

過学習とは何か、なぜ問題なのか説明してください。また、過学習を防ぐ方法を3つ挙げてください。

ヒント

訓練データとテストデータでの性能差に注目してください。訓練精度は高いのに、テスト精度が低い場合は過学習の可能性があります。

解答例

過学習(Overfitting)とは

定義: モデルが訓練データに過度に適合し、未知のデータへの予測性能が低下する現象

症状:

原因:

なぜ問題なのか:

過学習を防ぐ方法

  1. データ数を増やす:訓練データを増やすことで、モデルが一般的なパターンを学習
  2. 正則化(Regularization):L1正則化(Lasso)、L2正則化(Ridge)でパラメータに制約
  3. 交差検証(Cross-Validation):K-fold交差検証で汎化性能を正確に評価
  4. モデルを単純化:決定木の深さを制限、ニューラルネットワークの層数を減らす
  5. ドロップアウト:ニューラルネットワークで一部のノードをランダムに無効化
  6. Early Stopping:検証誤差が増加し始めたら学習を停止

問題3(難易度:medium)

あるECサイトで顧客の購買予測をしたい。以下の2つの問題設定について、それぞれ回帰問題か分類問題かを判断し、理由とともに答えてください。

ヒント

出力が連続値(数値)なら回帰、カテゴリ(Yes/No、高/中/低など)なら分類です。

解答例

(A) 顧客が次月に購入する金額を予測したい

答え:回帰問題(Regression)

理由:

適用モデル:

(B) 顧客が1ヶ月以内に購入するか否かを予測したい

答え:分類問題(Classification)

理由:

適用モデル:

ビジネス的観点

問題4(難易度:medium)

特徴量エンジニアリングで、カテゴリ変数「都道府県」をどのように数値化すべきか、2つの方法を説明してください。それぞれの長所・短所も述べてください。

ヒント

カテゴリ変数を数値化する代表的な手法は、Label EncodingとOne-Hot Encodingです。順序関係の有無に注目してください。

解答例

方法1:Label Encoding(ラベルエンコーディング)

手法: 各都道府県に一意の整数を割り当てる

東京 → 0
大阪 → 1
福岡 → 2
北海道 → 3
...

長所:

短所:

方法2:One-Hot Encoding(ワンホットエンコーディング)

手法: 各都道府県を独立したバイナリ列に変換

東京    → [1, 0, 0, 0, ...](東京列が1、他は0)
大阪    → [0, 1, 0, 0, ...](大阪列が1、他は0)
福岡    → [0, 0, 1, 0, ...](福岡列が1、他は0)
北海道  → [0, 0, 0, 1, ...](北海道列が1、他は0)

長所:

短所:

使い分けガイド

条件 推奨手法
カテゴリ数が少ない(<100) One-Hot Encoding
カテゴリ数が多い(>100) Label Encoding + 決定木系モデル
線形モデル使用 One-Hot Encoding必須
決定木系モデル使用 どちらでも可(Label Encodingが効率的)

都道府県の場合の推奨

推奨:One-Hot Encoding

参考文献

  1. Mitchell, T. M. (1997). Machine Learning. McGraw-Hill. ISBN: 0070428077
  2. Bishop, C. M. (2006). Pattern Recognition and Machine Learning. Springer. ISBN: 0387310738
  3. Goodfellow, I., Bengio, Y., & Courville, A. (2016). Deep Learning. MIT Press. https://www.deeplearningbook.org/
  4. scikit-learn Documentation. (2024). https://scikit-learn.org/stable/
  5. 加藤公一 (2018). 『仕事ではじめる機械学習』オライリー・ジャパン. ISBN: 4873118255
  6. Sebastian Raschka (2019). Python Machine Learning (3rd ed.). Packt Publishing. ISBN: 1789955750
  7. Aurélien Géron (2019). Hands-On Machine Learning with Scikit-Learn, Keras, and TensorFlow (2nd ed.). O'Reilly Media. ISBN: 1492032646

免責事項