机器学习常见归一化方法及实现

归一化是一种简化计算的方式,即将有量纲的表达式,经过变换,化为无量纲的表达式,成为标量。 在多种计算中都经常用到这种方法。在对数据进行算法训练时,由于数据的问题可能导致算法的效果并不理想,这时候可以考虑一下对数据进行归一化方法。

比较常用的又线性归一化,0均值归一化,以及其他数学函数演变而来的归一化方法。下面列出我所用过的归一化方法。

  1. 线性归一化—Min-Max归一化。公式如下

Xnorm是归一化后的值,Xmax,Xmin为归一化前数据的最大值和最小值。该方法把数据压缩到区间[0, 1]之间,是原数据的等比缩放。如果最大值和最小值相等需要注意是没法归一化的。所有的值相等没有区别。

例子:元数据:DataFrame

归一化代码:

def my_max_min(x):

    return (x-min(x))/(max(x)-min(x))

df = df.agg(my_max_min)

 

         Sklearn库实现Max-Min归一化:

from sklearn import preprocessing

      min_max_scaler = preprocessing.MinMaxScaler()

Xnorm = min_max_scaler.fit_transform(df)

print(Xnorm)# <class 'numpy.ndarray'>

可以看到和上面自己写的函数一模一样,只是输出的格式是ndarray格式。

注:在不涉及距离度量、协方差计算、数据不符合正太分布的时候,可以尝试这种归一化方法。

  1. 0均值归一化:公式如下

x是原始数据, u是原始数据的均值,σ原始数据的标准差。0均值归一化方法将原始数据集归一化为均值为0、方差1的数据集.

例子:

def my_mean_norm(x):

    return (x-np.mean(x))/np.std(x)

df = df.agg(my_mean_norm)

print(df)

min_max_scaler = preprocessing.StandardScaler()

Xnorm = min_max_scaler.fit_transform(df)

print(Xnorm)

注:在分类、聚类算法中,需要使用距离来度量相似性的时候、或者使用PCA技术进行降维的时候,第二种方法(Z-score standardization)表现更好。

  1. Atan()归一化:公式如下:

y=atan(x)*2/PI

画出曲线如下图:

X = np.linspace(-10, 10, 100)

y = [math.atan(x)*2/math.pi for x in X]# math.atan(x) x不能是数组只能是一个值

plt.plot(X, y)

plt.show()

可以看到此函数把数据压缩有(-1, 1)之内了。

  1. Log10()压缩数据,公式如下:(或者对应其他数为底的数据压缩都可以)

def my_log(x):

    return np.log10(x) / np.log10(max(x))

df = df.agg(my_log)

print(df)

注意:除以log10(max),max为样本数据最大值,并且所有的数据都要大于等于1,这样才能保证归一化后的数据在[0-1]之间,适用范围有限。

  1. 模糊量化模式,公式如下:

1/2+1/2*sin(pi/(max-min)*(x-(max-min)/2))

归一化:

def my_mohu(x):

    return 1/2.0+np.sin((math.pi**(x-(max(x)-min(x))/2.0))/(max(x)-min(x)))/2.0

df = df.agg(my_mohu)

print(df)

下面几个在神经网络里面用的激活函数,是为了增加非线性因素,有时候也可以考虑一下对数据的压缩转换。

  1. Logistics转换,也就是sigmod激活函数。

         函数图形:

  1. tanh函数

公式如下:

函数图形:

  1. ReLU函数,公式如下:

函数图形:

 

  • 6
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值