机器学习算法浩如烟海,但绝大多数复杂模型都是建立在几个核心算法的基础之上的。我们可以将它们大致分为监督学习(有标签)和无监督学习(无标签)两大类。
以下是五种最经典、最核心的机器学习算法的详细对比、场景、公式及代码实现:
1. 线性回归 (Linear Regression)
核心概念与区别:用于回归任务(预测连续值)。它假设特征与目标变量之间存在线性关系,通过拟合一条直线(或高维超平面)来最小化预测值与真实值之间的误差。它是最基础的预测模型,模型简单且可解释性极强。
应用场景:
- 房价预测(基于面积、地段等连续变量)。
- 销售额预测。
- 经济学中的趋势分析。
核心公式:
假设函数 (Hypothesis):
$$h_\theta(x) = \theta_0 + \theta_1x_1 + \theta_2x_2 + … + \theta_nx_n = \theta^Tx$$
代价函数 (均方误差 MSE, Cost Function):
$$J(\theta) = \frac{1}{2m} \sum_{i=1}^{m} (h_\theta(x^{(i)}) - y^{(i)})^2$$
实例代码 (Python / scikit-learn):
1 | import numpy as np |
2. 逻辑回归 (Logistic Regression)
核心概念与区别:名字里虽然有“回归”,但它主要用于二分类任务。它在线性回归的基础上,通过一个非线性的 Sigmoid 函数,将连续的预测值映射到 $0$ 到 $1$ 之间的概率区间。它与线性回归的区别在于输出的非线性转换及损失函数的不同。
应用场景:
- 垃圾邮件检测(是/否)。
- 疾病风险诊断(患病/不患病)。
- 金融领域的信用卡欺诈预测。
核心公式:
Sigmoid 映射函数:
$$g(z) = \frac{1}{1 + e^{-z}}$$
假设函数:
$$h_\theta(x) = g(\theta^Tx) = \frac{1}{1 + e^{-\theta^Tx}}$$
代价函数 (交叉熵损失 Cross-Entropy Loss):
$$J(\theta) = -\frac{1}{m} \sum_{i=1}^{m} \left[ y^{(i)} \log(h_\theta(x^{(i)})) + (1 - y^{(i)}) \log(1 - h_\theta(x^{(i)})) \right]$$
实例代码:
1 | from sklearn.linear_model import LogisticRegression |
3. 支持向量机 (Support Vector Machine, SVM)
核心概念与区别:主要用于分类(也可用于回归)。其核心思想是在特征空间中寻找一个最大间隔超平面(Margin),将不同类别的数据尽可能宽地分开。对于非线性数据,SVM 利用“核技巧 (Kernel Trick)”将数据映射到高维空间使其线性可分。相比逻辑回归,SVM 在高维空间和小样本数据集上表现更优,且只关注边界上的数据点(支持向量)。
应用场景:
- 图像分类与人脸识别。
- 文本分类(如新闻分类)。
- 生物信息学(蛋白质分类)。
核心公式:
线性可分情况下的优化目标(硬间隔):
$$\min_{w,b} \frac{1}{2} ||w||^2$$
约束条件:
$$y_i(w^T x_i + b) \ge 1, \quad i = 1, …, m$$
实例代码:
1 | from sklearn.svm import SVC |
4. 决策树 (Decision Tree)
核心概念与区别:可用于分类和回归。它模仿人类做决策的过程,通过对特征设定一系列“如果-那么 (If-Then)”的条件,将数据像树枝一样不断分裂。它的主要区别在于其高度的可解释性,并且不需要对数据进行归一化处理。它是随机森林 (Random Forest) 和梯度提升树 (GBDT) 等高级集成算法的基石。
应用场景:
- 客户流失预测与分群。
- 医疗诊断系统的辅助决策。
- 银行信贷风险评估。
核心公式:
决策树通过不纯度指标(如信息熵或基尼系数)来选择最佳划分特征。
信息熵 (Entropy):
$$H(D) = -\sum_{k=1}^{K} p_k \log_2 p_k$$
基尼系数 (Gini Impurity, CART树常用):
$$Gini(p) = \sum_{k=1}^{K} p_k (1 - p_k) = 1 - \sum_{k=1}^{K} p_k^2$$
实例代码:
1 | from sklearn.tree import DecisionTreeClassifier |
5. K-均值聚类 (K-Means)
核心概念与区别:属于无监督学习,即数据没有标签。K-Means 的目标是将数据分为 $K$ 个簇(Cluster),使得簇内的数据点尽可能相似,而簇间的数据点尽可能不同。它通过不断迭代更新“簇中心”来实现。这是与前面四种监督学习算法最本质的区别。
应用场景:
- 市场营销中的目标客户群体细分。
- 图像压缩(减少图像颜色数量)。
- 异常检测(远离所有聚类中心的点)。
核心公式:
目标是最小化簇内平方误差和 (WCSS, Within-Cluster Sum of Squares):
$$J = \sum_{j=1}^{K} \sum_{x_i \in C_j} ||x_i - \mu_j||^2$$
其中 $\mu_j$ 是第 $j$ 个簇 $C_j$ 的质心。
实例代码:
1 | from sklearn.cluster import KMeans |
核心算法横向对比总结
| 算法名称 | 学习类型 | 核心任务 | 优势 | 劣势 |
|---|---|---|---|---|
| 线性回归 | 监督学习 | 回归 (连续值) | 简单直观,计算极快,可解释性强。 | 只能处理线性关系,容易欠拟合。 |
| 逻辑回归 | 监督学习 | 分类 (主要是二分类) | 输出带有概率意义,训练速度快。 | 难以处理复杂的非线性边界。 |
| 支持向量机 | 监督学习 | 分类 / 回归 | 高维空间表现好,能通过核函数处理非线性。 | 大规模数据集上训练慢,参数调优难。 |
| 决策树 | 监督学习 | 分类 / 回归 | 极其直观,符合人类思维,无需数据缩放。 | 极易过拟合(需要剪枝或使用集成方法)。 |
| K-Means | 无监督学习 | 聚类 (分群) | 原理简单,聚类速度快。 | 需人为指定K值,对初始点和异常值敏感。 |