【機器學習算法-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=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

******************************************/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM