数据预处理:归一化
由于进行分类器或模型的建立与训练时,输入的数据范围可能比较大,同时样本中各数据可能量纲不一致,这样的数据容易对模型训练或分类器的构建结果产生影响,因此需要对其进行归一化处理。
那就是将该样本(样本集中第i行数据)归一到范围(0,1)之间。
一种简单而快速的标准归一化处理算法是线性转换算法,最为常见的是如下形式:
假设x为样本,y归一化后数据,则有
y=(x-min)/(max-min)
因此如果一个样本集S=[x1,x2,…,xi,…,xn],i=(1,2,…,n)。
即该样本集共有n个样本,其中每个样本都是这样的数据:
xi=[x(i,1), x(i,2), …, x(i,j), …, x(i,m)],j=(1,2,…,m)。
即每个样本都由m个数据构成。
因此对于该样本集的归一化处理应该是这样的:
遍历该样本集, yi = ( xi -min(xi) )/( max(xi) -min(xi))
由于数组的加和乘运算符均为拼接符号,因此需要将其转换为矩阵数组,利用矩阵的基本运算。
即:numpy.array()
代码如下:
import numpy as np;
a=np.array([[1,2,3,4],[2,3,4,5],[3,4,5,6],[4,5,6,7]]);def MNMX(arr):arr=np.array(arr); #将输入样本集转换为矩阵,以便做矩阵基本运算mnmx=[];for i in range(len(arr)):maxi,mini=max(arr[i]),min(arr[i]); #得到第i行数据(即第i个样本)的最大值和最小值temp=(arr[i]-mini)/(maxi-mini); #将该样本数据进行归一化处理mnmx.append(temp.tolist()); #预处理后数据增添到新数组中mnmx=np.array(mnmx);return mnmx;print(MNMX(a));
结果如下:
#a=
[[1 2 3 4][2 3 4 5][3 4 5 6][4 5 6 7]]#print
[[0. 0.33333333 0.66666667 1. ][0. 0.33333333 0.66666667 1. ][0. 0.33333333 0.66666667 1. ][0. 0.33333333 0.66666667 1. ]]
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
