什么是归一化
归一化是一种无量纲处理手段,使物理系统数值的绝对值变成某种相对值关系。简化计算,缩小量值的有效办法。
为什么要做归一化两个好处
1.提升模型的收敛速度
如下图,x1的取值为0-2000,而x2的取值为1-5,假如只有这两个特征,对其进行优化时,会得到一个窄长的椭圆形,导致在梯度下降时,梯度的方向为垂直等高线的方向而走之字形路线,这样会使迭代很慢,相比之下,右图的迭代就会很快(理解:也就是步长走多走少方向总是对的,不会走偏)
image
2.提升模型的精度
归一化的另一好处是提高精度,这在涉及到一些距离计算的算法时效果显著,比如算法要计算欧氏距离,上图中x2的取值范围比较小,涉及到距离计算时其对结果的影响远比x1带来的小,所以这就会造成精度的损失。所以归一化很有必要,他可以让各个特征对结果做出的贡献相同。
在多指标评价体系中,由于各评价指标的性质不同,通常具有不同的量纲和数量级。当各指标间的水平相差很大时,如果直接用原始指标值进行分析,就会突出数值较高的指标在综合分析中的作用,相对削弱数值水平较低指标的作用。因此,为了保证结果的可靠性,需要对原始指标数据进行标准化处理。
在数据分析之前,我们通常需要先将数据标准化(normalization),利用标准化后的数据进行数据分析。数据标准化也就是统计数据的指数化。数据标准化处理主要包括数据同趋化处理和无量纲化处理两个方面。数据同趋化处理主要解决不同性质数据问题,对不同性质指标直接加总不能正确反映不同作用力的综合结果,须先考虑改变逆指标数据性质,使所有指标对测评方案的作用力同趋化,再加总才能得出正确结果。数据无量纲化处理主要解决数据的可比性。经过上述标准化处理,原始数据均转换为无量纲化指标测评值,即各指标值都处于同一个数量级别上,可以进行综合测评分析。
从经验上说,归一化是让不同维度之间的特征在数值上有一定比较性,可以大大提高分类器的准确性。
image
使用MinMaxScaler进行数据归一化和还原
import numpy as np
import pandas as pd
from sklearn.preprocessing import MinMaxScaler
#数据处理
#从csv读取数据
dataset = pd.read_csv('./000001.csv', encoding = 'gb18030')
#print(dataset)
#数据集的维度
print(dataset.shape)
#将开盘价转换为整数
dataset['开盘价'] = dataset['开盘价'].astype(int)
# 列名选取行
dataframeDataset = dataset.loc[1:, ['日期', '开盘价']]
ndarrayDataset = dataframeDataset.values
#print(ndarrayDataset)
#画图大盘数据图
#plt.plot(narrayDataset[:,0], narrayDataset[:,1])
#plt.show()
#对大盘数据进行,数据归一化
stock_dataset = narrayDataset[:,1]
#显示部分数据 0-10条
print(stock_dataset[0:10])
#开盘价数据维度
print('reshap before:',stock_dataset, stock_dataset.shape)
#奖开盘价数据转换为nx1列的数据
stock_dataset = stock_dataset.reshape(-1,1)
#显示部分数据 0-10条
print('reshap after:', stock_dataset[0:10], stock_dataset.shape)
#初始化MinMaxScaler
sc = MinMaxScaler(feature_range=(0, 1))
#转换
stock_dataset_transform = sc.fit_transform(stock_dataset)
#显示部分数据 0-10条
print('transformed:', stock_dataset_transform[0:10])
#反归一化,回复原有数据,显示部分数据 0-10条
stock_dataset_inverse = sc.inverse_transform(stock_dataset_transform)
print('inversed:', stock_dataset_inverse[0:10])
输出:
image.png
网友评论