Scikit-learn 机器学习入门实战

知识库
知识库文档
/tech-stacks/scikit-learn/tutorial/Scikit-learn 机器学习入门实战.md

文档

Scikit-learn 机器学习入门实战

背景

Scikit-learn 提供了「瑞士军刀」式的机器学习工具箱。无论你是做表格数据的分类、用户分群还是异常检测,掌握它能让你在几分钟内完成从数据处理到模型评估的完整流程。


第 1 章:理解 API 设计哲学

Scikit-learn 所有模型遵循统一接口:

模式 伪代码
分类/回归 model.fit(X_train, y_train)model.predict(X_test)
降维/聚类 model.fit(X)model.transform(X)
预处理 transformer.fit(X)transformer.transform(X)

第 2 章:Pipeline 优雅构建数据流

from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
from sklearn.linear_model import LogisticRegression

pipe = Pipeline([
    ("scaler", StandardScaler()),
    ("pca", PCA(n_components=2)),
    ("clf", LogisticRegression())
])

pipe.fit(X_train, y_train)
accuracy = pipe.score(X_test, y_test)
print(f"Pipeline 准确率: {accuracy:.2%}")

第 3 章:类别型与数值型混合特征处理

from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder, StandardScaler
from sklearn.pipeline import Pipeline

# 假设 columns 0-2 是数值型,column 3 是类别型
preprocessor = ColumnTransformer([
    ("num", StandardScaler(), [0, 1, 2]),
    ("cat", OneHotEncoder(), [3])
])

full_pipeline = Pipeline([
    ("preprocess", preprocessor),
    ("classifier", RandomForestClassifier())
])

第 4 章:网格搜索 + 交叉验证调参

from sklearn.model_selection import GridSearchCV
from sklearn.ensemble import GradientBoostingClassifier

param_grid = {
    "n_estimators": [50, 100, 200],
    "max_depth": [3, 5, None],
    "learning_rate": [0.01, 0.1, 0.2]
}

grid = GridSearchCV(
    GradientBoostingClassifier(),
    param_grid,
    cv=5,
    scoring="accuracy",
    n_jobs=-1
)
grid.fit(X_train, y_train)
print(f"最佳参数: {grid.best_params_}")
print(f"最佳 CV 分数: {grid.best_score_:.3f}")

第 5 章:模型持久化

import joblib

# 保存
joblib.dump(grid.best_estimator_, "best_model.joblib")

# 加载
model = joblib.load("best_model.joblib")
print(model.predict(X_test[:5]))

思考题

  1. 为什么 Pipeline 可以防止数据泄露?fit_transformtransform 在 cross-validation 中如何区分使用?
  2. 类别型特征超过 1000 个不同值时,OneHotEncoder 会有什么问题?可以用什么替代方案(如 Target Encoding)?
  3. GridSearchCV 和 RandomizedSearchCV 各自适用什么场景?

信息

路径
/tech-stacks/scikit-learn/tutorial/Scikit-learn 机器学习入门实战.md
更新时间
2026/5/30