AI: 機械学習入門

最終更新:2026-08-26

機械学習(ML)は AI の最も基礎的なサブフィールドです―事実上すべての現代 AI アプリケーション(レコメンド、音声認識、自動運転)は ML の上に築かれています。この章では、ML の本質、3 大パラダイム、扱うタスクの種類を理解し、sklearn で初めての完全な ML 分類器を実装する手順を案内します。

1. 学習目標



2. 物語:書ききれないほどルールがある時

(1) 悩み:ルールを書けば書くほど精度が下がる

Bob の E コマース会社は、ユーザーが特定の商品を購入するかを予測する必要があります。彼はルールを書き始めました:

TEXT 📖 参照専用
IF age > 30 AND browse_count > 3 THEN buy = yes
IF age < 25 AND cart_count > 0 THEN buy = maybe
IF region = "east" AND discount > 20% THEN buy = yes
... (さらに 300 のルールの後) ...

ルールを 10 から 300 に増やしましたが、精度は 60% から 72% に上がった後、頭打ちになりました。新しい商品カテゴリが導入されるたびにルールを一から書き直さねばならず、とても終わりません。

(2) 機械学習による解決策

Alice は提案しました。「ルールを書くのはやめましょう―アルゴリズムに 10 万件の履歴から自分でパターンを見つけさせましょう。」

▶ サンプル:購買行動のルール駆動 vs データ駆動予測(難易度:⭐)

PYTHON
# ルールベースのアプローチ:あなたがロジックを書く
def will_buy_rules(user):
    """手書きのルールで購入を予測"""
    if user['age'] > 30 and user['browse_count'] > 3:
        return True
    if user['cart_count'] > 0 and user['discount_pct'] > 20:
        return True
    return False

# ML アプローチ:アルゴリズムがデータから学習
# from sklearn.neighbors import KNeighborsClassifier
# model = KNeighborsClassifier(n_neighbors=5)
# model.fit(X_train, y_train)  # 10万件のレコードからパターンを学習
# prediction = model.predict(new_user_data)

出力: (実際の出力は例を実行するか、上のコードコメントの期待出力の注釈を参照してください。)

(3) 成果:72% から 89% へ

Bob は機械学習でモデルを学習し、精度は 72% から 89% に跳ね上がりました。さらに、新しい商品カテゴリに対しては、データを追加してモデルを再学習するだけ―ルールを一行も書く必要がありません。



3. 機械学習とは何か?

(1) アーサー・サミュエルによる定義(1959)

「機械学習とは、明示的にプログラムされることなく、コンピュータに学習する能力を与える研究分野である。」

核心的な考え:コンピュータが従うルールをあなたが書くのではなく、データを与えてコンピュータ自身にルールを学習させることです。

(2) トム・ミッチェルによる定義(1997)

「あるクラスのタスク T について、性能指標 P で測ったとき、経験 E に伴って T での性能が向上するなら、そのプログラムは経験 E から学習しているという。」

一言で言えば:プログラムのタスク T での性能 P が、経験 E の増加と共に向上するとき、それは「学習している」と言えます。

Bob のシナリオを例にとると:

記号 意味 対応
T タスク ユーザーが購入するかを予測
E 経験 10 万件の購買履歴
P 性能 予測精度

(3) 伝統的ルール vs 機械学習

項目 伝統的ルール 機械学習
ルールの源 手動で書かれる アルゴリズムがデータから学習
拡張性 低い(ルールはシナリオと共に増大) 良い(新データで再学習可能)
変化への適応 ルールの手動調整が必要 データ分布の変化に自動適応
隠れたパターンの発見 困難(人間の思いつかないパターンは見つからない) 可能(アルゴリズムは非線形結合を発見)
解釈性 強い(ルールは一目で明確) 弱い(モデルは「ブラックボックス」だが解釈可能)
開発コスト ルールが単純なら低い;複雑なら極めて高い 初期にデータと計算資源が必要;後は低コスト
比較 子どもに一歩ずつ教える 子どもに 1000 問見せて自分で考えさせる


4. 3 大パラダイム:教師あり / 教師なし / 強化学習

機械学習は「学習方法」により 3 大パラダイムに分かれます:

