♂️ 个人主页: @AI_magician
主页地址: 作者简介:CSDN内容合伙人,全栈领域优质创作者。
景愿:旨在于能和更多的热爱计算机的伙伴一起成长!!
♂️声明:本人目前大学就读于大二,研究兴趣方向人工智能&硬件(虽然硬件还没开始玩,但一直很感兴趣!希望大佬带带)
该文章收录专栏
[✨— 《深入解析机器学习:从原理到应用的全面指南》 —✨]
在使用梯度下降算法进行模型训练时,对输入特征进行比例缩放(或归一化)有以下几个原因:
加速收敛:梯度下降的目标是找到损失函数最小化的参数值,而不同特征可能具有不同的尺度和范围。如果某些特征具有较大的值范围,那么**其相关权重更新也会更大,这可能导致算法收敛过程变得非常缓慢甚至无法收敛。**通过对输入特征进行比例缩放,可以使各个特征都处于相似的尺度范围内,从而加快算法收敛速度。
防止数值溢出:在计算过程中,**涉及到较大或较小数值时容易发生数值溢出问题。**通过将输入特征进行比例缩放,可以有效地避免这种情况的发生。
提高模型性能:某些机器学习模型(如支持向量机、K近邻等)对输入数据中不同尺度和范围非常敏感。当存在明显差异的尺度时,在距离计算、权重分配等方面可能会产生偏差,并且影响模型性能。通过比例缩放输入特征,可以确保模型能够更好地利用每个特征的信息,提高模型性能。
在线性回归中,尤其是多变量回归模型,由于各个的数据之间量化纲位不同,如果说两个参数尺度范围分别是是【0~1000,0 ~5】或者【-0.00004 ~ 0.00002,10 ~ 30】, 那么在使用梯度下降算法时,他们的等高线是一个又窄又高的等高线,如下图:
因为一个他们量化纲位不同会出现 (1,299),(3,800) 这种特征实例,那么等高线就会又窄又高,在梯度下降算法中,参数更新就会如上图左右震荡(权重更新一点就会导致输出变大,对大尺度的特征更加敏感,不利于学习)如果等高线如下图,参数更新就能更快收敛与更新了
如下图:代价函数(如MSE: 回归模型的预测值和实际值的差的平方和)的3D图,就像下山一样,为了达到局部最优点或全局最优点,作为下山者,你肯定希望地形比较平缓,比较清楚的知道往哪里走能够最快下山,而如果这个山又陡又窄,那下山者是不是下山肯定速度慢很多(更新中不能较快收敛,左右震荡),往哪里都是下降,不能准确找到方向。
理想的代价函数
但实际往往都是下图的情况 (有许多局部最优)
数据标准化和归一化是常见的数据预处理技术,它们在以下情况下使用:
特征缩放:当特征的取值范围差异较大时,可以使用数据标准化或归一化来将其缩放到相似的范围。这有助于避免某些特征对模型训练产生过大影响。
收敛加速:在某些机器学习算法(如梯度下降)中,如果不进行数据标准化或归一化,则可能需要更多迭代次数才能收敛到最优解。通过使特征具有类似的尺度,可以提高算法收敛速度(不再左右震荡,权重更新性价比相同,特征之前模型一视同仁)并加快训练过程。
防止数值溢出:当输入数据包含非常大或非常小的值时,计算中可能会发生数值溢出或舍入误差。通过将数据缩放到合理范围内,可以避免这些问题,并提高计算稳定性。
算法要求:某些机器学习算法(如K均值聚类、支持向量机等)对输入数据进行了假设,例如假设样本服从正态分布。(机器学习算法最重要的概率统计,如果尺度和范围不同,显然很难拟合分布)在这种情况下,对于满足这些假设的算法而言,数据标准化或归一化是必要的预处理步骤。
尽管数据标准化和归一化在许多情况下都很有用,但并不是所有算法都需要进行这些操作。例如,决策树和随机森林等基于树的模型通常不受特征缩放影响(这种是基于不同类别的信息增益(信息熵)或者基尼指数(类别纯度)确定阈值,而图像识别等深度学习任务则通常对原始输入进行归一化处理。
在实践中,可以使用以下方法来进行数据标准化和归一化:
请注意,在应用这些技术时,应该先分割出训练集和测试集,并且仅使用训练集上的统计信息来对整个数据集进行转换。然后将相同的变换应用于测试集以确保结果的可靠性。
在选择数据标准化(Standardization)和数据归一化(Normalization)之前,需要根据具体情况来评估它们的优劣。
数据标准化的优点:
数据归一化的优点:
因此,在选择数据标准化还是数据归一化时可以考虑以下因素:
总而言之,没有单一正确答案。选择数据标准化还是归一化取决于你所面临问题和具体需求,并且可能需要进行试验和评估以确定最佳方案。(实践是证明真理的唯一标准!!! —— 伽利略)
在深度学习上,Batch Normalization(批标准化)可以在某种程度上替代数据归一化和标准化。
Batch Normalization 是一种用于加速深度神经网络收敛、防止梯度消失/爆炸等问题的技术。它通过对每个小批量样本进行均值和方差的归一化来规范输入数据,并将其缩放和平移以恢复数据分布。
Batch Normalization 的优点包括:
因此,在使用深度神经网络时,可以考虑直接使用 Batch Norm 进行特征处理而不需要显式地对输入进行标准化或归一化。但请注意以下事项:
总结而言,Batch Normalization 在深度神经网络中是非常有用和有效的技术,并且可以部分替代传统的数据归一化和标准化方法。但具体选择还要根据实际情况和实验结果来确定。
对于机器学习模型的训练,通常需要将数据集划分为训练集和测试集。而验证集是用于模型调优和选择最佳超参数的辅助数据集。
下面是对训练集、验证集和测试集的解释及其区别:
训练集(Training Set):训练集是用于训练机器学习模型的数据集。模型通过对训练集的样本进行学习和参数调整,以最小化训练集上的损失函数。训练集通常占整个数据集的大部分比例。
验证集(Validation Set):验证集是用于模型调优和选择最佳超参数的数据集(如果没有测试集,对着验证集炼丹反而有可能拟合验证集)。在训练过程中,使用验证集评估模型在未见过的数据上的性能,并进行模型参数的调整。通过在验证集上的表现,可以选择最佳的模型配置和超参数,以获得更好的泛化能力。
测试集(Test Set):测试集是用于评估训练好的模型的性能和泛化能力的数据集。测试集是模型未曾见过的数据,用于模拟模型在实际应用中遇到的新样本。通过测试集上的表现,可以得出对模型的客观评价。
区别:
重要的一点是,验证集和测试集都是在训练阶段以外的数据上进行评估,以避免模型在训练数据上过度拟合。它们的目的是验证和衡量模型的性能,但验证集用于模型调优,而测试集则用于最终评估模型的性能。
到这里,如果还有什么疑问
欢迎私信博主问题哦,博主会尽自己能力为你解答疑惑的!
如果对你有帮助,你的赞是对博主最大的支持!!