Ien*_*ken 17 python statistics machine-learning svm scikit-learn
我发现了几个与此相关的问题,但没有人解决我的疑虑.特别是,这个问题的两个答案让我更加困惑.
我正在基于一组特征训练线性SVM - 由图像产生的卷积神经网络特征.例如,我有一个3500x4096 X矩阵,像往常一样在列上的行和特征上有例子.
我想知道在输入SVM之前如何正确地标准化/规范化这个矩阵.我看到两种方式(使用sklearn):
标准化功能.它导致具有0均值和单一标准的特征.
X = sklearn.preprocessing.scale(X)
Run Code Online (Sandbox Code Playgroud)规范化功能.它导致具有单一规范的特征.
X = sklearn.preprocessing.normalize(X, axis=0)
Run Code Online (Sandbox Code Playgroud)归一化(76%准确度)比标准化(68%准确度)明显更好.
它是完全依赖数据集的选择吗?或者如何在这两种技术之间做出选择?
Irm*_*rer 42
您应该根据对数据有意义的选择缩放方案.有不同的缩放方式,您将使用哪种方式取决于数据.每个方案都将不同特征的值带入可比较的范围,但每个方案都会保留不同类型的信息(并扭曲其他特征).尽管有一些合理的解释可以解释为什么某些缩放方案更适合特定情况,但是尝试这些不同的方法(就像你使用标准缩放和规范化那样)并使用效果更好的方法(没有问题)当您交叉验证或以其他方式确保您的绩效评估是一般和准确的).
StandardScaler
这是sklearn.preprocessing.scale(X)用途.它假设您的要素是正态分布的(每个要素具有不同的均值和标准差),并对它们进行缩放,使得每个要素的高斯分布现在以0为中心,其标准差为1.
它通过计算每个要素的平均值和stdev来实现,然后将要素的每个实际值转换为z得分:距离平均值多少stdev是这个值?Z =(值均值)/ STDEV
这通常很有效,但如果您的情况的正态性假设完全错误,那么这可能不是您的最佳扩展方案.实际上,在常态假设不成立的许多情况下,但是分布有些接近,这种方案仍然运作良好.但是,如果数据完全远离常态,例如高度偏斜的胖尾分布(如幂律),则该方案不会产生良好的结果.
Normalizer
这是什么sklearn.preprocessing.normalize(X, axis=0)用途.它将给定数据点的所有特征值作为矢量进行查看,并通过将其除以其大小来对该矢量进行标准化.例如,假设您有3个功能.特定点的值是[x1, x2, x3].如果您使用的是默认'l2'规范化,则将每个值除以sqrt(x1^2 + x2^2 + x3^2).如果您正在使用'l1'标准化,则将每个标准化除以x1+x2+x3.这确保了每个特征的值在相似的范围内,因为每个特征向量是单位向量.如果某个点的特征值很大,那么幅度也会很大,并且除以大数.如果它们很小,则将它们除以一小部分.
原因是您可以将数据视为n维空间中的点,其中n是要素的数量.每个特征都是一个轴.归一化将每个点拉回原点,使其距离原点仅1个单位.基本上你将空间折叠成单元超立方体.每个点(从原点到数据点)的矢量之间的角度保持不变.
这与文本数据一起使用很多,因为它在很大程度上是直观的:如果每个特征都是不同单词的计数,则'l1'归一化基本上将这些计数转换为频率(您将除以单词的总数).这是有道理的.如果你正在使用'l2'归一化,当你对两者进行归一化时,两个向量之间的角度(这称为余弦距离或相似度)将保持不变,并且该距离更接近于意义距离,因为它对应于单词之间的频率比率.不受每个向量代表的文本长度的影响.
如果保留点之间的余弦距离类型的关系是对数据更有意义的,或者如果归一化对应于自然缩放(如采用频率而不是计数),那么这个更合适.
MinMaxScaler
你可以使用这个sklearn.preprocessing.MinMaxScaler().fit_transform(X).对于每个功能,这将查看最小值和最大值.这是此功能的范围.然后,它会将此缩小或拉伸到每个要素的相同范围(默认值为0到1).
它通过将每个值转换为来完成此操作(value-feature_min)/(feature_max - feature_min).它基本上是我所处的范围的百分比?请记住,范围仅由特征的最小值和最大值确定.对于所有这些关注,所有值可能会在10,11左右左右悬挂,并且有一个异常值为900.无论如何,您的范围是10到900.您可以看到在某些情况下这是可取的,并且在其他情况下,这将是有问题的,具体取决于具体的问题和数据.
在StandardScaler可能无法正常工作的某些情况下,此方案的效果会更好.例如,如果功能的标准偏差非常小,则StandardScaler对不同功能的标准偏差之间的微小变化非常敏感,但MinMaxScaler非常强大.此外,对于具有高度偏斜分布的特征,或者每个特征具有大量零点以使分布远离高斯分布的稀疏情况,MinMaxScaler是更好的选择.
| 归档时间: |
|
| 查看次数: |
7477 次 |
| 最近记录: |