zoukankan      html  css  js  c++  java
  • 【机器学习算法-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

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

  • 相关阅读:
    可重入函数
    epoll源码深度剖析
    数据结构学习之基本概念
    机器学习算法原理与编程实践之朴素贝叶斯分类
    机器学习算法与编程实践之中文文本分类
    ElasticSearch常用结构化搜索
    linux几种常见的文件内容查找和替换命令
    List遍历时删除遇到的问题
    初学ElasticSeacher
    从jar中读取资源文件的问题
  • 原文地址:https://www.cnblogs.com/blfshiye/p/5412794.html
Copyright © 2011-2022 走看看