《机器学习实战流程指南》
机器学习项目不是「调个模型」就结束,而是有相对固定的工程流程。本文基于《机器学习实战》的资料体系,整理从数据到模型上线验收的完整步骤。
1 教程与项目资源
- 《机器学习实战》中文教程:http://ml.apachecn.org/mlia/basic-knowledge/
- ApacheCN AiLearning 项目(书籍 + 代码):https://github.com/apachecn/AiLearning
2 标准流程总览
1. 明确问题(分类 / 回归 / 聚类 / 降维)
2. 获取并清洗数据
3. 特征工程(预处理、构造、选择)
4. 划分训练 / 验证 / 测试集
5. 选择模型并训练(多个基线对比)
6. 评估与调优(交叉验证、超参搜索)
7. 上线、监控、迭代
3 数据清洗(pandas)
import pandas as pd
df = pd.read_csv("data.csv")
# 缺失值统计
print(df.isnull().sum())
# 处理缺失:删除行 / 填充均值
df = df.dropna(subset=["label"])
df["age"].fillna(df["age"].mean(), inplace=True)
# 查看类别分布(判断是否不平衡)
print(df["label"].value_counts())
# 去除重复
df = df.drop_duplicates()
4 特征工程要点
- 归一化/标准化:数值型特征用
StandardScaler,尤其对距离类模型(KNN、SVM)。 - 类别特征编码:
LabelEncoder(有序)或OneHotEncoder(无序)。 - 特征选择:用相关系数、
SelectKBest,或随机森林的feature_importances_筛选。 - 合理性检查:类别特征是否被误读为数值(如性别用 0/1 但被当作连续值)。
5 训练与评估
from sklearn.model_selection import train_test_split, cross_val_score
from sklearn.metrics import accuracy_score, confusion_matrix, precision_recall_fscore_support
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 多个基线模型对比
from sklearn.linear_model import LogisticRegression
from sklearn.ensemble import RandomForestClassifier
from sklearn.svm import SVC
for name, model in [
("LR", LogisticRegression(max_iter=1000)),
("RF", RandomForestClassifier(n_estimators=100, random_state=42)),
("SVM", SVC()),
]:
model.fit(X_train, y_train)
acc = model.score(X_test, y_test)
print(f"{name}: {acc:.4f}")
混淆矩阵与更细粒度的指标:
from sklearn.metrics import confusion_matrix, classification_report
y_pred = clf.predict(X_test)
print(confusion_matrix(y_test, y_pred))
print(classification_report(y_test, y_pred))
6 常见陷阱
- 只用一个固定
random_state的划分:对随机性敏感的模型应加交叉验证。 - 测试集复用过多:反复用同一测试集调参会导致过拟合测试集,应保留最终验收的 hold-out 集。
- 不检查类别不平衡:不平衡数据上 accuracy 会失真,需看 precision/recall/F1 或改用加权模型。
7 小结
先跑通最简单的基线模型,再逐步加特征工程与复杂模型;每次改动只改一个变量,并用统一的评估方法对比,才能可持续地提升模型效果。
阅读 —
·
全站 —