共计 2305 个字符,预计需要花费 6 分钟才能阅读完成。
核心概念:三类模型的数学本质
机器学习模型根据任务类型主要分为监督学习(分类、回归)和非监督学习(聚类)。它们的核心差异体现在输出空间和损失函数设计上:

-
分类模型 处理离散输出,数学表示为 $f: \mathbb{R}^n \rightarrow {c_1,c_2,…,c_k}$。例如预测鸢尾花种类时,输出是 setosa/versicolor/virginica 三个离散类别。其交叉熵损失函数为:
$$\mathcal{L} = -\sum_{i=1}^k y_i\log(p_i)$$
其中 $p_i$ 表示预测为第 $i$ 类的概率 -
回归模型 输出连续值,表示为 $f: \mathbb{R}^n \rightarrow \mathbb{R}$。比如预测房价时输出是实数。常用均方误差 (MSE) 作为损失函数:
$$\mathcal{L} = \frac{1}{n}\sum_{i=1}^n (y_i-\hat{y}_i)^2$$ -
聚类模型 没有标签指导,通过数据内在结构进行分组,目标函数通常是最小化类内距离。K-Means 的损失函数为:
$$J = \sum_{i=1}^k \sum_{x\in C_i} ||x-\mu_i||^2$$
典型误用场景分析
实际工程中常见的模型误用包括:
-
二分类简化多分类问题:例如将手写数字识别(10 类)强行转为「是否为数字 5」的二分类任务,导致其他数字间的区分特征丢失。通过混淆矩阵可见大量非 5 数字被误判:
from sklearn.metrics import confusion_matrix # 真实标签为[0,1,2,3,4,5,...], 预测标签为[1,0,0,1,0,1,...] print(confusion_matrix(y_true, y_pred)) -
用回归解决有序分类问题:比如将电影评分(1~5 星)当作连续值预测,可能产生 3.8 分这种不合理结果。正确做法应使用序数回归(Ordinal Regression)。
-
忽视聚类数据的尺度差异:对年龄(20-60)和收入(0-100 万)未做归一化直接聚类,导致距离计算被收入主导。
技术实现示例
分类任务:随机森林处理鸢尾花数据集
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_iris
# 加载数据
iris = load_iris()
X, y = iris.data, iris.target
# 模型训练(n_estimators 控制树的数量,max_depth 防止过拟合)clf = RandomForestClassifier(n_estimators=100, max_depth=3, random_state=42)
clf.fit(X, y)
# 特征重要性分析(数值越大表示该特征对分类贡献越大)print("Feature importances:", clf.feature_importances_)
# 输出示例:[0.1, 0.2, 0.5, 0.2] 表示第三个特征最重要
回归任务:XGBoost 预测波士顿房价
import xgboost as xgb
from sklearn.model_selection import cross_val_score
# 5 折交叉验证(eval_metric 可选 rmse/mae)model = xgb.XGBRegressor(objective='reg:squarederror')
scores = cross_val_score(model, X, y, cv=5, scoring='neg_mean_squared_error')
print("CV MSE scores:", -scores) # 注意 scikit-learn 的交叉验证返回负值
聚类任务:K-Means 客户分群
from sklearn.cluster import KMeans
from sklearn.preprocessing import StandardScaler
# 数据标准化(对聚类至关重要)scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
# 肘部法则选择 K 值(观察 SSE 下降拐点)sse = []
for k in range(1, 11):
kmeans = KMeans(n_clusters=k, random_state=42)
kmeans.fit(X_scaled)
sse.append(kmeans.inertia_)
# 可视化选择最佳 K 值(代码略)
生产环境考量
在选择模型时需要权衡多个因素:
- 计算复杂度:随机森林训练复杂度 $O(MN\log N)$ 高于逻辑回归 $O(N)$,但预测时可并行
- 特征敏感性:SVM 对特征缩放敏感,而决策树系算法天然具备尺度不变性
- 可解释性:线性回归系数可直接解释,而神经网络是黑箱模型
- 数据需求:深度学习需要大量数据,小样本下传统模型更稳定
五大实战避坑指南
- K-Means 必须做特征归一化:不同量纲的特征会导致距离计算偏差
- 分类任务的样本均衡:对不平衡数据采用 SMOTE 过采样或类别权重
- 回归问题的输出变换:对右偏分布的目标变量取对数
- 聚类评估不用准确率:应采用轮廓系数或 Calinski-Harabasz 指数
- 模型对比需用验证集:避免在测试集上反复调参导致数据泄露
开放性问题
当标签存在层级关系(如动物分类:门 - 纲 - 目 - 科)时,传统扁平分类会损失结构信息。可能的改进方向包括:
1. 使用层次化损失函数(Hierarchical Cross-Entropy)
2. 构建标签间的依赖关系图
3. 采用级联分类器(先粗分后细分)
这个问题目前在商品分类、医疗诊断等领域仍有广泛研究价值。