100%
graph TB
    ML[機械学習] --> SL[教師あり学習]
    ML --> UL[教師なし学習]
    ML --> RL[強化学習]

    SL --> SL1[分類]
    SL --> SL2[回帰]

    UL --> UL1[クラスタリング]
    UL --> UL2[次元削減]

    RL --> RL1[ゲーム AI]
    RL --> RL2[ロボット制御]

    style ML fill:#e8f5e9
    style SL fill:#e1f5fe
    style UL fill:#fff3e0
    style RL fill:#f3e5f5

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

核心特性:学習データにラベル(正解)がある。

教師が生徒に練習問題を指導するようなもの―各問題に正解があり、生徒は「問題を解く → 答えを確認 → 間違いを修正」のプロセスで学びます。

要素 説明
入力 特徴 X + ラベル y
学習プロセス X から Y への写像関数を見つける
出力 新しい X に対し y を予測できるモデル
典型タスク 分類(離散ラベル)、回帰(連続ラベル)
物件の広さと立地から住宅価格を予測(回帰);メールの内容から迷惑メールかを判定(分類)

▶ サンプル:sklearn で Iris データセットを読み込み分類する(難易度:⭐)

PYTHON
# Iris データセットを読み込み構造を確認
from sklearn.datasets import load_iris

iris = load_iris()
print(f"特徴名: {iris.feature_names}")
print(f"ターゲット名:  {list(iris.target_names)}")
print(f"サンプル数:       {iris.data.shape[0]}")
print(f"特徴数:      {iris.data.shape[1]}")
print(f"\n最初の 5 サンプル:")
for i in range(5):
    print(f"  {iris.data[i]} → {iris.target_names[iris.target[i]]}")
💻 出力:

TEXT 📖 参照専用
特徴名: ['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)']
ターゲット名:  ['setosa', 'versicolor', 'virginica']
サンプル数:       150
特徴数:      4

最初の 5 サンプル:
  [5.1 3.5 1.4 0.2] → setosa
  [4.9 3.0 1.4 0.2] → setosa
  [4.7 3.2 1.3 0.2] → setosa
  [4.6 3.1 1.5 0.2] → setosa
  [5.0 3.6 1.4 0.2] → setosa

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

核心特性:学習データにラベルがない。

子どもに写真の山を渡し、「これは猫」「あれは犬」と教えずに、見た目で自分で仕分けさせるようなものです。

要素 説明
入力 特徴 X のみ、ラベル y なし
学習プロセス データの内在構造とパターンを発見
出力 データのグループ化、構造、圧縮表現
典型タスク クラスタリング、次元削減、異常検知
顧客セグメンテーション(セグメント数は未知;アルゴリズムが自動特定)、商品レコメンド(購買パターンの発見)

(3) 強化学習(Reinforcement Learning)

核心特性:試行錯誤と報酬信号による学習。

子犬のしつけと同じ―正しいことをしたらおやつ(報酬)、間違えたら無視(罰)。子犬は徐々に、どの行動が報酬を得るかを学習します。

要素 説明
入力 環境の状態 + 行動空間
学習プロセス 試行錯誤 → 報酬/罰を受取 → 戦略を調整
出力 環境で累積報酬を最大化する戦略
典型タスク ゲーム AI、ロボット制御、自動運転の意思決定
囲碁を打つ AlphaGo、ChatGPT の人間フィードバック強化学習(RLHF)

(4) 3 パラダイムの比較

項目 教師あり学習 教師なし学習 強化学習
データ ラベルあり(X + y) ラベルなし(X のみ) 状態 + 報酬信号
目的 ラベルを予測 構造を発見 報酬を最大化
フィードバック 即時(正誤を教える) なし(正誤の概念がない) 遅延(多くのステップを経ないと良し悪し不明)
典型アルゴリズム KNN、SVM、決定木 K-Means、PCA、DBSCAN Q-Learning、PPO、SAC
典型応用 迷惑メール検出、住宅価格予測 顧客セグメンテーション、次元削減 ゲーム AI、ロボティクス、自動運転
データ要件 アノテーションコスト高 データは入手容易 シミュレーション環境が必要
比喩 教師が問題を指導 独りで本を読みパターンを特定 子犬に芸をさせてしつける


5. タスク種別:分類 / 回帰 / クラスタリング

(1) 分類(Classification)

離散的なカテゴリラベルを予測します。例:メールは迷惑か否か?画像は猫か犬か?

説明
二値分類 カテゴリは 2 つだけ 迷惑/正常、詐欺/正当
多クラス分類 3 つ以上のカテゴリ 3 種のアイリス、手書き数字 0〜9

(2) 回帰(Regression)

