我发现了几个与此相关的问题,但没有人解决我的疑问。特别是,这个问题的两个答案让我更加困惑。
我在一组特征之上训练一个线性支持向量机,这些特征是由图像产生的卷积神经网络特征。例如,像往常一样,我有一个3500x4096的矩阵,行上有示例,列上有特征。
我想知道如何在馈送SVM之前正确标准化/规范化此矩阵。我看到两种方法(使用skLearning):
>
标准化特征。它导致具有0均值和酉std的特征。
X = sklearn.preprocessing.scale(X)
规范化特征。它产生具有酉范数的特征。
X = sklearn.preprocessing.normalize(X, axis=0)
标准化(76%的准确率)比标准化(68%的准确率)的结果明显更好。
这是一个完全依赖于数据集的选择吗?或者如何在这两种技术之间进行选择?
您应该根据数据的合理性来选择缩放方案。缩放有不同的方式,您将使用哪种方式取决于数据。每种方案都将不同特征的值纳入可比较的范围,但每种方案都保留了不同类型的信息(并在这样做时扭曲了其他信息)。即使有合理的解释解释为什么一些缩放方案更适合特定情况,但尝试这些不同的方案(就像您对标准缩放和规范化所做的那样)并使用效果更好的方案(只要您交叉验证或以其他方式确保您的性能测量是通用和准确的)并没有错。
Standard Scaler
这是sklearn.preprocessing.scale(X)
使用的。它假设您的特征是正态分布的(每个特征具有不同的均值和均方差),并对它们进行缩放,使得每个特征的高斯分布现在以0为中心,并且均方差为1。
它通过计算每个特征的平均值和stdev来实现这一点,然后将特征的每个实际值转换为z分数:这个值离平均值有多少stdev?z=(值平均值)/标准偏差
这通常效果很好,但如果正态性假设对您的情况完全错误,那么这可能不是最适合您的缩放方案。实际上,在许多情况下,如果正态性假设不成立,但分布有点接近,则此方案仍然非常有效。然而,如果数据完全远离正态性,例如高度倾斜、厚尾分布(如幂律),此方案将不会给出良好的结果。
Normalizer这就是sklearn。预处理。规格化(X,轴=0)使用。它将给定数据点的所有特征值视为一个向量,并通过将该向量除以其大小来规范化该向量。例如,假设您有3个功能。特定点的值为x1、x2、x3。如果使用默认的“l2”规范化,则将每个值除以sqrt(x1^2 x2^2 x3^2)。如果您使用的是“l1”规范化,则将每个值除以x1 x2 x3。这可以确保每个特征的值都在类似的范围内,因为每个特征向量都是单位向量。如果点的要素值较大,则幅值也较大,并且除以一个较大的数字。如果它们很小,则将它们除以一个小数字。
理由是,您可以将数据视为n维空间中的点,其中n是特征数。每个特征都是一个轴。标准化将每个点拉回到原点,使其距离原点仅1个单位。基本上你把空间压缩成单位超立方体。每个点的向量之间的角度(从原点到数据点)保持不变。
这经常用于文本数据,因为它有很多直观的意义:如果每个特征都是不同单词的计数,那么规范化基本上会将这些计数转换为频率(除以单词总数)。这是有道理的。如果使用规范化,两个向量之间的角度(称为余弦距离或相似性)将保持不变,并且该距离更接近意义距离,因为它对应于单词之间的频率比率,并且不受每个向量表示的文本长度的影响。
如果保存点之间的余弦距离类型的关系对您的数据更有意义,或者如果规范化对应于自然缩放(如采用频率而不是计数),则此方法更合适。
MinMaxScaler可以像sklearn一样使用这个。预处理。MinMaxScaler()。fit\u transform(X)。对于每个功能,这将查看最小值和最大值。这是此功能的范围。然后,它将缩小或拉伸到每个特征的相同范围(默认值为0到1)。
它通过将每个值转换为(value-feature\u min)/(feature\u max-feature\u min)来实现这一点。它基本上是在我撒谎的范围的多大百分比?请记住,范围仅由特征的最小值和最大值确定。尽管如此,所有的值可能都在10、11左右,只有一个异常值是900。没关系,你的范围是10到900。您可以看到,在某些情况下,这是可取的,而在其他情况下,这将是有问题的,具体取决于具体的问题和数据。
在StandardScaler可能无法正常工作的某些情况下,此方案的效果要好得多。例如,如果特征的标准偏差非常小,StandardScaler对不同特征的标准偏差之间的微小变化非常敏感,但MinMaxScaler非常健壮。此外,对于具有高度偏斜分布的特征,或者在每个特征都有大量零的稀疏情况下,使分布远离高斯分布,MinMaxScaler是更好的选择。
回顾下我们前面SVM分类模型中,我们的目标函数是让$$frac{1}{2}||w||22$$最小,同时让各个训练集中的点尽量远离自己类别一边的的支持向量,即$$y_i(w bullet phi(x_i )+ b) geq 1$$。如果是加入一个松弛变量$$xi_i geq 0$$,则目标函数是$$frac{1}{2}||w||_22 +Csumlimits{i=1}^{m}xi_i$$,对应的约束
问题内容: 因此,我对此有疑问,一直在寻找答案。所以问题是我何时使用 这之后,我将训练和测试模型(,作为特征,如标签),并得到一些准确度得分。现在我的疑问是,当我必须预测新数据集的标签时会发生什么。说, 因为当我规范化列时,和的值将根据新数据而不是将在其上训练模型的数据来更改。因此,现在将是下面的数据准备步骤之后的数据。 的价值和将关于改变和价值。的数据准备是关于的。 有关不同数字的数据准备如何有
基本上问题来自codeforces(1485A)。问题是,当我给一些大的输入,如50000000a和5b时,这会给我带来分段错误,而代码对较小的输入很好。请帮我解决。
本文向大家介绍SVM的损失函数相关面试题,主要包含被问及SVM的损失函数时的应答技巧和注意事项,需要的朋友参考一下 参考回答:
本文向大家介绍SVM所有核函数的了解应用,SVM的损失函数相关面试题,主要包含被问及SVM所有核函数的了解应用,SVM的损失函数时的应答技巧和注意事项,需要的朋友参考一下 参考回答: SVM核函数: 1 核函数本质 核函数的本质可以概括为如下三点: 1)实际应用中,常常遇到线性不可分的情况。针对这种情况,常用做法是把样例特征映射到高维空间中,转化为线性可分问题。 2)将样例特征映射到高维空间,可能
本文向大家介绍SVM核函数的选择相关面试题,主要包含被问及SVM核函数的选择时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 当样本的特征很多且维数很高时可考虑用SVM的线性核函数。当样本的数量较多,特征较少时,一般手动进行特征的组合再使用SVM的线性核函数。当样本维度不高且数量较少时,且不知道该用什么核函数时一般优先使用高斯核函数,因为高斯核函数为一种局部性较强的核函数,无论对于大样本还是