如何查看自己制作的网站,如何做网站公证,上海搬家公司排名第一,网站反链是什么意思什么是正态分布或高斯分布#xff1f;
当我们绘制一个数据集#xff08;如直方图#xff09;时#xff0c;图表的形状就是我们所说的分布。最常见的连续值形状是钟形曲线#xff0c;也称为高斯分布或正态分布。 它以德国数学家卡尔弗里德里希高斯的名字命名。遵循高斯分布…什么是正态分布或高斯分布
当我们绘制一个数据集如直方图时图表的形状就是我们所说的分布。最常见的连续值形状是钟形曲线也称为高斯分布或正态分布。 它以德国数学家卡尔·弗里德里希·高斯的名字命名。遵循高斯分布的一些常见示例数据集是体温、人的身高、汽车里程、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()在范围-55内生成规则间隔的观测值。然后我们通过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, labeldata)
plt.plot(xdata, fit_y, -, labelfit)
plt.legend()
输出
示例2
import numpy as np
from scipy.optimize import curve_fit
import matplotlib.pyplot as mpl# Lets 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(sizelen(x))# Plot out the current state of the data and model
fig mpl.figure()
ax fig.add_subplot(111)
ax.plot(x, y, ck, labelFunction)
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, cr, labelBest fit)
ax.legend()
fig.savefig(model_fit.png)
输出