【机器学习算法-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]*mfor j in range(0,m): for i in mat:num[j]=num[j]+i[j] num[j]=num[j]/n return numdef width(lst):i=0for j in lst[0]:i=i+1return idef 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]*mfor 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]*mdenoisMat=[] 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]*mMaxNum = [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 sectionNormMat=[]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)))NormMat.append(value) return NormMat庫的實現:輸入矩陣mat,
GetAverage(mat):返回均值
GetVar(average,mat):返回方差
DenoisMat(mat):去噪
AutoNorm(mat):歸一化矩陣
下載地址:點擊下載
/********************************
* 本文來自博客 ?“李博Garvin“
* 轉載請標明出處:http://blog.csdn.net/buptgshengod
******************************************/
總結
以上是生活随笔為你收集整理的【机器学习算法-python实现】矩阵去噪以及归一化的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python将字典内容存入mysql
- 下一篇: 【机器学习算法-python实现】K-m