Python模拟实现高斯分布拟合

 更新时间:2023年12月17日 09:51:28   作者:python收藏家  
当我们绘制一个数据集(如直方图)时,图表的形状就是我们所说的分布,最常见的连续值形状是钟形曲线,也称为高斯分布或正态分布,下面我们就来利用Python模拟实现一下高斯分布吧

什么是正态分布或高斯分布

当我们绘制一个数据集(如直方图)时,图表的形状就是我们所说的分布。最常见的连续值形状是钟形曲线,也称为高斯分布或正态分布。
它以德国数学家卡尔·弗里德里希·高斯的名字命名。遵循高斯分布的一些常见示例数据集是体温、人的身高、汽车里程、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进度条神器tqdm使用实例详解

    Python进度条神器tqdm使用实例详解

    Python进度条神器tqdm是一个快速、可扩展的进度条工具,可以轻松地为Python脚本添加进度条。它可以在循环中自动计算进度,并在终端中显示进度条,让用户了解程序的运行情况。tqdm还支持多线程和多进程,并且可以自定义进度条的样式和显示方式。
    2023-06-06
  • Python使用Requests请求网页方式

    Python使用Requests请求网页方式

    这篇文章主要介绍了Python使用Requests请求网页方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • Ubuntu18.04中Python2.7与Python3.6环境切换

    Ubuntu18.04中Python2.7与Python3.6环境切换

    这篇文章主要为大家详细介绍了Ubuntu18.04中Python2.7与Python3.6环境切换,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-06-06
  • vscode使用chatGPT 的方法

    vscode使用chatGPT 的方法

    ChatGPT是基于GPT-3模型的对话生成模型,可以根据上下文生成自然语言文本来模拟人类对话,这篇文章主要介绍了vscode使用chatGPT ,需要的朋友可以参考下
    2022-12-12
  • python网络爬虫精解之正则表达式的使用说明

    python网络爬虫精解之正则表达式的使用说明

    正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑
    2021-09-09
  • python模拟TLS指纹实现反爬取

    python模拟TLS指纹实现反爬取

    这篇文章主要为大家详细介绍了如何利用python模拟TLS指纹实现反爬取,文中的示例代码讲解详细,具有一定的参考价值,有需要的小伙伴可以了解一下
    2023-10-10
  • 基于Python制作一副扑克牌过程详解

    基于Python制作一副扑克牌过程详解

    这篇文章主要介绍了基于Python制作一副扑克牌过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-10-10
  • Python高效实现Excel转TXT文本

    Python高效实现Excel转TXT文本

    在数据处理场景中,将Excel文件转换为纯文本(TXT)格式便成为了一个常见的需求,本文将解析如何通过 Spire.XLS for Python 实现 Excel 到TXT 的高效转换,有需要的可以了解下
    2026-01-01
  • 详解PyTorch nn.Embedding() 嵌入

    详解PyTorch nn.Embedding() 嵌入

    在自然语言处理(NLP)中,将文本序列转化为数字序列(tokenid)后,为了使模型能更好地理解这些数字背后的含义,引入了嵌入层(Embedding)通过简单的示例,可以看出Embedding的获取过程及其在理解语言中的关键作用
    2024-11-11
  • 使用python实现链表操作

    使用python实现链表操作

    链表是计算机科学里面应用最广泛的数据结构之一。这篇文章主要介绍了使用python实现链表操作,需要的朋友可以参考下
    2018-01-01

最新评论