連続値を予測します。例:住宅の価格は?明日の気温は?

(3) クラスタリング(Clustering)

事前定義されたカテゴリなしに、類似性でデータを自動グループ化します。例:顧客が自動的に 3 グループに分かれる。

(4) 分類・回帰・クラスタリングの比較

項目 分類 回帰 クラスタリング
出力型 離散カテゴリ 連続値 グループラベル
ラベル必要? はい(教師あり学習) はい(教師あり学習) いいえ(教師なし学習)
目的 サンプルがどのクラスかを予測 具体的な値を予測 データ内の自然なグループを特定
評価指標 精度 / F1 MAE / RMSE / R² シルエット / イナーシャ
ユーザーが購入したかを判定 ユーザーの支出額を予測 ユーザーを自動で数グループにセグメント
比喩 果物がリンゴかオレンジかを判定 果物の重さを推定 見た目で混合果物を数山に仕分け


6. ML ワークフロー概観

完全な ML プロジェクトは 6 ステップからなり、いずれも省略できません:

100%
graph TB
    A[1. 問題定義] --> B[2. データ収集]
    B --> C[3. 特徴エンジニアリング]
    C --> D[4. モデル学習]
    D --> E[5. 評価]
    E --> F{十分か?}
    F -->|No| C
    F -->|Yes| G[6. 展開]
    G --> H[監視 & 再学習]

    style A fill:#e1f5fe
    style B fill:#e8f5e9
    style C fill:#fff3e0
    style D fill:#f3e5f5
    style E fill:#fce4ec
    style G fill:#e0f2f1
    style H fill:#f1f8e9

(1) 問題の定義

解くべき問題、タスクが分類か回帰か、成功の基準を明確に定義します。

良い問題定義 悪い問題定義
「ユーザーが 7 日以内に商品を購入するかを予測」 「AI に売上を伸ばさせる」
「不正なクレジットカード取引を検出(F1 ≥ 0.9)」 「異常な取引を検出」

(2) データ収集

データは機械学習の礎です。データ品質はモデル性能の上限を直接決定します。

データの観点 良いデータ 悪いデータ
十分(少なくとも数千件) 少なすぎ(数十件)
正確なラベル、完全な特徴 不正ラベル、多数の欠損値
多様性 多様なシナリオをカバー 単一シナリオのみ

(3) 特徴エンジニアリング

生データをモデルが理解できる数値特徴に変換します:

TEXT 📖 参照専用
生データ → 特徴エンジニアリング → 特徴
"北京在住の 25 歳男性" → [25, 1, 39]  (年齢, 性別コード, 都市コード)

(4) モデル学習

アルゴリズムを選択し、ハイパーパラメータを設定し、学習データにモデルを fit します。

(5) モデル評価

モデルが見たことのないテストセットで性能を評価し、汎化能力を確認します。

(6) 展開と公開

モデルを API として展開、またはアプリケーションに組み込み、性能を継続監視し、定期的に再学習します。



7. sklearn API の統一パラダイム

scikit-learn(sklearn)は Python で最も人気の ML ライブラリで、API 設計が極めて一貫しています―全モデルが同じインターフェースに従います:

TEXT 📖 参照専用
model = SomeClassifier(params)    # 1. モデル作成
model.fit(X_train, y_train)      # 2. モデル学習
model.predict(X_new)             # 3. 予測
model.score(X_test, y_test)      # 4. 評価

▶ サンプル:KNN 分類器で学習と予測(難易度:⭐⭐)

PYTHON
# KNN 分類器:学習と予測
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier

# データ読み込みと分割
X, y = load_iris(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.3, random_state=42, stratify=y
)

# モデル作成と学習
knn = KNeighborsClassifier(n_neighbors=5)
knn.fit(X_train, y_train)

# 予測
y_pred = knn.predict(X_test)

# 評価
train_acc = knn.score(X_train, y_train)
test_acc = knn.score(X_test, y_test)
print(f"学習精度: {train_acc:.3f}")
print(f"テスト精度:  {test_acc:.3f}")

# 新しいサンプルを予測
import numpy as np
new_sample = np.array([[5.0, 3.4, 1.5, 0.2]])
pred = knn.predict(new_sample)
print(f"新しいサンプルの予測クラス: {load_iris().target_names[pred[0]]}")
💻 出力:

TEXT 📖 参照専用
学習精度: 0.971
テスト精度:  0.978
新しいサンプルの予測クラス: setosa

