什么是正态分布或高斯分布?
当我们绘制一个数据集(如直方图)时,图表的形状就是我们所说的分布。最常见的连续值形状是钟形曲线,也称为高斯分布或正态分布。 它以德国数学家卡尔·弗里德里希·高斯的名字命名。遵循高斯分布的一些常见示例数据集是体温、人的身高、汽车里程、IQ分数。 让我们尝试生成理想的正态分布,并使用Python绘制它。
如何在Python中绘制高斯分布
我们有像Numpy、scipy和matplotlib这样的库来帮助我们绘制理想的正态曲线。
import numpy as np import scipy as sp from scipy import stats import matplotlib.pyplot as plt ## generate the data and plot it for an ideal normal curve ## x-axis for the plot x_data = np.arange(-5, 5, 0.001) ## y-axis as the gaussian y_data = stats.norm.pdf(x_data, 0, 1) ## plot data plt.plot(x_data, y_data)
输出
x轴上的点是观测值,y轴是每个观测值的似然性。 我们使用np.arange()在范围(-5,5)内生成规则间隔的观测值。然后我们通过norm.pdf()函数运行它,平均值为0.0,标准差为1,它返回该观察的可能性。0附近的观测值是最常见的,而-5.0和5.0附近的观测值是罕见的。pdf()函数的技术术语是概率密度函数。
高斯函数
首先,让我们将数据拟合到高斯函数。我们的目标是找到最适合我们数据的A和B的值。首先,我们需要为高斯函数方程编写一个Python函数。该函数应该接受自变量(x值)和所有构成它的参数。
#Define the Gaussian function def gauss(x, H, A, x0, sigma): return H + A * np.exp(-(x - x0) ** 2 / (2 * sigma ** 2))
我们将使用python模块scipy.optimize中的函数curve_fit来拟合我们的数据。它使用非线性最小二乘法将数据拟合为函数形式。您可以通过使用Jupyter notebook或scipy在线文档中的help函数了解有关curve_fit的更多信息。
curve_fit函数有三个必需的输入:要拟合的函数、x数据和要拟合的y数据。有两个输出:第一个是参数的最优值的数组,第二个是参数的估计协方差矩阵,您可以从中计算参数的标准误差。
示例1:
import numpy as np import matplotlib.pyplot as plt from scipy.optimize import curve_fit xdata = [ -10.0, -9.0, -8.0, -7.0, -6.0, -5.0, -4.0, -3.0, -2.0, -1.0, 0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0] ydata = [1.2, 4.2, 6.7, 8.3, 10.6, 11.7, 13.5, 14.5, 15.7, 16.1, 16.6, 16.0, 15.4, 14.4, 14.2, 12.7, 10.3, 8.6, 6.1, 3.9, 2.1] # Recast xdata and ydata into numpy arrays so we can use their handy features xdata = np.asarray(xdata) ydata = np.asarray(ydata) plt.plot(xdata, ydata, 'o') # Define the Gaussian function def Gauss(x, A, B): y = A*np.exp(-1*B*x**2) return y parameters, covariance = curve_fit(Gauss, xdata, ydata) fit_A = parameters[0] fit_B = parameters[1] fit_y = Gauss(xdata, fit_A, fit_B) plt.plot(xdata, ydata, 'o', label='data') plt.plot(xdata, fit_y, '-', label='fit') plt.legend()
输出
示例2:
import numpy as np from scipy.optimize import curve_fit import matplotlib.pyplot as mpl # Let's create a function to model and create data def func(x, a, x0, sigma): return a*np.exp(-(x-x0)**2/(2*sigma**2)) # Generating clean data x = np.linspace(0, 10, 100) y = func(x, 1, 5, 2) # Adding noise to the data yn = y + 0.2 * np.random.normal(size=len(x)) # Plot out the current state of the data and model fig = mpl.figure() ax = fig.add_subplot(111) ax.plot(x, y, c='k', label='Function') ax.scatter(x, yn) # Executing curve_fit on noisy data popt, pcov = curve_fit(func, x, yn) #popt returns the best fit values for parameters of the given model (func) print (popt) ym = func(x, popt[0], popt[1], popt[2]) ax.plot(x, ym, c='r', label='Best fit') ax.legend() fig.savefig('model_fit.png')
输出
以上就是“Python | 高斯分布拟合示例”的全部内容,希望对你有所帮助。
?
?关于Python技术储备
学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!
一、Python所有方向的学习路线
Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
二、Python必备开发工具
三、Python视频合集
观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
四、实战案例
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
五、Python练习题
检查学习结果。
六、面试资料
我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
最后祝大家天天进步!!
上面这份完整版的Python全套学习资料已经上传至CSDN官方,朋友如果需要可以直接微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】。