特征(feature):在机器学习中,特征 是指从数据中提取的用于描述样本的属性或信息。
相关特征(relevant feature):对当前学习任务有用的属性称为 “相关特征”。
无关特征(inrelevant feature):对当前学习任务无用的属性称为 “无关特征”。
冗余特征(redundant feature):冗余特征是指在机器学习问题中,某些特征提供的信息与其他特征已经提供的信息高度相似或重复,对于模型的性能提升很小或没有贡献。这样的特征不会为模型带来额外的信息,却可能增加模型的复杂性,降低模型的可解释性,甚至在某些情况下可能导致过拟合。
数据预处理(data preprocessing):机器学习的 数据预处理过程 是指在应用机器学习算法之前对原始数据进行清洗、转换和整理的一系列步骤。数据预处理是确保数据质量、提高模型性能以及促进机器学习算法有效学习的关键步骤。
特征选择(feature selection):特征选择是机器学习中的一个重要步骤(特征选择是一个重要的 “数据预处理” 过程),其目的是从原始特征集中选择最重要、最相关的特征,以提高模型性能、减少过拟合风险、降低计算成本,并增加模型的解释性。特征选择可以帮助简化模型并提高其泛化能力,同时减少不必要的计算负担。
子集搜索(subset search):特征选择中的子集搜索 是一种通过穷举或启发式方法探索不同特征子集的技术。其目标是找到最优的特征子集,以提高模型性能、降低维度并减少计算成本。子集搜索方法有助于在给定问题中找到对模型性能最有影响的特征组合。
子集评价(subset evaluation):在特征选择过程中,子集评估 是指对不同的特征子集进行评估,以确定其对模型性能的贡献或重要性。子集评估的目标是找到对特定任务最有用的特征组合,从而提高模型的性能、减少过拟合风险,并可能降低计算成本。
在西瓜书中,主要提到的两方面原因:降低数据维度,减轻维数灾难问题;去除不相关特征,降低学习难度。
进行特征选择有几个重要的原因,它可以对机器学习模型的性能和训练效果产生积极的影响:
提高模型性能: 通过选择最相关、最具信息量的特征,可以提高模型在任务上的性能。不相关或冗余的特征可能会引入噪声,降低模型的准确性。
降低维度: 当特征数量很大时,模型训练和推理的计算成本可能会显著增加。通过选择重要的特征,可以降低数据维度,提高模型的运行效率,减少计算资源的需求。
防止过拟合: 过多的特征容易导致模型过度适应训练数据,而在新数据上表现不佳。通过特征选择,可以降低模型复杂度,减少过拟合的风险,提高模型的泛化能力。
提高模型解释性: 较少的特征集合通常更易于解释。选择最相关的特征有助于理解模型对问题的关注点,使得模型的输出更具解释性。
加快训练速度: 在大规模数据集上,选择合适的特征可以显著减小训练时间。训练模型所需的数据量和计算成本会随着特征数量的减少而减小。
处理多重共线性: 当特征之间存在高度相关性时,模型可能对输入数据中的微小变化过于敏感。通过选择一组相关性较小的特征,可以改善模型的稳定性。
总体而言,特征选择是优化机器学习流程、提高模型效能的关键步骤。然而,需要根据具体问题和数据的特征来决定是否进行特征选择,因为在某些情况下,强大的机器学习模型可能能够自动学习并利用所有特征。
西瓜书中特征选择部分提到,此过程涉及两个关键环节:如何根据评估结果获取下一个候选子集?如何评价候选特征子集的好坏?
特征选择涉及到多个环节,但其中两个关键环节是特别重要的,它们分别是:
子集搜索(subset search): 在这个环节中,我们基于特征评估的结果选择一组最重要的特征子集。特征选择的方法可以分为过滤方法、包装方法和嵌入方法。过滤方法在特征评估后独立地选择特征;包装方法通过使用模型性能来评估特征子集;嵌入方法将特征选择嵌入到模型的训练过程中,通过模型自身的指标来评估特征的重要性。
子集评价(subset evaluation): 在这个环节中,我们对子集中每个特征进行评估,以确定其对模型性能的贡献。这通常涉及到使用统计学方法、信息论度量或者模型训练中的内部指标来衡量特征的重要性。特征评估的目标是量化每个特征的贡献,使得我们能够判断哪些特征对于解决特定任务是最有用的。
这两个环节是相互关联的,特征评估提供了每个特征的贡献度,而特征选择则根据这些贡献度选择出最具有代表性的特征子集。在进行特征选择时,需要权衡模型性能和计算成本,以确保选择的特征子集既能提高模型的预测性能,又能在计算上具有可行性。
这两个关键环节通常需要与交叉验证等技术结合使用,以确保在不同的数据子集上对特征的评估和选择是具有一定泛化性能的。整个特征选择的过程需要根据具体问题、数据集的特点以及所选择的模型进行调整和优化。
常见的特征选择方法大致可分为三类:
特征选择方法的实际应用:
在代码实践中,比如我们常用到的 sklearn 库,完全感知不到特征选择方法配置。这是因为 sklearn 库已经提供的默认的方法、用户无特许需求采用默认方法即可。
现在举个例子说明一下特征选择方法如何配置:
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
from sklearn.feature_selection import RFE
from sklearn.metrics import accuracy_score
# 加载示例数据集(鸢尾花数据集)
data = load_iris()
X = data.data
y = data.target
# 划分数据集为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 创建支持向量机分类器
svm_classifier = SVC(kernel='linear')
# 创建递归特征消除对象,指定使用的分类器和要保留的特征数
rfe = RFE(estimator=svm_classifier, n_features_to_select=2)
# 使用递归特征消除进行特征选择
X_train_selected = rfe.fit_transform(X_train, y_train)
X_test_selected = rfe.transform(X_test)
# 训练模型
svm_classifier.fit(X_train_selected, y_train)
# 在测试集上进行预测
y_pred = svm_classifier.predict(X_test_selected)
# 评估模型性能
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy:", accuracy)
在这个例子中,我们使用了 SVC
作为支持向量机分类器,并使用 RFE
作为特征选择方法。通过创建 RFE
对象时,我们传递了estimator
参数,指定了要使用的分类器(SVC)
,以及 n_features_to_select
参数,指定要保留的特征数。然后,我们使用 fit_transform
方法对训练数据进行特征选择,将原始的特征矩阵转换为选定的特征子集。
过滤式方法先对数据集进行特征选择,然后再训练学习器,特征选择过程与后续学习器无关。这相当于先用特征选择过程对初始特征进行 “过滤”,再用过滤后的特征来训练模型。
换而言之,过滤式特征选择是一种在特征选择过程中独立于具体机器学习模型的方法。
过滤式选择方法是一种在特征选择过程中先对特征进行评估,然后再选择子集的方法。这种方法有其优点和缺点,以下是它们的一些主要特点:
优点:
计算效率高: 过滤式方法通常计算效率较高,因为它们独立于具体的机器学习模型,可以在整个数据集上进行评估,而无需多次训练模型。
简单直观: 过滤式方法的实现通常较为简单,易于理解和使用。它们不涉及复杂的模型训练过程,更适用于初步的特征筛选和数据探索。
能处理高维数据: 过滤式方法对于高维数据的处理效果较好,因为它们不需要多次训练模型,可以更轻松地处理大量特征。
特征独立性: 过滤式方法通常假设特征之间是相互独立的,这在某些情况下可以成为优势,尤其是特征之间存在较低相关性时。
缺点:
忽略特征关联性: 过滤式方法通常忽略特征之间的关联性,因为它们独立地对每个特征进行评估。在某些情况下,忽略特征关联性可能导致丢失有用的信息。
无法捕捉特征组合效应: 过滤式方法一般不能捕捉特征组合对模型性能的共同影响,因为它们只关注单个特征的重要性。
不适用于嵌套特征选择: 过滤式方法通常不适用于嵌套特征选择,即在不同的训练阶段选择不同的特征。这对于某些问题可能是必需的。
可能导致信息损失: 过滤式方法在选择特征时,可能直接舍弃了一些对于模型而言有用的信息,因为它们只关注某种度量而不是最终模型的性能。
总体而言,过滤式选择方法适用于简单的特征选择任务和初步的数据探索,但在一些复杂的情况下可能不足以充分发挥特征的潜在价值。选择合适的特征选择方法取决于问题的特点和需求。
与过滤式特征选择不考虑后续学习器不同,包裹式特征选择直接把最终将要使用的学习器的性能作为特征子集的评价准则。换言之,包裹式特征选择的目的就是为给学习器选择最有利于性能、“量身定做” 的特征子集。
LVW 算法 在拉斯维加斯方法(Las Vegas method)框架下使用随机策略来进行子集搜索 ,并以最终分类器的误差为特征子集评价准则。
算法描述如下所示:
包裹式特征选择是一种在特征选择过程中直接使用模型性能进行评估的方法。这种方法有其优点和缺点,以下是它们的一些主要特点:
优点:
全面性: 包裹式方法通过使用实际模型的性能来评估特征子集,能够更全面地考虑特征之间的相互作用。这有助于捕捉特征组合对模型性能的共同影响。
模型相关性: 由于包裹式方法直接使用要应用的模型来评估特征子集,因此它们更关注于模型性能的直接提升,可以更好地适应特定的学习任务。
适用于复杂关系: 在特征之间存在复杂关系时,包裹式方法可能更能捕获这些关系,因为它们考虑了特征的组合效应。
自适应性: 包裹式方法通常是自适应的,可以根据具体的学习任务选择最相关的特征子集,而不依赖于先验知识。
缺点:
计算成本高: 包裹式方法需要多次训练模型,每次训练都涉及到整个特征子集。这导致计算成本相对较高,尤其是在特征数量较多的情况下。
可能引入过拟合: 由于包裹式方法直接使用模型性能来评估特征子集,存在过拟合的风险。在训练集上过度优化可能导致在新数据上的性能下降。
不适用于大规模数据: 由于包裹式方法的计算成本较高,不适用于大规模数据集,因为模型的训练和评估可能变得非常耗时。
特征间相互影响: 包裹式方法可能会受到特征间相互影响的影响,特别是在特征之间存在共线性时。
总而言之,包裹式特征选择方法在特定场景下可以提供更准确的特征子集选择,但其计算成本和可能引入过拟合的风险需要仔细权衡。选择合适的特征选择方法通常取决于问题的特点、数据的性质以及可用的计算资源。
嵌入式特征选择 是将特征选择过程与学习器训练过程融为一体,两者在同一个优化过程中完成,即在学习器训练过程中自动地进行了特征选择。
嵌入式方法的主要思想 是在模型训练的过程中,通过正则化(regularization)或其他策略,使得模型对某些特征的权重趋向于零,从而实现特征选择。这样,模型在学习过程中自动地考虑了特征的重要性,保留对任务最有用的特征。
L1正则化(Lasso Regression): 在线性回归中,使用L1正则化项(L1 penalty)会导致某些特征的权重趋向于零,从而实现特征选择。这被广泛用于稀疏特征选择。
决策树的特征重要性: 决策树和基于树的模型(如随机森林、梯度提升树)可以提供每个特征的重要性分数。这些分数可以用于识别最具影响力的特征。
正则化的线性模型: 在线性模型中,使用正则化项(如L1或L2正则化)可以控制模型的复杂性,并对特征进行选择。
神经网络中的Dropout: 在神经网络中,Dropout 是一种正则化技术,通过在训练时随机丢弃神经元来减小模型的过拟合风险。这同时也影响了模型对特征的使用,有助于嵌入式特征选择。
L1正则化(Lasso Regression)和L2正则化(Ridge Regression)是线性模型中常用的两种正则化技术,用于控制模型的复杂性并防止过拟合。它们在损失函数中引入额外的惩罚项,以限制模型参数的大小。
L1正则化(Lasso Regression):
损失函数: L1正则化的损失函数是原始的线性回归损失函数(最小二乘损失)与参数的绝对值之和的乘积。对于线性回归问题,L1正则化的损失函数可以表示为:
L1?Loss
=
Least?Squares?Loss
+
λ
∑
i
=
1
n
∣
w
i
∣
\text{L1 Loss} = \text{Least Squares Loss} + \lambda \sum_{i=1}^{n} |w_i|
L1?Loss=Least?Squares?Loss+λ∑i=1n?∣wi?∣
其中,
λ
\lambda
λ 是正则化强度,
w
i
w_i
wi? 是模型的权重。
特点: L1正则化倾向于将某些权重压缩为零,因此可以实现稀疏特征选择。在模型训练过程中,某些特征的权重会被明确地设为零,从而实现自动特征选择。
L2正则化(Ridge Regression):
损失函数: L2正则化的损失函数是原始的线性回归损失函数与参数的平方和的乘积。对于线性回归问题,L2正则化的损失函数可以表示为:
L2?Loss
=
Least?Squares?Loss
+
λ
∑
i
=
1
n
w
i
2
\text{L2 Loss} = \text{Least Squares Loss} + \lambda \sum_{i=1}^{n} w_i^2
L2?Loss=Least?Squares?Loss+λ∑i=1n?wi2?
其中,
λ
\lambda
λ 是正则化强度,
w
i
w_i
wi? 是模型的权重。
特点: L2 正则化通过惩罚权重的平方和,倾向于使所有的权重都趋向于较小的值,但不会明确地将某些权重设为零。相比于L1正则化,L2正则化对所有特征都有影响,但不具备稀疏性质。
通常,模型的正则化项通过在损失函数中添加一个调节系数 λ \lambda λ来控制。增大 λ \lambda λ的值将增强正则化的影响,从而限制模型的复杂性。在实际应用中,选择合适的正则化项(L1、L2或它们的组合)取决于问题的性质以及数据的特点。
L1范数和L2范数是矩阵或向量的两种常见的范数(norm)表示方式,它们在数学和机器学习中经常被使用。
L1范数(L1 norm):
L1范数是指向量中各个元素绝对值之和。对于一个
n
n
n 维向量
x
x
x,其L1范数表示为:
∥ x ∥ 1 = ∑ i = 1 n ∣ x i ∣ \|x\|_1 = \sum_{i=1}^{n} |x_i| ∥x∥1?=i=1∑n?∣xi?∣
在机器学习中,L1范数常用于产生稀疏解,即让一些权重变为零,从而实现特征选择。
L2范数(L2 norm):
L2范数是指向量中各个元素的平方和的平方根。对于一个n维向量x,其L2范数表示为:
∥
x
∥
2
=
∑
i
=
1
n
x
i
2
\|x\|_2 = \sqrt{\sum_{i=1}^{n} x_i^2}
∥x∥2?=i=1∑n?xi2??
L2范数在机器学习中经常用于正则化项,有助于防止过拟合,使得模型的权重保持较小的值。
总的来说,L1范数和L2范数都是用来度量向量的大小的方法,它们在不同的应用场景中有不同的作用。
正则化通常涉及在模型的损失函数中引入一些关于模型参数的额外约束,这些约束有助于防止模型过度拟合训练数据。而使用范数作为正则化的一种手段是很常见的。
两种常见的范数在正则化中被广泛使用,分别是L1范数和L2范数。
L1正则化: 在损失函数中增加模型参数的L1范数,通常表示为 λ ∥ w ∥ 1 \lambda \|w\|_1 λ∥w∥1?,其中 w w w 是模型的权重参数, ∥ w ∥ 1 \|w\|_1 ∥w∥1? 是这些权重的 L 1 L1 L1 范数,而 λ \lambda λ 是正则化强度的超参数。 L 1 L1 L1 正则化有助于推动一些权重变为零,实现稀疏性,因此它在特征选择方面很有用。
L2正则化: 在损失函数中增加模型参数的 L 2 L2 L2 范数的平方,通常表示为 λ 2 ∥ w ∥ 2 2 \frac{\lambda}{2} \|w\|_2^2 2λ?∥w∥22?,其中 w w w 是模型的权重参数, ∥ w ∥ 2 \|w\|_2 ∥w∥2? 是这些权重的 L 2 L2 L2 范数。 L 2 L2 L2 正则化有助于限制权重的大小,防止模型过度拟合训练数据。
嵌入式特征选择是一种在机器学习模型训练过程中自动选择特征的方法,它将特征选择与模型训练相结合。这种方法直接从数据中学习特征的权重或重要性,并据此选择最相关的特征。嵌入式特征选择的优缺点如下:
自动选择特征: 嵌入式特征选择不需要额外的特征工程,模型在训练过程中会自动学习特征的权重或重要性,从而减轻了手动选择特征的负担。
综合考虑特征与模型关系: 嵌入式特征选择直接结合了特征选择和模型训练,通过考虑特征对模型的贡献,可以更全面地了解特征与目标之间的关系。
防止过拟合: 通过对特征引入正则化项(如L1正则化),嵌入式特征选择有助于防止模型过拟合训练数据,提高模型的泛化能力。
降低维度: 选择重要特征有助于降低数据的维度,提高模型的训练和预测效率。
可能忽略特征间的相关性: 在某些情况下,嵌入式特征选择可能会忽略特征之间的相关性,而只考虑其对目标的个体贡献。这可能导致一些相关但被认为不够重要的特征被忽略。
无法解决特征提取问题: 对于非线性关系或需要特征提取的问题,嵌入式特征选择可能不足够灵活,因为它主要关注特征的权重。
对模型的选择敏感: 不同的机器学习模型对于特征选择的敏感程度不同。某些模型可能对特征选择更加敏感,而某些模型可能对所有特征都保持一定程度的权重。
总而言之,嵌入式特征选择是一种方便且有效的特征选择方法,但在具体应用中需要根据问题的性质和数据的特点权衡其优缺点。在某些情况下,结合其他特征选择方法或特征工程技术可能更为适用。
在机器学习中,特征的稀疏性是指 当特征矩阵中的许多列与当前学习任务无关,或特征矩阵中存在很多零元素,但这些零元素并不是以整列或整行形式存在,则称该特征矩阵具有稀疏性。
计算效率: 稀疏矩阵具有大量零元素,因此在计算中可以使用稀疏矩阵的优化算法,提高计算效率。
存储效率: 稀疏数据的存储通常比稠密数据更为高效,因为可以只存储非零元素的索引和值。
维度灾难的缓解: 在高维空间中,特征的稀疏性有助于缓解维度灾难问题,即避免在高维空间中过度拟合数据。
模型解释性: 稀疏特征使得模型更容易解释,因为可以更清晰地了解到底哪些特征对预测起到了作用。
特征选择: 可以使用特征选择方法,如嵌入式特征选择(L1正则化)来促使模型学得稀疏权重,从而选择重要的特征。
稀疏矩阵表示: 使用稀疏矩阵表示来存储和处理稀疏数据,以提高计算和存储效率。
降维技术: 使用降维技术,如主成分分析(PCA)或t-SNE,来减少数据的维度,从而减轻高维稀疏数据带来的问题。
稀疏表示 是指在表示数据时,只有很少一部分元素是非零或非空的,而其他大部分元素都是零或空的一种表示方法。这种表示方法通常用于处理高维数据,其中大多数元素都是零。相对于稠密表示,稀疏表示能够更有效地存储和处理这样的数据。
为普通稠密表达的样本找到合适的字典,将样本转化为合适的稀疏表示形式,从而使学习任务得以简化,模型复杂度得以降低,通常称为 “字典学习” 或 “稀疏编码”。
字典学习 更侧重于学得字典的过程,而 “稀疏编码” 则更侧重于对样本进行稀疏表达的过程。
压缩感知(Compressed Sensing,CS) 是一种信号处理理论,它表明一个信号,例如图像或音频,可以用远远少于其传统采样率的数据进行准确恢复。传统上,为了准确地重建信号,我们需要对信号进行高密度采样,但压缩感知的核心思想是在采样时可以以远远低于传统方法的采样率获得信息。
压缩感知的关键原理 是信号通常是“稀疏”的,即在某种表示下,大多数元素都是零或接近零。通过在非常少的测量点上采样这种稀疏信号,可以使用数学技术来恢复信号,而不需要完整的采样。这使得在采集、传输和存储信号时可以大大减少所需的数据量。
在机器学习中,特征选择 是一个关键问题,因为不是所有的特征都对学习任务都是有用的。压缩感知的稀疏性质 使其适用于特征选择问题,可以通过较少的特征子集来表示和学习数据,从而提高模型的解释性和泛化能力。
在机器学习中,要利用压缩感知的思想,通常需要使用一些特定的算法和技术来实现数据的压缩、传输和重建。以下是一般步骤和一些常见的方法:
稀疏表示: 首先,确保数据在某种表示下是稀疏的。这可能涉及到对数据进行变换,使得在某个基础下数据的表示更为稀疏。常见的变换包括离散余弦变换(DCT)、小波变换等。
测量: 在压缩感知中,通常并不对数据进行传统的高密度采样,而是采用远远低于传统采样率的测量。这些测量可以通过一些线性变换(例如随机矩阵)来实现。这一步骤模拟了从高维空间到低维空间的投影。
稀疏恢复算法: 选择一种稀疏恢复算法,用于从测量的稀疏数据中重建原始数据。常见的算法包括基于迭代的方法,如压缩感知匹配追踪(CoSaMP)和迭代硬阈值算法(IST)等。
迭代优化: 在某些情况下,采用迭代优化的方法,通过迭代调整和优化重建的结果,以获得更好的稀疏表示和重建质量。
应用于特定任务: 最后,将压缩感知技术应用于特定的机器学习任务。例如,在图像分类中,可以在压缩域上对图像进行分类;在信号处理中,可以在压缩域上对信号进行分析。
需要注意的是,压缩感知并不是适用于所有类型的数据和任务的一种通用方法,而是在满足一些先验条件的情况下才能够取得好的效果。因此,在应用压缩感知技术时,需要仔细考虑数据的特性和任务的要求。
前面章节介绍了不少算法的数学源码、基本过程等,而第十章、第十一章看起来 “与算法无关”,但实际上我认为这个应该是前面章节的基础,可以划分为 “算法理论基础”、“特征工程” 类的工作。
与西瓜书原文相比,此处去除了相关背景的介绍、数学原理的推导等,只保留了最外层的、容易总结的部分;此外,也查询资料添加了一些相关的知识点,都是浅层的、可能被问到、或者以后可能经常遇到的概念。
Smileyan
2024.01.16 0:03