(1) よく使う sklearn 分類器クイックリファレンス

分類器 クラス名 主要パラメータ 特徴
KNN KNeighborsClassifier n_neighbors 単純直感的、小データセットに適する
決定木 DecisionTreeClassifier max_depth 解釈性高い、過学習しやすい
ランダムフォレスト RandomForestClassifier n_estimators アンサンブル手法、堅牢
SVM SVC C, kernel 小データで高精度
ロジスティック回帰 LogisticRegression C 線形ベースライン、確率出力
ナイーブベイズ GaussianNB テキスト分類によく使われる;極めて高速
💡 ヒント: 全 sklearn 分類器は fit() / predict() / score() の三つ組をサポート―アルゴリズムを切り替えるには、1 行のクラス名を変えるだけです。



8. 総合例:KNN で Iris データセットの完全な ML ワークフロー

以下は、データ読み込みから可視化のための決定境界まで、ML ワークフロー全体を順に辿る完全な例です:

▶ サンプル:異なる k 値の精度比較(難易度:⭐⭐)

PYTHON
# 異なる k 値の KNN を比較
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier

X, y = load_iris(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.3, random_state=42, stratify=y
)

print("=== KNN: k 値の影響 ===")
for k in [1, 3, 5, 7, 9, 15, 30]:
    knn = KNeighborsClassifier(n_neighbors=k)
    knn.fit(X_train, y_train)
    train_acc = knn.score(X_train, y_train)
    test_acc = knn.score(X_test, y_test)
    print(f"k={k:2d} | 学習: {train_acc:.3f} | テスト: {test_acc:.3f}")
💻 出力:

TEXT 📖 参照専用
=== KNN: k 値の影響 ===
k= 1 | 学習: 1.000 | テスト: 0.956
k= 3 | 学習: 0.971 | テスト: 0.978
k= 5 | 学習: 0.971 | テスト: 0.978
k= 7 | 学習: 0.971 | テスト: 0.978
k= 9 | 学習: 0.971 | テスト: 0.978
k=15 | 学習: 0.971 | テスト: 0.978
k=30 | 学習: 0.952 | テスト: 0.956
💡 ヒント: k=1 の時、モデルは学習セットで 100% の精度(過学習のリスク);k が大きすぎると精度低下(未学習)。k=3〜7 が良い選択―これが「バイアス-バリアンス・トレードオフ」の実例です。

▶ サンプル:分類レポートの解釈(難易度:⭐⭐)

PYTHON
# 詳細な分類レポート
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import classification_report

X, y = load_iris(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.3, random_state=42, stratify=y
)

knn = KNeighborsClassifier(n_neighbors=5)
knn.fit(X_train, y_train)
y_pred = knn.predict(X_test)

print("=== 分類レポート ===")
print(classification_report(y_test, y_pred, target_names=load_iris().target_names))
💻 出力:

TEXT 📖 参照専用
=== 分類レポート ===
              precision    recall  f1-score   support

      setosa       1.00      1.00      1.00        15
  versicolor       1.00      0.93      0.97        15
   virginica       0.94      1.00      0.97        15

    accuracy                           0.98        45
   macro avg       0.98      0.98      0.98        45
weighted avg       0.98      0.98      0.98        45

分類レポートの解釈:

指標 意味 解釈
precision このクラスに予測されたサンプルのうち、実際にそのクラスである割合 versicolor 適合率 1.00 = versicolor と予測された全てが正解
recall そのクラスの真のサンプルのうち、正しく予測された割合 versicolor 再現率 0.93 = 1 件の versicolor が誤分類
f1-score 適合率と再現率の調和平均 複合指標;1 に近いほど良い
support このクラスの真のサンプル数 各クラス 15 件のテストサンプル

▶ サンプル:決定境界の可視化(難易度:⭐⭐⭐)

PYTHON
# Iris で KNN の決定境界を可視化(2 特徴)
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
from sklearn.neighbors import KNeighborsClassifier

iris = load_iris()
X = iris.data[:, :2]  # 2D プロットのため最初の 2 特徴のみ
y = iris.target

knn = KNeighborsClassifier(n_neighbors=5)
knn.fit(X, y)

# 決定境界用のメッシュグリッド作成
h = 0.02
x_min, x_max = X[:, 0].min() - 0.5, X[:, 0].max() + 0.5
y_min, y_max = X[:, 1].min() - 0.5, X[:, 1].max() + 0.5
xx, yy = np.meshgrid(np.arange(x_min, x_max, h),
                     np.arange(y_min, y_max, h))
