scikit-learn

scikit-learn

熱門

使用 scikit-learn 在 Python 中進行機器學習。適用於監督式學習(分類、迴歸)、非監督式學習(分群、降維)、模型評估、超參數調整、前處理或建構 ML 管線。提供演算法、前處理技術、管線及最佳實務的完整參考文件。

3.8萬星標
3574分支
更新於 2026/8/29
SKILL.md
唯讀
名稱
scikit-learn
描述

使用 scikit-learn 在 Python 中進行機器學習。適用於監督式學習(分類、迴歸)、非監督式學習(分群、降維)、模型評估、超參數調整、前處理或建構 ML 管線。提供演算法、前處理技術、管線及最佳實務的完整參考文件。

Scikit-learn

概覽

此技能提供使用 scikit-learn 進行機器學習任務的全面指引,scikit-learn 是業界標準的 Python 古典機器學習函式庫。此技能適用於分類、迴歸、分群、降維、前處理、模型評估,以及建構可上線的 ML 管線。

安裝

已針對 scikit-learn 1.8.0(穩定版;2025 年 12 月)進行測試。需要 Python 3.11–3.14(1.8+ 提供 free-threaded CPython 3.14 wheels)。

請安裝 PyPI 套件 scikit-learn(而非 PyPI 上已棄用的 sklearn 套件)。在程式碼中匯入為 sklearn

# 使用 uv 安裝 scikit-learn
uv pip install "scikit-learn>=1.7"

# 選用:繪圖工具與內建範例腳本相依套件
uv pip install "scikit-learn[plots]" matplotlib seaborn

# 常搭配使用
uv pip install pandas numpy

檢查版本:

import sklearn
print(sklearn.__version__)

何時使用此技能

在以下情況使用 scikit-learn 技能:

  • 建構分類或迴歸模型
  • 執行分群或降維
  • 為機器學習前處理與轉換資料
  • 使用交叉驗證評估模型效能
  • 使用網格或隨機搜尋調整超參數
  • 為生產工作流程建立 ML 管線
  • 比較不同演算法以解決任務
  • 處理結構化(表格)與文字資料
  • 需要可解釋的古典機器學習方法

快速開始

分類範例

from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import classification_report

# 分割資料
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, stratify=y, random_state=42
)

# 前處理
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)

# 訓練模型
model = RandomForestClassifier(n_estimators=100, random_state=42)
model.fit(X_train_scaled, y_train)

# 評估
y_pred = model.predict(X_test_scaled)
print(classification_report(y_test, y_pred))

混合資料的完整管線

from sklearn.pipeline import Pipeline
from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import StandardScaler, OneHotEncoder
from sklearn.impute import SimpleImputer
from sklearn.ensemble import GradientBoostingClassifier

# 定義特徵類型
numeric_features = ['age', 'income']
categorical_features = ['gender', 'occupation']

# 建立前處理管線
numeric_transformer = Pipeline([
    ('imputer', SimpleImputer(strategy='median')),
    ('scaler', StandardScaler())
])

categorical_transformer = Pipeline([
    ('imputer', SimpleImputer(strategy='most_frequent')),
    ('onehot', OneHotEncoder(handle_unknown='ignore'))
])

# 組合轉換器
preprocessor = ColumnTransformer([
    ('num', numeric_transformer, numeric_features),
    ('cat', categorical_transformer, categorical_features)
])

# 完整管線
model = Pipeline([
    ('preprocessor', preprocessor),
    ('classifier', GradientBoostingClassifier(random_state=42))
])

# 擬合與預測
model.fit(X_train, y_train)
y_pred = model.predict(X_test)

核心能力

五大能力領域記載於
references/core_capabilities.md,各主題詳細內容見
references/supervised_learning.md
references/unsupervised_learning.md
references/model_evaluation.md
references/preprocessing.md
references/pipelines_and_composition.md

  1. 監督式學習 — 分類與迴歸估計器家族。
  2. 非監督式學習 — 分群、分解與流形學習。
  3. 模型評估與選擇 — 指標、交叉驗證與超參數搜尋。
  4. 資料前處理 — 縮放、編碼、填補與特徵選擇。
  5. 管線與組合PipelineColumnTransformer

務必在 Pipeline 內進行前處理,以便在每個交叉驗證折中重新擬合;
在分割前縮放或填補會將測試資訊洩漏至訓練資料。

兩個完整工作流程見
references/common_workflows.md

