机器学习中的分类算法——监督学习

摘要

​ 本文综述了监督学习中多种分类算法的核心概念与应用示例,强调了从线性模型到非线性核方法、支持向量机(SVM)及神经网络模型的演变。线性模型如普通最小二乘法和岭回归,通过优化误差和正则化策略处理简单至中等复杂度的数据分类。岭回归通过引入惩罚项提高模型在多重共线性数据上的稳定性。线性和二次判别分析(LDA/QDA)提供了解决分类问题的经典框架,尤其适合具有特定统计属性的数据分布。核岭回归和SVM引入核技巧处理非线性分类,其中SVM以其最大化间隔的特性在高维空间中表现优异,尽管在大规模数据上可能面临计算挑战。多层感知器(MLP)作为神经网络模型,展示出通过多层非线性变换实现高度灵活的函数逼近能力,正则化参数的调整帮助平衡偏差与方差,优化模型泛化性能。

Abstract

​ This paper reviews the core concepts and application examples of various classification algorithms in supervised learning, emphasizing the evolution from linear models to nonlinear kernel methods, support vector machines (SVM) and neural network models. Linear models such as ordinary least squares and ridge regression handle classification of simple to moderately complex data through optimization errors and regularization strategies. Ridge regression improves the stability of the model on multicollinearity data by introducing a penalty term. Linear and quadratic discriminant analysis (LDA/QDA) provides a classical framework for solving classification problems and is particularly suitable for data distributions with specific statistical properties. Kernel ridge regression and SVM introduce kernel techniques for nonlinear classification, where SVM performs well in high-dimensional Spaces due to its maximized spacing, despite possible computational challenges on large-scale data. As a neural network model, multi-layer perceptrons (MLP) demonstrate the ability to achieve highly flexible function approximation through multi-layer nonlinear transformation. Regularization parameter adjustment helps balance bias and variance and optimizes model generalization performance.

1 线性模型

1.1 普通最小二乘法

y ^ ( w , x ) = w 0 + w 1 x 1 + … + w p x p \hat{y}(w,x)=w_0+w_1x_1+\ldots+w_{p}x_{p} y^(w,x)=w0+w1x1++wpxp

以下示例使用数据集的第一个特征,可以在结果图中看到一条直线,显示线性回归如何尝试绘制一条直线,以最好地最小化数据集中观察到的响应与线性近似预测的响应之间的残差平方和。
糖尿病数据集:

样本总数422
维度10
特征real,-.2 < x <.2
目标int, 25-346
import matplotlib.pyplot as plt
import numpy as np

from sklearn import datasets, linear_model
from sklearn.metrics import mean_squared_error, r2_score

# 加载糖尿病数据集
diabetes_X, diabetes_y = datasets.load_diabetes(return_X_y=True)

# 使用第一个特征
diabetes_X = diabetes_X[:, np.newaxis, 2]

# 划分训练集和测试集
diabetes_X_train = diabetes_X[:-20]
diabetes_X_test = diabetes_X[-20:]

# 将目标分成训练/测试集
diabetes_y_train = diabetes_y[:-20]
diabetes_y_test = diabetes_y[-20:]

# 线性回归模型
regr = linear_model.LinearRegression()

# 模型训练
regr.fit(diabetes_X_train, diabetes_y_train)

# 测试集预测模型
diabetes_y_pred = regr.predict(diabetes_X_test)

# 系数
print("Coefficients: \n", regr.coef_)
# 方差
print("Mean squared error: %.2f" % mean_squared_error(diabetes_y_test, diabetes_y_pred))
# 决定系数   越接近1表示预测越完美
print("Coefficient of determination: %.2f" % r2_score(diabetes_y_test, diabetes_y_pred))


plt.scatter(diabetes_X_test, diabetes_y_test, color="blue")
plt.plot(diabetes_X_test, diabetes_y_pred, color="red", linewidth=3)

plt.xticks(())
plt.yticks(())

plt.show()

结果图:

请添加图片描述

说明:
普通最小二乘法的系数估计依赖于特征的独立性。当特征与设计矩阵的列相关时 𝑋 具有近似线性依赖性,设计矩阵变得接近奇异,因此,最小二乘估计对观察目标中的随机误差变得高度敏感,产生很大的方差。例如,当在没有实验设计的情况下收集数据时,可能会出现这种多重共线性的情况。

