📊 机器学习
经典算法、模型评估与工程实践
什么是机器学习?
机器学习(Machine Learning)是人工智能的核心方法之一,其基本思想是让计算机从数据中自动学习规律,而非通过显式编程。学到的规律可以用于预测、分类、聚类等任务。
💡 核心公式
机器学习的本质是找到一个函数 f: X → Y,使得在训练数据上学到的映射关系能很好地泛化到未见过的数据上。
机器学习的三大范式
1. 监督学习(Supervised Learning)
使用带有标签的训练数据,学习输入到输出的映射关系。
- 回归(Regression):预测连续值,如房价预测、股票走势
- 分类(Classification):预测离散类别,如垃圾邮件识别、图像分类
常见算法:
- 线性回归 / 逻辑回归
- 决策树 / 随机森林
- 支持向量机(SVM)
- K 近邻(KNN)
- 朴素贝叶斯
- 梯度提升树(XGBoost / LightGBM)
2. 无监督学习(Unsupervised Learning)
使用无标签数据,发现数据中的内在结构和模式。
- 聚类(Clustering):K-Means、DBSCAN、层次聚类
- 降维(Dimensionality Reduction):PCA、t-SNE、UMAP
- 异常检测(Anomaly Detection):孤立森林、One-Class SVM
- 关联规则(Association):Apriori、FP-Growth
3. 强化学习(Reinforcement Learning)
智能体(Agent)通过与环境交互,根据奖励信号学习最优策略。
- 核心概念:状态(State)、动作(Action)、奖励(Reward)、策略(Policy)
- 经典算法:Q-Learning、SARSA、PPO、A3C
- 应用场景:游戏 AI(AlphaGo)、机器人控制、自动驾驶
模型评估方法
分类任务评估指标
- 准确率(Accuracy):正确预测数 / 总预测数
- 精确率(Precision):真正例 / (真正例 + 假正例)
- 召回率(Recall):真正例 / (真正例 + 假负例)
- F1 分数:精确率和召回率的调和平均
- AUC-ROC:模型在不同阈值下的综合表现
回归任务评估指标
- MSE / RMSE:均方误差 / 均方根误差
- MAE:平均绝对误差
- R² 分数:决定系数,衡量模型解释方差的比例
交叉验证
K 折交叉验证是评估模型泛化能力的标准方法:将数据分为 K 份,轮流用 K-1 份训练、1 份验证,取平均性能。
特征工程
特征工程是机器学习中最关键的环节之一,好的特征往往比复杂的模型更重要。
- 特征提取:从原始数据中提取有意义的特征(如 TF-IDF、词嵌入)
- 特征选择:选出最相关的特征子集(过滤法、包装法、嵌入法)
- 特征变换:标准化、归一化、对数变换、多项式特征
- 缺失值处理:均值填充、中位数填充、模型预测填充
过拟合与正则化
过拟合是指模型在训练数据上表现很好,但在新数据上表现差。常见应对方法:
- L1 / L2 正则化:在损失函数中加入参数惩罚项
- Dropout:训练时随机丢弃部分神经元(深度学习)
- 早停(Early Stopping):验证集性能不再提升时停止训练
- 数据增强:通过变换扩充训练数据
- 集成学习:Bagging、Boosting、Stacking
🎯 实践建议
在实际项目中,建议先用简单的基线模型(如逻辑回归)建立 benchmark,再逐步尝试更复杂的模型。同时,数据质量和特征工程往往比模型选择更重要。
实战代码示例
以下是使用 scikit-learn 进行机器学习任务的典型代码模式:
分类任务:垃圾邮件检测
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import MultinomialNB
from sklearn.metrics import classification_report
# 准备数据
X_train, X_test, y_train, y_test = train_test_split(
emails, labels, test_size=0.2, random_state=42
)
# 特征提取:文本转 TF-IDF 向量
vectorizer = TfidfVectorizer(max_features=5000)
X_train_vec = vectorizer.fit_transform(X_train)
X_test_vec = vectorizer.transform(X_test)
# 训练朴素贝叶斯分类器
model = MultinomialNB()
model.fit(X_train_vec, y_train)
# 评估
y_pred = model.predict(X_test_vec)
print(classification_report(y_test, y_pred))
回归任务:房价预测
from sklearn.ensemble import GradientBoostingRegressor
from sklearn.model_selection import cross_val_score
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import Pipeline
# 构建 Pipeline(推荐做法)
pipe = Pipeline([
('scaler', StandardScaler()), # 特征标准化
('regressor', GradientBoostingRegressor( # 梯度提升回归
n_estimators=200,
max_depth=5,
learning_rate=0.1
))
])
# K 折交叉验证评估
cv_scores = cross_val_score(pipe, X, y, cv=5, scoring='neg_mean_squared_error')
print(f"CV RMSE: {-cv_scores.mean():.2f} ± {cv_scores.std():.2f}")
# 全量训练
pipe.fit(X_train, y_train)
predictions = pipe.predict(X_test)
聚类任务:客户分群
from sklearn.cluster import KMeans
from sklearn.preprocessing import StandardScaler
import matplotlib.pyplot as plt
# 标准化特征
scaler = StandardScaler()
X_scaled = scaler.fit_transform(customer_features)
# 肘部法则选择最优 K
inertias = []
for k in range(2, 11):
km = KMeans(n_clusters=k, random_state=42, n_init=10)
km.fit(X_scaled)
inertias.append(km.inertia_)
# 训练最终模型
kmeans = KMeans(n_clusters=4, random_state=42)
customer_segments = kmeans.fit_predict(X_scaled)
模型选择指南
不同场景适合不同的算法,以下是常见任务的推荐方案:
| 场景 | 推荐算法 | 理由 |
|---|---|---|
| 表格数据分类 | XGBoost / LightGBM | 表格数据王者,自动处理特征交互 |
| 表格数据回归 | LightGBM / CatBoost | 支持类别特征,训练快 |
| 文本分类 | 朴素贝叶斯 / SVM | 高维稀疏数据表现好 |
| 图像分类 | CNN / Vision Transformer | 自动提取图像特征 |
| 时间序列预测 | Prophet / LSTM | 捕捉时间依赖关系 |
| 推荐系统 | 协同过滤 / 矩阵分解 | 利用用户-物品交互模式 |
| 异常检测 | 孤立森林 / One-Class SVM | 无需标签数据,适合无监督场景 |
| 小样本快速验证 | 逻辑回归 / 决策树 | 可解释性强,作为 baseline |
机器学习实战工作流
一个完整的机器学习项目通常遵循以下流程:
# 典型的 ML 项目工作流
1. 问题定义 → 明确任务类型(分类/回归/聚类)和评估指标
2. 数据收集 → 获取并清洗数据,处理缺失值和异常值
3. 探索性分析 → 可视化数据分布,理解特征关系
4. 特征工程 → 提取、选择、变换特征
5. 模型选择 → 根据任务和数据选择合适的算法
6. 模型训练 → 交叉验证调参,避免过拟合
7. 模型评估 → 在测试集上评估泛化性能
8. 模型部署 → 导出模型,提供 API 服务
常用工具与库
📚 scikit-learn
经典机器学习库,包含几乎所有传统算法实现,统一的 API 接口,适合快速原型开发。
🌳 XGBoost / LightGBM
梯度提升树的高性能实现。LightGBM 训练更快、内存占用更低,Kaggle 竞赛首选。
🔥 PyTorch
深度学习框架,动态计算图设计,调试友好,是学术研究和工业界的主流选择。
🐼 pandas + NumPy
数据处理和数值计算的基础库,pandas 处理表格数据,NumPy 提供高性能矩阵运算。
🚀 学习路线建议
先掌握 scikit-learn 中的经典算法 → 学习特征工程和模型评估方法 → 进阶到 PyTorch 深度学习 → 最终结合大模型(LLM)探索前沿应用。工具是为解决问题服务的,不要追求“最新最复杂”,而要选择“最适合当前问题的”。