1.噪声是什么?数据集中的干扰数据(对场景描述不许确的数据)python
2.噪声怎么产生的?举个例子:手机信号来自于基站发射的电磁波,有的地方比较强,有的地方比较弱。运营商的工程师会负责统计不一样区域信号强弱来进行网络规划,工程师采集信号的方法就是将一个信号接受终端固定到车上,而后开车绕着基站转,信号终端就会自动采集不一样区域的信号强度,生成一份数据。可是若是车在采集过程当中遇到了突发事件、急刹车,就可能会对信号采集形成必定的影响,生成噪声数据。算法
3.噪声对模型训练有什么影响?不少算法,特别是线性算法,都是经过迭代来获取最优解的,若是数据中含有大量的噪声数据,将会大大的影响数据的收敛速度,甚至对于训练生成模型的准确也会有很大的反作用。网络
4.去除噪声的方法:根据不一样的业务场景有不一样的处理方法,这里只提出正态分布3σ原则。正态分布也叫常态分布,是连续随机变量几率分布的一种,天然界、人类社会、心理、教育中大量现象均按正态分布,如能力的高低、学生成绩的好坏都属于正态分布,咱们能够把数据集的质量分布立杰成一个正态分布。它会随着随机变量的平均数、标准差与单位不一样而有不一样的分布形态。正态分布能够表示成一种几率密度函数。app
正态分布具备这样的特色:x落在(μ-3σ,μ+3σ)之外的几率小于千分之三。根据这一特色,咱们能够经过计算数据集的标准差,把三倍于数据集的标准差的点设想为噪声数据排除。函数
from __future__ import division mat = [[19, 26, 63], [13, 62, 65], [16, 69, 15], [14, 56, 17], [19, 6, 15], [11, 42, 15], [18, 58, 36], [12, 77, 33], [10, 75, 47], [15, 54, 70], [10017, 1421077, 4169]] # 得到矩阵的字段数量 def width(lst): i = 0; for j in lst[0]: i += 1 return i # 获得每一个字段的平均值 def GetAverage(mat): n = len(mat) m = width(mat) num = [0] * m for i in range(0, m): for j in mat: num[i] += j[i] num[i] = num[i] / n return num # 得到每一个字段的标准差 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] += i[j] * i[j] num[j] /= n return num # 得到每一个字段的标准差 def GetStandardDeviation(mat): return list(map(lambda x:x**0.5,mat)) # 对数据集去噪声 def DenoisMat(mat): average = GetAverage(mat) variance = GetVar(average, mat) standardDeviation=GetStandardDeviation(variance) section = list(map(lambda x: x[0] + 3*x[1], zip(average, standardDeviation))) n = len(mat) m = width(mat) num = [0] * m denoisMat = [] noDenoisMat=[] for i in mat: for j in range(0, m): if i[j] > section[j]: denoisMat.append(i) break if j==(m-1): noDenoisMat.append(i) print("去除完噪声的数据:") print(noDenoisMat) print("噪声数据:") return denoisMat if __name__ == '__main__': print("初始数据:") print(mat) print(DenoisMat(mat))