共计 2367 个字符,预计需要花费 6 分钟才能阅读完成。
机器学习核心问题类型
机器学习主要解决三类核心问题:

- 分类 (Classification):预测离散类别标签(如垃圾邮件识别)
- 回归 (Regression):预测连续数值输出(如房价预测)
- 聚类 (Clustering):发现数据内在分组结构(如客户分群)
工具链对比:Scikit-learn vs TensorFlow vs PyTorch
- Scikit-learn
- 学习曲线平缓,API 设计统一(fit/predict 范式)
- 无需 GPU 支持,适合传统机器学习算法
-
内置丰富的数据预处理工具
-
TensorFlow
- 计算图静态定义,适合生产环境部署
- 需要 GPU 加速深度神经网络训练
-
学习资源丰富但概念体系复杂
-
PyTorch
- 动态计算图更符合 Python 编程直觉
- 研究社区首选框架,调试方便
- 需自行实现许多基础组件
推荐初学者从 Scikit-learn 开始建立基础认知。
实战:鸢尾花分类
环境准备
# 基础工具链
import numpy as np
import pandas as pd
from sklearn import datasets
# 预处理
from sklearn.preprocessing import StandardScaler # 标准化工具
from sklearn.model_selection import train_test_split # 数据分割
# 模型
from sklearn.tree import DecisionTreeClassifier # 决策树
from sklearn.svm import SVC # 支持向量机
# 评估
from sklearn.metrics import accuracy_score
数据标准化
# 加载数据集
iris = datasets.load_iris()
X, y = iris.data, iris.target
# 标准化处理(重要:避免量纲影响模型)scaler = StandardScaler() # 创建标准化器实例
X_scaled = scaler.fit_transform(X) # 拟合数据并转换
# 分割数据集(stratify 保持类别比例)X_train, X_test, y_train, y_test = train_test_split(
X_scaled, y,
test_size=0.3,
stratify=y, # 确保训练 / 测试集类别分布一致
random_state=42
)
模型训练对比
# 决策树训练
dt = DecisionTreeClassifier(max_depth=3) # 限制树深度防止过拟合
dt.fit(X_train, y_train)
# SVM 训练(注意核函数选择)svm = SVC(kernel='linear', C=1.0) # 线性核更适合小样本数据
svm.fit(X_train, y_train)
# 性能评估
print(f"Decision Tree Accuracy: {accuracy_score(y_test, dt.predict(X_test)):.2f}")
print(f"SVM Accuracy: {accuracy_score(y_test, svm.predict(X_test)):.2f}")
性能优化
交叉验证 (Cross Validation)
- 避免单次数据分割的随机性影响评估结果
- 常用 K 折交叉验证(K= 5 或 10)
- 代码示例:
from sklearn.model_selection import cross_val_score scores = cross_val_score(dt, X_scaled, y, cv=5) # 5 折交叉验证 print(f"CV Accuracy: {np.mean(scores):.2f} (±{np.std(scores):.2f})")
学习曲线诊断
from sklearn.model_selection import learning_curve
import matplotlib.pyplot as plt
# 绘制学习曲线
train_sizes, train_scores, test_scores = learning_curve(
estimator=dt,
X=X_scaled,
y=y,
cv=5,
n_jobs=-1
)
plt.plot(train_sizes, np.mean(train_scores, axis=1), label="Training")
plt.plot(train_sizes, np.mean(test_scores, axis=1), label="Validation")
plt.xlabel("Training examples")
plt.ylabel("Accuracy")
plt.legend()
当训练集和验证集曲线差距过大时,可能出现过拟合 (overfitting)。
避坑指南
数据泄露 (Data Leakage)
- 错误做法:在整个数据集上先做标准化再分割
- 正确流程:仅在训练集上 fit scaler,然后 transform 测试集
类别不平衡 (Class Imbalance)
# 查看类别分布
print(np.bincount(y)) # 输出各类别样本数
# 解决方案 1:调整 class_weight
model = DecisionTreeClassifier(class_weight='balanced') # 自动加权
# 解决方案 2:过采样 / 欠采样
from imblearn.over_sampling import SMOTE
X_resampled, y_resampled = SMOTE().fit_resample(X, y)
思考题
- 如何判断模型是否学到有效特征而非数据噪声?
- 当准确率达到 95% 后还应关注哪些指标?
建议后续学习方向:
– 混淆矩阵分析
– 特征重要性评估
– 超参数调优方法
通过这个完整案例,你应该已经掌握了机器学习基础流程的核心要点。记住:理解数据比调参更重要,好的特征工程往往能事半功倍。
正文完
