使用Sklearn的MinMaxScaler做最简单的归一化

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Sklearn的MinMaxScaler做最简单的归一化相关的知识,希望对你有一定的参考价值。

参考技术A 归一化是一种无量纲处理手段,使物理系统数值的绝对值变成某种相对值关系。简化计算,缩小量值的有效办法。

如下图,x1的取值为0-2000,而x2的取值为1-5,假如只有这两个特征,对其进行优化时,会得到一个窄长的椭圆形,导致在梯度下降时,梯度的方向为垂直等高线的方向而走之字形路线,这样会使迭代很慢,相比之下,右图的迭代就会很快(理解:也就是步长走多走少方向总是对的,不会走偏)

归一化的另一好处是提高精度,这在涉及到一些距离计算的算法时效果显著,比如算法要计算欧氏距离,上图中x2的取值范围比较小,涉及到距离计算时其对结果的影响远比x1带来的小,所以这就会造成精度的损失。所以归一化很有必要,他可以让各个特征对结果做出的贡献相同。
在多指标评价体系中,由于各评价指标的性质不同,通常具有不同的量纲和数量级。当各指标间的水平相差很大时,如果直接用原始指标值进行分析,就会突出数值较高的指标在综合分析中的作用,相对削弱数值水平较低指标的作用。因此,为了保证结果的可靠性,需要对原始指标数据进行标准化处理。
在数据分析之前,我们通常需要先将数据标准化(normalization),利用标准化后的数据进行数据分析。数据标准化也就是统计数据的指数化。数据标准化处理主要包括数据同趋化处理和无量纲化处理两个方面。数据同趋化处理主要解决不同性质数据问题,对不同性质指标直接加总不能正确反映不同作用力的综合结果,须先考虑改变逆指标数据性质,使所有指标对测评方案的作用力同趋化,再加总才能得出正确结果。数据无量纲化处理主要解决数据的可比性。经过上述标准化处理,原始数据均转换为无量纲化指标测评值,即各指标值都处于同一个数量级别上,可以进行综合测评分析。
从经验上说,归一化是让不同维度之间的特征在数值上有一定比较性,可以大大提高分类器的准确性。

输出:

到github查看 https://github.com/horacepei/tensorflow_study

如何将 sklearn MinMaxScaler() 的值转换回实际值?

【中文标题】如何将 sklearn MinMaxScaler() 的值转换回实际值?【英文标题】:How to convert value from sklearn MinMaxScaler() back to real value? 【发布时间】:2018-04-15 16:42:10 【问题描述】:

我像这样使用 sklearn MinMaxScaler()。

from sklearn.preprocessing import MinMaxScaler

sc = MinMaxScaler()

train_sc = sc.fit_transform(train)
test_sc = sc.transform(test)

它将数据更改为 0-1 范围。在我已经预测它仍然是 0-1 之后。如何转换回实际价值?

【问题讨论】:

【参考方案1】:

在输出预测数据上使用inverse_transform()

from sklearn.preprocessing import MinMaxScaler

data = [[-1, 2], [-0.5, 6], [0, 10], [1, 18]]
scaler = MinMaxScaler()
scaler.fit(data)    

print(scaler.transform([[2, 2]]))
Out>>> [[ 1.5  0. ]]

// This is what you need
print(scaler.inverse_transform([[ 1.5  0. ]]))
Out>>> [[ 2.0  2.0]]

【讨论】:

以上是关于使用Sklearn的MinMaxScaler做最简单的归一化的主要内容,如果未能解决你的问题,请参考以下文章

SKLearn MinMaxScaler - 仅缩放特定列

如何将 sklearn MinMaxScaler() 的值转换回实际值?

[转]sklearn中MinMaxScaler/StandardScaler的区别

为啥 sklearn MinMaxScaler() 返回超出范围的值而不是错误?

如何在旧的 MinMaxScaler 上重新调整新数据库? [复制]

sklearn 中的 MinMax Scaler 不会标准化 0 到 1 之间的列值