Z = knn.predict(np.c_[xx.ravel(), yy.ravel()]).reshape(xx.shape)

# プロット
plt.figure(figsize=(8, 6))
plt.contourf(xx, yy, Z, alpha=0.3, cmap=plt.cm.Set1)
scatter = plt.scatter(X[:, 0], X[:, 1], c=y, cmap=plt.cm.Set1, edgecolors='black')
plt.xlabel('がく片の長さ (cm)')
plt.ylabel('がく片の幅 (cm)')
plt.title('Iris 上の KNN (k=5) の決定境界')
plt.legend(handles=scatter.legend_elements()[0], labels=list(iris.target_names))
plt.savefig('knn_decision_boundary.png', dpi=150, bbox_inches='tight')
plt.show()
print("決定境界のプロットを保存しました。")

出力: (実際の出力は例を実行するか、上のコードコメントの期待出力の注釈を参照してください。)

💡 ヒント: 上の図は、KNN が特徴空間を 3 つの領域に分割する様子を示します―各々が異なるクラスに対応。境界が滑らかなほどモデルは「保守的」(k が大きい);境界がギザギザなほどモデルは「敏感」(k が小さい)。

▶ サンプル:総合例―Iris データセットで KNN による完全な ML ワークフロー(難易度:⭐⭐⭐)

PYTHON
# ============================================
# 完全な ML ワークフロー: Iris データセットの KNN
# ステップ 1-6: 評価付きの全パイプライン
# ============================================

import numpy as np
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import (accuracy_score, classification_report,
                             confusion_matrix)

# ステップ 1: データ読み込み
iris = load_iris()
X, y = iris.data, iris.target
print(f"ステップ1 - データ読み込み: {X.shape[0]} 件, {X.shape[1]} 特徴")
print(f"  クラス: {list(iris.target_names)}")
print(f"  クラス分布: {np.bincount(y)}")

# ステップ 2: データ分割(学習 70%、テスト 30%)
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.3, random_state=42, stratify=y
)
print(f"\nステップ2 - データ分割: Train={len(X_train)}, Test={len(X_test)}")

# ステップ 3: 特徴スケーリング(KNN で重要!)
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)
print(f"\nステップ3 - 特徴スケーリング完了 (平均≈0, 標準偏差≈1)")
print(f"  スケーリング前 - 平均: {X_train.mean(axis=0).round(2)}")
print(f"  スケーリング後 - 平均: {X_train_scaled.mean(axis=0).round(2)}")

# ステップ 4: モデル学習
knn = KNeighborsClassifier(n_neighbors=5)
knn.fit(X_train_scaled, y_train)
print(f"\nステップ4 - モデル学習完了: KNN (k=5)")

# ステップ 5: 評価
y_pred = knn.predict(X_test_scaled)
test_acc = accuracy_score(y_test, y_pred)
print(f"\nステップ5 - 評価:")
print(f"  テスト精度: {test_acc:.3f}")
print(f"\n{classification_report(y_test, y_pred, target_names=iris.target_names)}")
print("混同行列:")
print(confusion_matrix(y_test, y_pred))

# ステップ 6: 新しいサンプルを予測
new_data = np.array([
    [5.1, 3.5, 1.4, 0.2],   # おそらく setosa
    [6.7, 3.0, 5.2, 2.3],   # おそらく virginica
    [5.9, 3.0, 4.2, 1.5],   # おそらく versicolor
])
new_data_scaled = scaler.transform(new_data)
predictions = knn.predict(new_data_scaled)
print("\nステップ6 - 新しい予測:")
for i, pred in enumerate(predictions):
    print(f"  サンプル {i+1} → {iris.target_names[pred]}")
💻 出力:

TEXT 📖 参照専用
ステップ1 - データ読み込み: 150 件, 4 特徴
  クラス: ['setosa', 'versicolor', 'virginica']
  クラス分布: [50 50 50]

ステップ2 - データ分割: Train=105, Test=45

ステップ3 - 特徴スケーリング完了 (平均≈0, 標準偏差≈1)
  スケーリング前 - 平均: [5.86 3.06 3.78 1.2 ]
  スケーリング後 - 平均: [ 0. -0.  0. -0.]

ステップ4 - モデル学習完了: KNN (k=5)