1.2 岭回归及分类

1.2.1 回归

​ 岭回归通过对系数大小施加惩罚来解决普通最小二乘法的一些问题。岭系数最小化惩罚残差平方和:
min ⁡ w ∣ ∣ X w − y ∣ ∣ 2 2 + α ∣ ∣ w ∣ ∣ 2 2 \min_w||Xw-y||_2^2+\alpha||w||_2^2 wmin∣∣Xwy22+α∣∣w22
​ 复杂度参数 α ≥ 0 控制收缩量:𝛼 值越大 ,收缩量越大,系数对于共线性变得越稳健。

岭回归在本例中使用的估计器。每种颜色代表系数向量的不同特征。

import matplotlib.pyplot as plt
import numpy as np

from sklearn import linear_model

# X 是10*10的希尔伯特矩阵
X = 1.0 / (np.arange(1, 11) + np.arange(0, 10)[:, np.newaxis])
y = np.ones(10)

n_alphas = 200
alphas = np.logspace(-10, -2, n_alphas)

coefs = []
for a in alphas:
    ridge = linear_model.Ridge(alpha=a, fit_intercept=False)
    ridge.fit(X, y)
    coefs.append(ridge.coef_)

    ax = plt.gca()

ax.plot(alphas, coefs)
ax.set_xscale("log")
ax.set_xlim(ax.get_xlim()[::-1])  # reverse axis
plt.xlabel("alpha")
plt.ylabel("weights")
plt.title("Ridge coefficients as a function of the regularization")
plt.axis("tight")
plt.show()

结果如下:

请添加图片描述

​ 此示例还显示了将岭回归应用于高度病态矩阵的有用性。对于此类矩阵,目标变量的微小变化可能会导致计算的权重出现巨大差异。在这种情况下,设置一定的正则化(alpha)来减少这种变化(噪声)是有用的。

1.2.2 分类

​ 岭回归器有一个分类器变体:Ridge Classifier。该分类器首先将二元目标转换为 {-1, 1},然后将问题视为回归任务,优化与上述相同的目标。预测的类别对应于回归器预测的符号。对于多类分类,问题被视为多输出回归,预测的类对应于具有最高值的输出。 使用(惩罚的)最小二乘损失来拟合分类模型而不是更传统的逻辑或铰链损失似乎是有问题的。然而,在实践中,所有这些模型都可以在准确性或精度/召回率方面产生相似的交叉验证分数,而 Ridge Classifier 使用的惩罚最小二乘损失允许对具有不同计算性能配置文件的数值求解器进行非常不同的选择。 Ridge Classifier 的速度明显快于其他分类器。

2 线性和二次判别分析

​ 线性判别分析(Linear Discriminant Analysis)和二次判别分析(Quadratic Discriminant Analysis)是两个经典的分类器,分别具有线性和二次决策面。 这些分类器很有吸引力,因为它们具有易于计算的封闭形式解决方案,本质上是多类的,已被证明在实践中运行良好,并且无需调整超参数。
请添加图片描述

该图显示了线性判别分析和二次判别分析的决策边界。最下面一行表明线性判别分析只能学习线性边界,而二次判别分析可以学习二次边界,因此更加灵活。

2.1 LDA 和 QDA 分类器的数学公式

LDA和QDA都以贝叶斯规则为基础,利用具有密度的多元高斯分布构造,LDA是QDA的一个特例。

请添加图片描述

下面是QDA和LDA的公式说明:

请添加图片描述

3 核岭回归

​ 核岭回归 (KRR) 将岭回归和分类(具有 l2 范数正则化的线性最小二乘)与核技巧结合起来。因此,它学习了由各自的内核和数据引起的空间中的线性函数。对于非线性核,这对应于原始空间中的非线性函数。 Kernel Ridge 学习的模型形式与支持向量回归 (SVR) 相同。然而,使用不同的损失函数:KRR 使用平方误差损失,而支持向量回归使用 𝜖 -不敏感损失,均与 l2 正则化相结合。与 SVR 相比,Kernel Ridge 的拟合可以以封闭形式完成,对于中等规模的数据集通常速度更快。另一方面,学习的模型是非稀疏的,因此比 SVR 慢,SVR 学习稀疏模型 𝜖 > 0 。

