2018/09/29
这部分的代码在
/root/OldFile/sklearn/linear_regression下,名字为lr_normal_noise.py。
我感觉这里的一个困难是我对这个库的API不够熟悉导致的。另一方面,也是对原来的那些个分布不理解导致的。
想生成的图是这个样子的。
正态分布的图
结果弄成的图是这样的,
程序的图
不知道是我API调错了,还是说哪里弄错了。(这里是对正态分布的形式弄错了,可以从实验三中看出)
代码是这样的。
1 #! /usr/bin/python
2 #coding:utf-8
3 #2018/09/29
4 #Author:VChao
5
6 import os
7 import matplotlib
8 matplotlib.use('Agg')
9 import matplotlib.pyplot as plt
10 import numpy as np
11 from scipy import stats
12
13
14
15 def PlotMy(data):
16 Filename = 'Myfig.png'
17 plt.plot(data[:,0],data[:,1],'ro')
18 plt.plot(data[:,1],data[:,0],'bo')
19 plt.savefig(Filename)
20
21 def main():
22 x = np.arange(-3,3,0.2)
23 y = x * 3 + 2 + np.randmo.rand * stats.norm.pdf(x,0,1)
24 plt.scatter(x,y)
25 plt.savefig("test.png")
26
27
28 os.system("sz test.png")
29
31
32 if __name__ == "__main__":
33 main()
我本意是想生成,正态分布的,均值为0的数据,然后作为噪声来进行拟合。
我感觉这里是用的这个API错了,这个API是生成概率密度函数的,所以导致最后的结果就是不对了。
从整体上来看,最后如果是我弄的话,最后生成的这个散点图,还是一个正态分布的函数,最后的数据还是不对的,也就是说,还是不对的。
看了另外的一个博客,
这个我不知道是不是对的,就是他的这个噪声真的是正态分布吗??不明白。
增加高斯噪声
代码如下:
23 def main():
24 x = np.arange(-3,3,0.1)
25 y = x * 3 + 2
26 for i in range(x.size):
27 y[i] = random.gauss(0,12)
28 plt.scatter(x,y)
29 plt.savefig("test.png")
这里我觉得有点不对的地方,就是他增加高斯噪声的过程,因为这样弄得就是这个高斯噪声是完全不想关的。
就比如说,你看这个地方,你怎么说你这个东西的均值就是0呢。
看了这个东西:
最后还是利用了np的库,就是
23 def main():
24 x = np.arange(-3,3,0.06)
25 y = x * 3 + 2
26 y += np.random.normal(0,2,100)
27 plt.scatter(x,y)
28 plt.savefig("test.png")
29
30
31 os.system("sz test.png")
效果图是这样的,
期望的样本图
我感觉还是什么地方没有弄好,就是没有真正搞清楚自己是怎么弄得。
就是,概率密度函数和真正的分布还是有差别的。因为我想要的就是随机的几个值。
不对不对,还是需要梳理一下。
下面这个图是我画出来的一个纯粹是正态分布的图,1000个点,就是纯粹的这个模拟函数生成的数。
正态分布
从这里可以看出来,就是说,他并不是我想象中的那样,真的成一个正态分布的曲线。
由此我也想起来了,当时说的那个大数定律。
也就是说,概率性的东西,和我真实的这个理解还是有偏差的。
(这个后续在分析)
那为什么,前面的那个,按照每一个坐标点加上的正态数不对,我猜可能是因为他们不是同一个分布产生的,毕竟调用了这么多次的随机函数。