有监督学习是机器学习的重要分支,分类任务是其核心应用之一。分类方法旨在根据输入数据的特征预测其所属类别。常见分类方法包括决策树、支持向量机、朴素贝叶斯、逻辑回归等。
决策树
决策树的基本概念
决策树是一种基于树状结构的监督学习算法,用于分类或回归任务。它通过一系列规则对数据进行分割,最终生成一棵树,每个内部节点代表一个特征测试,每个分支代表测试结果,每个叶节点代表预测结果。
决策树的构建原理
决策树的构建基于递归分割数据,核心步骤如下:
-
特征选择:选择最优特征作为当前节点的分割标准。常用指标包括信息增益(ID3算法)、增益率(C4.5算法)或基尼系数(CART算法)。
- 信息增益公式:
\\text{信息增益} = H(D) - \\sum_{v=1}\^V \\frac{\|D\^v\|}{\|D\|} H(D\^v) \] 其中 ( H(D) ) 是数据集 ( D ) 的熵,( D\^v ) 是特征 ( A ) 取值为 ( v ) 的子集。
- 信息增益公式:
-
终止条件:当节点满足以下条件之一时停止分裂:
- 节点中样本属于同一类别;
- 无剩余特征可用;
- 样本数量低于预设阈值。
决策树的示例与插图
以下是一个简单的分类树示例,用于预测是否适合户外活动:
[天气?]
├── [晴朗] → [湿度?]
│ ├── [正常] → 适合
│ └── [高] → 不适合
└── [阴天] → 适合
图1:决策树结构示意图
决策树的优缺点
优点:
- 模型可解释性强,规则直观;
- 无需复杂的数据预处理(如归一化);
- 支持分类和回归任务。
缺点:
- 容易过拟合,需通过剪枝(如预剪枝、后剪枝)优化;
- 对数据微小变化敏感,可能生成不稳定树结构。
防止过拟合的方法
- 剪枝技术 :
- 预剪枝:在树生长过程中限制深度或节点样本数;
- 后剪枝:先生成完整树,再删除冗余分支。
- 随机森林:通过集成多棵决策树提升泛化能力。
代码实现示例(Python)
使用 scikit-learn 构建决策树分类器:
python
from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
# 加载数据
iris = load_iris()
X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.2)
# 训练模型
clf = DecisionTreeClassifier(criterion='gini', max_depth=3)
clf.fit(X_train, y_train)
# 评估
print("Accuracy:", clf.score(X_test, y_test))
可视化决策树
通过 graphviz 导出树结构图:
python
from sklearn.tree import export_graphviz
import graphviz
dot_data = export_graphviz(clf, out_file=None, feature_names=iris.feature_names, filled=True)
graph = graphviz.Source(dot_data)
graph.render("iris_decision_tree") # 生成PDF文件
图2:生成的决策树可视化图
lues}(A)} \frac{|D_v|}{|D|} H(D_v) ]
其中 ( H(D) ) 为数据集 ( D ) 的熵,( D_v ) 为特征 ( A ) 取值为 ( v ) 的子集。
支持向量机(SVM)
支持向量机的基本概念
支持向量机(Support Vector Machine, SVM)是一种有监督学习算法,主要用于分类和回归任务。其核心思想是找到一个最优超平面,将不同类别的数据分开,同时最大化分类边界(即"间隔")。SVM特别适合处理高维数据,并且在数据量较小的情况下表现优异。
支持向量机的原理
SVM通过构造一个超平面(或一组超平面)来分隔不同类别的数据点。最优超平面的选择基于"间隔最大化"原则,即找到能够最大化两类数据点之间距离的超平面。支持向量是距离超平面最近的那些数据点,它们决定了超平面的位置和方向。
线性可分情况
对于线性可分的数据,SVM的目标是找到一个超平面,使得所有数据点被正确分类,并且间隔最大。数学上,超平面可以表示为: [ \mathbf{w} \cdot \mathbf{x} + b = 0 ] 其中,(\mathbf{w})是权重向量,(b)是偏置项。分类决策函数为: [ f(\mathbf{x}) = \text{sign}(\mathbf{w} \cdot \mathbf{x} + b) ]
非线性可分情况
对于非线性可分的数据,SVM通过核函数(Kernel Function)将数据映射到高维空间,使其在高维空间中线性可分。常用的核函数包括:
- 线性核:(K(\mathbf{x}_i, \mathbf{x}_j) = \mathbf{x}_i \cdot \mathbf{x}_j)
- 多项式核:(K(\mathbf{x}_i, \mathbf{x}_j) = (\mathbf{x}_i \cdot \mathbf{x}_j + c)^d)
- 高斯核(RBF核):(K(\mathbf{x}_i, \mathbf{x}_j) = \exp(-\gamma |\mathbf{x}_i - \mathbf{x}_j|^2))
支持向量机的优化问题
SVM的优化目标是最大化间隔,同时最小化分类误差。这可以转化为一个凸二次规划问题: [ \min_{\mathbf{w}, b} \frac{1}{2} |\mathbf{w}|^2 + C \sum_{i=1}^n \xi_i ] 约束条件为: [ y_i (\mathbf{w} \cdot \mathbf{x}_i + b) \geq 1 - \xi_i, \quad \xi_i \geq 0 ] 其中,(C)是正则化参数,用于控制分类误差的惩罚程度;(\xi_i)是松弛变量,用于处理不可分的情况。
支持向量机的训练与预测
训练SVM通常涉及求解上述优化问题,常用的算法包括序列最小优化(SMO)算法。训练完成后,预测新数据点的类别只需计算决策函数的值: [ f(\mathbf{x}) = \text{sign}\left(\sum_{i=1}^n \alpha_i y_i K(\mathbf{x}_i, \mathbf{x}) + b\right) ] 其中,(\alpha_i)是拉格朗日乘子,仅支持向量对应的(\alpha_i)不为零。
支持向量机的优缺点
优点
- 在高维空间中表现优异,适合处理特征维度高于样本量的数据。
- 通过核函数可以灵活处理非线性分类问题。
- 泛化能力强,尤其在小样本情况下。
缺点
- 训练时间较长,尤其在大规模数据集上。
- 对参数(如(C)和核函数参数)的选择敏感,需要调优。
- 解释性较差,难以直观理解模型的决策过程。
支持向量机的应用场景
SVM广泛应用于文本分类、图像识别、生物信息学等领域。例如:
- 手写数字识别(如MNIST数据集)。
- 垃圾邮件分类。
- 基因表达数据分析。
实现示例(Python代码)
以下是使用scikit-learn库实现SVM的示例代码:
python
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score
# 加载数据集
iris = datasets.load_iris()
X = iris.data[:, :2] # 仅使用前两个特征
y = iris.target
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# 训练SVM模型
model = SVC(kernel='rbf', C=1.0)
model.fit(X_train, y_train)
# 预测并评估
y_pred = model.predict(X_test)
print("Accuracy:", accuracy_score(y_test, y_pred))
参数调优建议
- 正则化参数(C):较大的(C)会减少误分类,但可能导致过拟合;较小的(C)允许更多误分类,但泛化能力更强。
- 核函数选择:根据数据特征选择合适的核函数,如线性核适合线性可分数据,RBF核适合非线性数据。
- 核参数(如(\gamma)):调整核参数可以控制模型的复杂度,需通过交叉验证确定。
逻辑回归
逻辑回归的基本概念
逻辑回归是一种用于解决分类问题的统计方法,尤其适用于二分类问题。尽管名称中包含"回归",但它实际上是一种分类算法。逻辑回归通过将线性回归的输出映射到概率空间(0到1之间),从而预测样本属于某个类别的概率。
逻辑回归的核心思想是使用逻辑函数(Sigmoid函数)将线性组合的输入特征转换为概率值。给定输入特征 ( X ) 和参数 ( \theta ),逻辑回归模型的输出可以表示为:
P(Y=1\|X) = \\frac{1}{1 + e\^{-(\\theta\^T X)}}
其中,( P(Y=1|X) ) 表示在给定输入 ( X ) 的条件下,样本属于类别1的概率。
逻辑回归的数学原理
逻辑回归的数学推导基于极大似然估计(MLE)。假设训练数据独立同分布,似然函数可以表示为:
L(\\theta) = \\prod_{i=1}\^n P(Y=y_i\|X=x_i)
为了简化计算,通常对似然函数取对数,得到对数似然函数:
\\log L(\\theta) = \\sum_{i=1}\^n \\left\[ y_i \\log P(Y=1\|X=x_i) + (1 - y_i) \\log (1 - P(Y=1\|X=x_i)) \\right\]
逻辑回归的目标是通过最大化对数似然函数来估计参数 ( \theta )。这一优化问题通常通过梯度下降或牛顿法等数值优化算法求解。
Sigmoid函数的作用
Sigmoid函数是逻辑回归的核心组成部分,其形式为:
\\sigma(z) = \\frac{1}{1 + e\^{-z}}
其中,( z = \theta^T X )。Sigmoid函数将线性组合 ( z ) 映射到 (0, 1) 区间,从而可以解释为概率值。以下是Sigmoid函数的特性:
- 当 ( z ) 趋近于正无穷时,( \sigma(z) ) 趋近于1。
- 当 ( z ) 趋近于负无穷时,( \sigma(z) ) 趋近于0。
- 在 ( z = 0 ) 时,( \sigma(z) = 0.5 )。
Sigmoid函数的曲线如下所示(以图表形式展示,横轴为 ( z ),纵轴为 ( \sigma(z) )):
- 曲线呈S形,单调递增。
- 在 ( z = 0 ) 附近变化较快,两端平缓。
决策边界
逻辑回归通过设定一个阈值(通常为0.5)将概率值转换为类别标签。决策边界是输入空间中使得 ( P(Y=1|X) = 0.5 ) 的点构成的超平面。对于线性逻辑回归,决策边界是线性的,形式为:
\\theta\^T X = 0
对于非线性问题,可以通过引入多项式特征或核方法扩展逻辑回归的决策边界。
模型训练与优化
逻辑回归的参数估计通常通过梯度下降法实现。梯度下降的更新规则为:
\\theta_j := \\theta_j - \\alpha \\frac{\\partial J(\\theta)}{\\partial \\theta_j}
其中,( J(\theta) ) 是损失函数(通常为负对数似然函数),( \alpha ) 是学习率。损失函数的梯度可以表示为:
\\frac{\\partial J(\\theta)}{\\partial \\theta_j} = \\sum_{i=1}\^n (P(Y=1\|X=x_i) - y_i) x_{ij}
正则化与防止过拟合
逻辑回归容易过拟合,尤其是在特征维度较高时。常用的正则化方法包括:
- L1正则化(Lasso):在损失函数中加入 ( \lambda \sum_{j=1}^d |\theta_j| ),倾向于产生稀疏解。
- L2正则化(Ridge):在损失函数中加入 ( \lambda \sum_{j=1}^d \theta_j^2 ),倾向于缩小参数值。
正则化参数 ( \lambda ) 控制正则化的强度,通常通过交叉验证选择。
逻辑回归的优缺点
优点:
- 计算效率高,适合大规模数据集。
- 输出具有概率解释,便于后续决策。
- 可以通过正则化防止过拟合。
缺点:
- 假设数据线性可分或通过特征变换线性可分,对非线性问题表现较差。
- 对异常值敏感。
- 在多分类问题中需要扩展(如OvR或softmax回归)。
逻辑回归的扩展
- 多分类逻辑回归:通过一对多(One-vs-Rest, OvR)或softmax回归扩展到多分类问题。
- 核逻辑回归:通过核方法引入非线性决策边界。
- 贝叶斯逻辑回归:引入先验分布,从贝叶斯角度估计参数。
逻辑回归的应用场景
逻辑回归广泛应用于以下领域:
- 医学诊断:预测疾病发生概率。
- 金融风控:评估客户违约风险。
- 自然语言处理:文本分类任务。
- 市场营销:客户响应预测。