首页 > 代码库 > 【机器学习算法-python实现】矩阵去噪以及归一化
【机器学习算法-python实现】矩阵去噪以及归一化
1.背景
项目需要,打算用python实现矩阵的去噪和归一化。用numpy这些数学库没有找到很理想的函数,所以一怒之下自己用标准库写了一个去噪和归一化的算法,效率有点低,不过还能用,大家如果有需要可以拿去。
(1)去噪算法:根据概率论的知识,如果一组数据服从正态分布,我们设均值是n,方差是v,那么对于每个离散数值有百分之九十二以上的概率会在(n-3*v,n+3*v)的区间内。所以这里的去噪功能主要是实现如果超出了区间就将这个值标记为区间所能容忍最大值。
(2)归一化:找到输入队列最大值max,最小值min。对任意一个自变量x,它的归一化数值为(x-min/max-min)。
2.实现代码
from __future__ import division def GetAverage(mat): n=len(mat) m= width(mat) num = [0]*m for j in range(0,m): for i in mat: num[j]=num[j]+i[j] num[j]=num[j]/n return num def width(lst): i=0 for j in lst[0]: i=i+1 return i def GetVar(average,mat): ListMat=[] for i in mat: ListMat.append(list(map(lambda x: x[0]-x[1], zip(average, i)))) n=len(ListMat) m= width(ListMat) num = [0]*m for j in range(0,m): for i in ListMat: num[j]=num[j]+(i[j]*i[j]) num[j]=num[j]/n return num def DenoisMat(mat): average=GetAverage(mat) variance=GetVar(average,mat) section=list(map(lambda x: x[0]+x[1], zip(average, variance))) n=len(mat) m= width(mat) num = [0]*m denoisMat=[] for i in mat: for j in range(0,m): if i[j]>section[j]: i[j]=section[j] denoisMat.append(i) return denoisMat def AutoNorm(mat): n=len(mat) m= width(mat) MinNum=[9999999999]*m MaxNum = [0]*m for i in mat: for j in range(0,m): if i[j]>MaxNum[j]: MaxNum[j]=i[j] for p in mat: for q in range(0,m): if p[q]<=MinNum[q]: MinNum[q]=p[q] section=list(map(lambda x: x[0]-x[1], zip(MaxNum, MinNum))) print section NormMat=[] for k in mat: distance=list(map(lambda x: x[0]-x[1], zip(k, MinNum))) value=http://www.mamicode.com/list(map(lambda x: x[0]/x[1], zip(distance,section)))>
库的实现:输入矩阵mat,
GetAverage(mat):返回均值
GetVar(average,mat):返回方差
DenoisMat(mat):去噪
AutoNorm(mat):归一化矩阵
/********************************
* 本文来自博客 “李博Garvin“
* 转载请标明出处:http://blog.csdn.net/buptgshengod
******************************************/
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。