​ 下图在人工数据集上比较了 Kernel Ridge 和 SVR,该数据集由正弦目标函数和每五个数据点添加的强噪声组成。绘制了 Kernel Ridge 和 SVR 的学习模型,其中 RBF 内核的复杂性/正则化和带宽都已使用网格搜索进行了优化。学到的功能非常相似;然而,拟合 Kernel Ridge 大约比拟合 SVR 快七倍(两者都带有网格搜索)。然而,使用 SVR 预测 100000 个目标值的速度要快三倍以上,因为它仅使用 100 个训练数据点中的大约 1/3 作为支持向量来学习稀疏模型。

请添加图片描述

​ 下图比较了Kernel Ridge和SVR对于不同大小的训练集的拟合和预测的时间。对于中等规模的训练集(小于 1000 个样本),拟合 Kernel Ridge 比 SVR 更快;然而,对于更大的训练集,SVR 可以更好地扩展。就预测时间而言,由于学习了稀疏解决方案,SVR 对于所有大小的训练集都比 Kernel Ridge 更快。稀疏程度以及预测时间取决于参数 𝜖 和 𝐶 ; 𝜖 = 0 将对应于密集模型。

请添加图片描述

4 支持向量机 (SVM)

支持向量机的优点是:

  • 在高维空间中有效。

  • 在维度数量较多的情况下仍然有效 比样本数量。

  • 在决策函数中使用训练点的子集(称为支持向量),因此它也具有内存效率。

  • 可以为决策函数指定不同的核函数。提供了通用内核,但也可以指定自定义内核。

支持向量机的缺点包括:

  • 如果特征数量远大于样本数量,在选择核函数时要避免过度拟合,正则化项至关重要。

  • SVM 不直接提供概率估计,这些是使用昂贵的五倍交叉验证计算 。

下面是一个SVM解决不平衡类问题的一个例子:
我们首先使用普通 SVC 找到分离平面,然后绘制(虚线)分离超平面,并自动校正不平衡类。

import matplotlib.lines as mlines
import matplotlib.pyplot as plt

from sklearn import svm
from sklearn.datasets import make_blobs
from sklearn.inspection import DecisionBoundaryDisplay

# 创建两个随机点簇
n_samples_1 = 1000
n_samples_2 = 100
centers = [[0.0, 0.0], [2.0, 2.0]]
clusters_std = [1.5, 0.5]
X, y = make_blobs(
    n_samples=[n_samples_1, n_samples_2],
    centers=centers,
    cluster_std=clusters_std,
    random_state=0,
    shuffle=False,
)

# 拟合模型,得到分离超平面
clf = svm.SVC(kernel="linear", C=1.0)
clf.fit(X, y)

# 利用加权类对模型进行拟合,得到分离的超平面
wclf = svm.SVC(kernel="linear", class_weight={1: 10})
wclf.fit(X, y)

plt.scatter(X[:, 0], X[:, 1], c=y, cmap=plt.cm.Paired, edgecolors="b")

#绘制两个分类器的决策函数
ax = plt.gca()
disp = DecisionBoundaryDisplay.from_estimator(
    clf,
    X,
    plot_method="contour",
    colors="b",
    levels=[0],
    alpha=0.5,
    linestyles=["-"],
    ax=ax,
)

wdisp = DecisionBoundaryDisplay.from_estimator(
    wclf,
    X,
    plot_method="contour",
    colors="r",
    levels=[0],
    alpha=0.5,
    linestyles=["-"],
    ax=ax,
)

plt.legend(
    [
        mlines.Line2D([], [], color="b", label="non weighted"),
        mlines.Line2D([], [], color="r", label="weighted"),
    ],
    ["non weighted", "weighted"],
    loc="upper right",
)
plt.show()

结果如图:

请添加图片描述
SVC在 fit 方法中实现了参数 class_weight 。它是一个 {class_label : value} 形式的字典,其中 value 是一个 > 0 的浮点数,它将类 class_label 的参数 C 设置为 C * value。

