使用Python对数据进行归一化规格化

36 sec read

数据归一化问题是数据挖掘中特征向量表达时的重要问题,当不同的特征成列在一起的时候,由于特征本身表达方式的原因而导致在绝对数值上的小数据被大数据“吃掉”的情况,这个时候我们需要做的就是对抽取出来的features vector进行归一化处理,以保证每个特征被分类器平等对待。先前的文章中已经介绍了几种常见的数据归一化的方法,这里对主要整理了如何将这些公式和方法转化程Python代码。

min-max标准化(Min-Max Normalization)

也称为离差标准化,是对原始数据的线性变换,使结果值映射到[0 – 1]之间。转换函数如下:

    \[{x}_{normalization}=\frac{x-Min}{Max-Min}\]

x_min表示样本数据的最小值,x_max表示样本数据的最大值。

Python代码实现:

或:

找大小的方法除了使用list自带的max和min,推荐使用np.max和np.min,因为起功能更加强大。

参考链接:https://stackoverflow.com/questions/33569668/numpy-max-vs-amax-vs-maximum

如果想要将数据映射到[-1,1],则将公式换成:

    \[{x}_{normalization}=\frac{x-x_{mean}}{Max-Min}\]

x_mean 表示平均值。

Python代码实现:

该标准化方法有一个缺点就是,如果数据中有一些偏离正常数据的异常点,就会导致标准化结果的不准确性。

z-score标准化

z-score标准化方法适用于属性A的最大值和最小值未知的情况,或有超出取值范围的离群数据的情况。这种方法给予原始数据的均值(mean)和标准差(standard deviation)进行数据的标准化。

经过处理的数据符合标准正态分布,即均值为0,标准差为1,转化函数为:

    \[{x}_{normalization}=\frac{x-\mu }{\sigma }\]

其中μ为所有样本数据的均值,σ为所有样本数据的标准差。

Python实现:

mu为均值,sigma为标注差,所以代码可以改写为:

z-score标准化方法同样对于离群异常值的影响。改进的z-score标准化:将标准分公式中的均值改为中位数,将标准差改为绝对偏差。

    \[{x}_{normalization}=\frac{x-{x}_{center} }{\sigma_1 }\]

中位数是指将所有数据进行排序,取中间的那个值,如数据量是偶数,则取中间两个数据的平均值。

σ1为所有样本数据的绝对偏差,其计算公式为:

    \[\frac{1}{N} \sum_{1}^{n}|x_{i} - x_{center}|\]

Sigmoid函数

Sigmoid函数是一个具有S形曲线的函数,是良好的阈值函数,在(0, 0.5)处中心对称,在(0, 0.5)附近有比较大的斜率,而当数据趋向于正无穷和负无穷的时候,映射出来的值就会无限趋向于1和0,是个人非常喜欢的“归一化方法”,之所以打引号是因为我觉得Sigmoid函数在阈值分割上也有很不错的表现,根据公式的改变,就可以改变分割阈值,这里作为归一化方法,我们只考虑(0, 0.5)作为分割阈值的点的情况:

    \[{x}_{normalization}=\frac{1}{1+{e}^{-x}}\]

Python实现:

这里useStatus管理是否使用sigmoid的状态,方便调试使用。

sklearn中的归一化

sklearn.preprocessing 提供了一些实用的函数 用来处理数据的维度,以供算法使用。

1)均值-标准差缩放

即我们上边对应的z-score标准化。

2)min-max标准化

3)最大值标准化(每个数值/每个维度的最大数值)

4)规范化

规范化是文本分类和聚类中向量空间模型的基础。

norm 该参数是可选的,默认值是l2(向量各元素的平方和然后求平方根),用来规范化每个非零向量,如果axis参数设置为0,则表示的是规范化每个非零的特征维度。

具体请参考:范数规则化L0、L1与L2范数

5)二值化(将数据转换到0和1)

参考链接:

打赏作者
微信支付标点符 wechat qrcode
支付宝标点符 alipay qrcode

C语言学习:size_t

在学习C语言的时候,遇到了一个新的数据类型size_t,截止目前也没有完全理清这个类似的具体场景及出现的原因。
44 sec read

C语言学习:main()函数的正确写法

C语言虽然是一门古老的语言,但是其标准一直在完善,所以很多以前支持的语法在到当前已经不能在使用了。 C语言的版
41 sec read

Scipy数学函数的Scala实现

最近在推进项目的时候,遇到需要将线下的Python代码转化成线上的集群代码,由于机器代码环境是Scala,所以
4 min read

发表评论

电子邮件地址不会被公开。 必填项已用*标注