範例腳本

分類管線

執行包含前處理、模型比較、超參數調整與評估的完整分類工作流程:

uv run python scripts/classification_pipeline.py

此腳本示範:

  • 處理混合資料類型(數值與類別)
  • 使用交叉驗證進行模型比較
  • 使用 GridSearchCV 進行超參數調整
  • 使用多種指標進行全面評估
  • 特徵重要性分析

分群分析

執行包含演算法比較與視覺化的分群分析:

uv run python scripts/clustering_analysis.py

此腳本示範:

  • 尋找最佳分群數(肘部法、輪廓分析)
  • 比較多種分群演算法(K-Means、DBSCAN、Agglomerative、Gaussian Mixture)
  • 在沒有真實標籤的情況下評估分群品質
  • 使用 PCA 投影視覺化結果

參考文件

此技能包含全面的參考檔案,供深入探討特定主題:

快速參考

檔案: references/quick_reference.md

  • 常見匯入模式與安裝說明
  • 常見任務的快速工作流程範本
  • 演算法選擇速查表
  • 常見模式與陷阱
  • 效能最佳化技巧

監督式學習

檔案: references/supervised_learning.md

  • 線性模型(迴歸與分類)
  • 支援向量機
  • 決策樹與集成方法
  • K-最近鄰、樸素貝氏、神經網路
  • 演算法選擇指南

非監督式學習

檔案: references/unsupervised_learning.md

  • 所有分群演算法及其參數與使用案例
  • 降維技術
  • 離群值與新穎性偵測
  • 高斯混合模型
  • 方法選擇指南

模型評估

檔案: references/model_evaluation.md

  • 交叉驗證策略
  • 超參數調整方法
  • 分類、迴歸與分群指標
  • 學習曲線與驗證曲線
  • 模型選擇最佳實務

前處理

檔案: references/preprocessing.md

  • 特徵縮放與正規化
  • 類別變數編碼
  • 缺失值填補
  • 特徵工程技術
  • 自訂轉換器

管線與組合

檔案: references/pipelines_and_composition.md

  • Pipeline 建構與使用
  • 用於混合資料類型的 ColumnTransformer
  • 用於平行轉換的 FeatureUnion
  • 完整的端對端範例
  • 最佳實務

最佳實務

一律使用管線

管線可防止資料洩漏並確保一致性:

# 良好:在管線中進行前處理
pipeline = Pipeline([
    ('scaler', StandardScaler()),
    ('model', LogisticRegression())
])

# 不良:在管線外進行前處理(可能洩漏資訊)
X_scaled = StandardScaler().fit_transform(X)

僅在訓練資料上擬合

切勿在測試資料上擬合:

# 良好
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)  # 僅轉換

# 不良
scaler = StandardScaler()
X_all_scaled = scaler.fit_transform(np.vstack([X_train, X_test]))

分類時使用分層分割

保留類別分佈:

X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, stratify=y, random_state=42
)

設定隨機種子以確保可重現性

model = RandomForestClassifier(n_estimators=100, random_state=42)

選擇適當的指標

  • 平衡資料:Accuracy、F1-score
  • 不平衡資料:Precision、Recall、ROC AUC、Balanced Accuracy
  • 成本敏感:定義自訂評分器

必要時縮放特徵

需要特徵縮放的演算法:

  • SVM、KNN、神經網路
  • 帶正規化的 PCA、線性/邏輯迴歸
  • K-Means 分群

不需要縮放的演算法:

  • 樹系模型(決策樹、隨機森林、梯度提升)
  • 樸素貝氏

常見問題疑難排解

ConvergenceWarning

問題: 模型未收斂
解決方法: 增加 max_iter 或縮放特徵

model = LogisticRegression(max_iter=1000)

測試集效能不佳

問題: 過度擬合
解決方法: 使用正規化、交叉驗證或較簡單的模型

# 加入正規化
model = Ridge(alpha=1.0)

# 使用交叉驗證
scores = cross_val_score(model, X, y, cv=5)

大型資料集記憶體錯誤

解決方法: 使用專為大型資料設計的演算法

# 大型資料集使用 SGD
from sklearn.linear_model import SGDClassifier
model = SGDClassifier()

# 或使用 MiniBatchKMeans 進行分群
from sklearn.cluster import MiniBatchKMeans
model = MiniBatchKMeans(n_clusters=8, batch_size=100)

其他資源