5 神经网络模型(监督)

5.1 多层感知器

​ 多层感知器(MLP)是一种学习函数的监督学习算法 𝑓 : 𝑅 𝑚 → 𝑅 𝑜 通过对数据集进行训练,其中 𝑚 是输入的维数, 𝑜 是输出的维数。给定一组特征 𝑋 = 𝑥1 , 𝑥2 ,… , 𝑥m 和一个目标 𝑦 ,它可以学习用于分类或回归的非线性函数逼近器。它与逻辑回归不同,在输入层和输出层之间可以有一个或多个非线性层,称为隐藏层。下图显示了具有标量输出的单隐藏层 MLP。

请添加图片描述
最左边的层称为输入层,由一组神经元组成 { 𝑥𝑖 | 𝑥1 , 𝑥2, … , 𝑥m } 代表输入特征。隐藏层中的每个神经元通过加权线性求和来变换前一层的值 𝑤1x1 + 𝑤2x2 + … + 𝑤m 𝑥m ,然后是非线性激活函数 𝑔 ( ⋅ ) : 𝑅 → 𝑅 - 就像双曲 tan 函数一样。输出层接收来自最后一个隐藏层的值并将其转换为输出值。 该模块包含公共属性coefs__和intercepts_。 coefs_是权重矩阵列表,其中索引处的权重矩阵 𝑖 表示层之间的权重 𝑖 和层 𝑖 + 1 。拦截_是偏差向量的列表,其中索引处的向量 𝑖 表示添加到层的偏差值 𝑖 + 1 。

多层感知器中的不同正则化
合成数据集上正则化参数“alpha”的不同值的比较。下图显示不同的 alpha 产生不同的决策函数。 Alpha 是正则化项(又名惩罚项)的参数,它通过限制权重的大小来对抗过度拟合。增加 alpha 可以通过鼓励较小的权重来修复高方差(过度拟合的迹象),从而导致决策边界图出现较小的曲率。同样,减少 alpha 可以通过鼓励更大的权重来修复高偏差(欠拟合的迹象),从而可能导致更复杂的决策边界。

请添加图片描述

6 总结

本周学习了监督学习中的几种分类算法,重点讨论了线性模型、核方法以及支持向量机、比较了多层感知器(MLP)在不同alpha参数下所产生的决策函数。以下是对各部分内容的小结:

  1. 线性模型

    • 普通最小二乘法:适用于线性回归问题,通过最小化预测值与实际值之间的残差平方和来估计模型参数。但在特征间存在多重共线性时,模型的稳定性会受到影响。
    • 岭回归:通过在最小化残差平方和的同时加入对模型参数的L2范数惩罚,提高了模型在多重共线性数据上的鲁棒性。岭回归能够减小系数估计的方差,代价是引入轻微的偏见。
    • RidgeClassifier:作为岭回归的延伸,将岭回归思想应用于分类问题,通过最小化惩罚的平方误差损失来进行分类,尤其适合于特征空间维度较高或存在相关性的场景。
  2. 线性和二次判别分析(LDA & QDA):经典分类技术,LDA假设协方差矩阵相同,适用于线性可分情况;QDA则放松这一假设,允许每个类别有不同的协方差矩阵,能捕捉更复杂的决策边界。

  3. 核岭回归:结合了岭回归与核技巧,允许在非线性可分数据上找到最优的线性决策边界。相比于支持向量回归(SVR),它在中等规模数据集上拟合更快,但预测速度较慢,因学到的模型非稀疏。

  4. 支持向量机(SVM):擅长处理高维数据和小样本情况,通过最大化边界间隔来构建分类器。支持使用不同核函数,但需谨慎选择正则化参数以避免过拟合,并且不直接提供概率预测。

  5. 多层感知器(MLP):一种神经网络模型,通过多层非线性变换实现复杂函数逼近,适用于分类和回归。正则化参数α的调整可以控制模型复杂度,进而影响决策边界的曲率,以应对过拟合或欠拟合问题。

Logo

助力广东及东莞地区开发者,代码托管、在线学习与竞赛、技术交流与分享、资源共享、职业发展,成为松山湖开发者首选的工作与学习平台

更多推荐