ステップ5 - 評価:
  テスト精度: 1.000

              precision    recall  f1-score   support

      setosa       1.00      1.00      1.00        15
  versicolor       1.00      1.00      1.00        15
   virginica       1.00      1.00      1.00        15

    accuracy                           1.00        45
   macro avg       1.00      1.00      1.00        45
weighted avg       1.00      1.00      1.00        45

混同行列:
[[15  0  0]
 [ 0 15  0]
 [ 0  0 15]]

ステップ6 - 新しい予測:
  サンプル 1 → setosa
  サンプル 2 → virginica
  サンプル 3 → versicolor
💡 ヒント: 特徴スケーリングは KNN で非常に重要―KNN は距離尺度(ユークリッド距離など)を使い、ある特徴が他より桁違いに大きいと距離計算を「支配」します。StandardScaler は全特徴の平均を 0、標準偏差を 1 にスケーリングし、各特徴が等しく寄与するようにします。


❓ よくある質問

Q 機械学習と深層学習の違いは? A: 深層学習は機械学習のサブセットです。ML は「データから学習する」全手法(KNN、SVM、決定木など)を含み、DL は特に多層ニューラルネットワークを用いる手法を指します。DL は画像・音声・自然言語などの非構造化データで優れますが、より多くのデータと計算資源を要します;伝統的 ML は構造化データで非常に実用的です。関係:AI ⊃ ML ⊃ DL。
A 教師あり学習は常にラベルが必要ですか? A:
Q クラスタリングと分類の違いは? A: 分類は教師あり学習―カテゴリは事前定義(猫/犬)され、学習データにラベルがあります。クラスタリングは教師なし学習―カテゴリはアルゴリズムが自動発見し、学習データにラベルがありません。分類は「これはどのカテゴリか?」に答え、クラスタリングは「データをどうグループ化できるか?」に答えます。
A sklearn とは? A:
Q 機械学習モデルの学習にどれくらい時間がかかりますか? A: 3 つの要因によります:データ量、モデルの複雑さ、ハードウェア。Iris データセット(150 件)で KNN を学習するには 1 秒未満;100 万件でランダムフォレストを学習すると数分から数時間;GPT 級の大規模モデル学習には数千 GPU と数週間が必要です。初心者プロジェクトなら、通常数秒から数分です。
A KNN の k 値はどう選びますか? A:

📖 まとめ

  • 機械学習の本質は「アルゴリズムにデータからルールを学習させ、人間が書かせないこと」―ルール駆動からデータ駆動への転換
  • 3 大パラダイム:教師あり学習(ラベル付きデータ、予測)、教師なし学習(ラベルなしデータ、パターン発見)、強化学習(試行錯誤+報酬)
  • タスク種別:分類(離散ラベル)、回帰(連続値)、クラスタリング(自動グループ化)―選択は問題とデータによる
  • ML ワークフローの 6 ステップ―問題定義 → データ収集 → 特徴エンジニアリング → 学習 → 評価 → 展開―は反復的プロセス
  • 統一された sklearn API パラダイム:fit() 学習 → predict() 予測 → score() 評価;アルゴリズム変更時はクラス名のみ変更
  • KNN は最も直感的な分類器:新しいサンプルのクラス = その k 最近傍の多数クラス

📝 練習問題

  1. 基本問題(難易度 ⭐): sklearn で Wine データセット(load_wine())に KNeighborsClassifier(k=5)を学習し、学習・テスト精度を出力しなさい。Wine データセットは 13 特徴、3 クラスです。
  2. 応用問題(難易度 ⭐⭐): Wine データセットで KNN と決定木(DecisionTreeClassifier)の精度を比較しなさい。異なる k(1, 3, 5, 7, 9)と異なる木の深さ(2, 3, 5, None)を試し、各アルゴリズムの最適パラメータを見つけなさい。
  3. 挑戦問題(難易度:⭐⭐⭐): 異なる k 値の精度曲線を描きなさい―x 軸に k(1〜30)、y 軸にテスト精度を取り、ピークに印を付けなさい。ヒント:matplotlib.pyplot.plot() を使い、曲線の傾向を観察し、k が大きすぎても小さすぎても望ましくない理由を説明しなさい。
Web-Tutorial.com

Web-Tutorial 技術チーム

複数の開発者によって共同維持されているプログラミングチュートリアルプラットフォーム。各チュートリアルは専門分野の開発者が執筆・レビューしています。正確で信頼性の高いコンテンツを目指しています — 問題を見つけた場合はお知らせください。

100%