版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/M_WBCG/article/details/79109474
归一化是指一种简化计算的方式,将数据经过处理后限定到一定的范围之内,一般都会将数据限定在[0,1]。数据归一化可以加快算法的收敛速度,而且对后续的数据处理上也比较方便。归一化算法是一种去量纲的行为。
归一化具体计算方法:y=(x-MinValue)/(MaxValue-MinValue),这里的MaxValue和MinValue分别是矩阵中每一个字段的最大值和最小值,x是字段中的值,y是归一化结果。
示例
注:(1)list() 方法用于将元组转换为列表。
元组与列表是非常类似的,区别在于元组的元素值不能修改,元组是放在括号中,列表是放于方括号中。
元组与列表是非常类似的,区别在于元组的元素值不能修改,元组是放在括号中,列表是放于方括号中。
(2)map() 会根据提供的函数对指定序列做映射。
第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。
第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。
使用方法:>>>def square(x) : # 计算平方数
return x ** 2
>>> map(square, [1,2,3,4,5]) #调用square函数
结果:[1, 4, 9, 16, 25]
>>> map(lambda x: x ** 2, [1, 2, 3, 4, 5]) # 使用 lambda 匿名函数
结果:[1, 4, 9, 16, 25]
# 提供了两个列表,对相同位置的列表数据进行相加
>>> map(lambda x, y: x + y, [1, 3, 5, 7, 9], [2, 4, 6, 8, 10])
结果:[3, 7, 11, 15, 19]
return x ** 2
>>> map(square, [1,2,3,4,5]) #调用square函数
结果:[1, 4, 9, 16, 25]
>>> map(lambda x: x ** 2, [1, 2, 3, 4, 5]) # 使用 lambda 匿名函数
结果:[1, 4, 9, 16, 25]
# 提供了两个列表,对相同位置的列表数据进行相加
>>> map(lambda x, y: x + y, [1, 3, 5, 7, 9], [2, 4, 6, 8, 10])
结果:[3, 7, 11, 15, 19]
from __future__ import division
#矩阵
mat = [[63, 145, 233, 150, 2.3, 0], [67, 160, 286, 108, 1.5, 3], [67, 120, 229, 129, 2.6, 2]]
# 获得矩阵的字段数量
def width(lst):
i = 0;
for j in lst[0]:
i += 1
return i
def AutoNorm(mat):
n = len(mat)
m = width(mat)
MinNum = [999999] * m
MaxNum = [0] * m
for i in mat:
for j in range(0, m):
if i[j] > MaxNum[j]:
MaxNum[j] = i[j]
print("MaxNum:")
print(MaxNum)
for p in mat:
for q in range(0, m):
if p[q] <= MinNum[q]:
MinNum[q] = p[q]
print("MinNum:")
print(MinNum)
section = list(map(lambda x: x[0] - x[1], zip(MaxNum, MinNum)))
print("MaxNum-MinNum:")
print(section)
NorMat = []
for k in mat:
distance = list(map(lambda x: x[0] - x[1], zip(k, MinNum)))
value = list(map(lambda x: x[0] / x[1], zip(distance, section)))
NorMat.append(value)
print("归一化结果:")
return NorMat
if __name__ == '__main__':
print("初始数据:")
print(mat)
print(AutoNorm(mat))
公式中如果某一字段的最大值和最小值相同,会出现分母为0的情况。所以要根据字段数据来判断,如果当前字段全部相同且为1,就按1处理。如果当前字段为0,那就直接保留0。