Hướng dẫn how do you fit normal distribution to data in python? - làm thế nào để bạn điều chỉnh phân phối chuẩn cho dữ liệu trong python?

Bạn có thể sử dụng

import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

import pandas as pd

from scipy import stats
from scipy.optimize import curve_fit
from scipy import asarray as ar,exp
1 để vẽ biểu đồ biểu đồ và PDF [như trong liên kết trong câu trả lời của @MRE]. Để phù hợp và để tính toán PDF, bạn có thể sử dụng
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

import pandas as pd

from scipy import stats
from scipy.optimize import curve_fit
from scipy import asarray as ar,exp
2, như sau.

import numpy as np
from scipy.stats import norm
import matplotlib.pyplot as plt


# Generate some data for this demonstration.
data = norm.rvs[10.0, 2.5, size=500]

# Fit a normal distribution to the data:
mu, std = norm.fit[data]

# Plot the histogram.
plt.hist[data, bins=25, density=True, alpha=0.6, color='g']

# Plot the PDF.
xmin, xmax = plt.xlim[]
x = np.linspace[xmin, xmax, 100]
p = norm.pdf[x, mu, std]
plt.plot[x, p, 'k', linewidth=2]
title = "Fit results: mu = %.2f,  std = %.2f" % [mu, std]
plt.title[title]

plt.show[]

Đây là cốt truyện được tạo bởi tập lệnh:

Tạo một mảng chứa 250 phao ngẫu nhiên trong khoảng từ 0 đến 5: Nhập Numpy. ....

Vẽ một biểu đồ: Nhập Numpy. ....

Tạo một mảng với 100000 số ngẫu nhiên và hiển thị chúng bằng biểu đồ với 100 thanh: nhập Numpy. ....

Trong bài đăng này, chúng tôi sẽ trình bày một hướng dẫn từng bước về cách phù hợp với đường cong phân phối Gaussian trên dữ liệu bằng cách sử dụng ngôn ngữ lập trình Python. Hướng dẫn này có thể được mở rộng để phù hợp với các phân phối thống kê khác trên dữ liệu.

Việc phù hợp với phân phối Gaussian trên dữ liệu là rất hữu ích trong các hoạt động nghiên cứu và phát triển trong tất cả các ngành, bao gồm kỹ thuật, khoa học tự nhiên và xã hội cũng như y học.Continuous and discrete statistical distributions: Probability density/mass function, cumulative distribution function and the central limit theorem.

Giới thiệu ngắn gọn về phân phối Gaussian được đưa ra dưới dạng giải khát về phân phối Gaussian.

Hãy để chúng tôi đi vào các chi tiết hướng dẫn!

Đọc thêm: Phân phối thống kê liên tục và riêng biệt: Mật độ/hàm khối xác suất, hàm phân phối tích lũy và định lý giới hạn trung tâm.

  • Phân phối Gaussian [Bình thường]: Giới thiệu ngắn
  • Biến ngẫu nhiên được định nghĩa là một biến thực được rút hoặc thu được từ một thử nghiệm ngẫu nhiên hoặc phân phối ngẫu nhiên trong đó các giá trị thử nghiệm nằm trong một tập mẫu cụ thể.

Có hai loại biến ngẫu nhiên:

Biến ngẫu nhiên liên tục

Biến ngẫu nhiên rời rạc

Biến ngẫu nhiên liên tục là một biến ngẫu nhiên có giá trị trong một khoảng thời gian thực hoặc không giới hạn.

Trong khi đó, biến rời rạc là một biến ngẫu nhiên có giá trị trong khoảng số nguyên [hữu hạn] giới hạn. Lưu ý rằng đối với biến rời rạc, giá trị luôn nằm trong giới hạn hữu hạn.

Phân phối Gaussian là cho các biến ngẫu nhiên liên tục. Phân phối này là phân phối thống kê nổi tiếng nhất.[PDF] of Gaussian distribution is formulated as:

Phân phối Gaussian đã được nghiên cứu từ lâu từ thế kỷ 18 và đã được hiểu rõ, ví dụ như tính chất của nó.

Ngoài ra, nhiều hiện tượng tự nhiên có phân phối thích hoặc theo phân phối Gaussian. Đó là, nhiều hiện tượng tự nhiên có thể phù hợp với phân phối Gaussian để thể hiện tính chất của các hiện tượng.

Hàm mật độ xác suất [PDF] của phân phối Gaussian được xây dựng là:

Trong đó $ - \ infty \ leq x \ leq \ infty, - \ infty \ leq \ mu \ leq \ infty, \ sigma> 0 $. $ \ sigma ^{2} $ là phương sai của phân phối và $ \ mu $ là trung bình hoặc trung bình của phân phối. we can change the equation [1] into other statistical distribution functions to fit their distribution curves

Biến: of a random variable $X$ is a mathematical function that describes the probability of a continuous variable $X$ drawn from a continuous statistical distribution, for example Gaussian, Exponential and Gamma distributions.

Phân phối Gaussian có một đường cong hình chuông. Hình 1 cho thấy các ví dụ về các đường cong phân phối Gaussian hoặc hàm mật độ xác suất Gaussian [PDF].

Hình 1: Ví dụ về các đường cong Gaussian khác nhau [PDF] với các tham số khác nhau. .

Đọc thêm: Hướng dẫn: Macro Visual Basic cho ứng dụng [VBA] trong Excel cho mô phỏng Monte-Carlo.TUTORIAL: Visual Basic for Application [VBA] macro in Excel for Monte-Carlo Simulation.

Hướng dẫn từng bước: Phân phối Gaussian phù hợp với dữ liệu với Python

Hướng dẫn từng bước cho sự phù hợp của Gaussian bằng cách sử dụng ngôn ngữ lập trình Python như sau:

1. Nhập thư viện Python

Bước đầu tiên là chúng tôi cần nhập thư viện cần thiết cho chương trình Python. Chúng tôi sử dụng thư viện của Numpy Numpy để thao tác ma trận, thư viện của Panda Panda để dễ dàng đọc các tệp, thư viện của Matplotlib, để vẽ và thư viện Scipy Scipy cho quá trình tối ưu hóa bình phương nhỏ nhất.

import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

import pandas as pd

from scipy import stats
from scipy.optimize import curve_fit
from scipy import asarray as ar,exp

Thư viện quan trọng nhất là SCIPY.Optimize cho quy trình phù hợp vuông nhất thông qua chức năng Cur Cur_fit.

from scipy.optimize import curve_fit

2. Đọc dữ liệu

Tiếp theo là đọc dữ liệu từ một tệp. Tệp có thể là một tệp excel, tệp CSV hoặc tệp văn bản hoặc bất kỳ tệp nào khác. Trong trường hợp này, chúng tôi sử dụng tệp văn bản để đọc dữ liệu từ.

folder_path = 'Data.txt'
df_data = pd.read_csv[folder_path, sep="\t", header=None]

Pd.Read_csv [] có tiêu đề tham số được đặt là không có. Vì dữ liệu của chúng tôi trong tệp văn bản không chứa bất kỳ tiêu đề nào, [chỉ dữ liệu], chúng tôi sử dụng tất cả giá trị đọc làm dữ liệu bao gồm hàng đầu tiên.

Vì tất cả các thao tác dữ liệu như vectơ và ma trận đều ở trong nhóm Numpy, chúng tôi chuyển đổi bản dữ liệu của Panda DataFrame thành định dạng dữ liệu của Numpy Numpy:

df_numpy=df_data.to_numpy[dtype ='float32']

Ví dụ về dữ liệu, trong một tệp văn bản được mở bởi một ứng dụng Notepad, như được hiển thị bên dưới:

Từ dữ liệu trên, sau khi đọc tệp văn bản, ma trận của chúng tôi [khung dữ liệu Panda] sẽ có kích thước ma trận NX2.

Vì vậy, việc đọc dữ liệu rất linh hoạt và chúng ta có thể làm điều đó theo nhiều cách mà nó tùy thuộc vào chúng ta.

3. Quy trình phù hợp bình phương nhất Gaussian

Vì dữ liệu có hai cột, trong trường hợp này, chúng tôi chỉ muốn cột đầu tiên của dữ liệu phù hợp với đường cong phân phối Gaussian.

Hình thành các dữ liệu này, sau đó chúng tôi tính toán biểu đồ như:

x_data=df_numpy[:,0]

#plotting the histogram
hist, bin_edges = np.histogram[x_data]
hist=hist/sum[hist]

Hình 2 cho thấy biểu đồ được tính toán và biểu đồ từ dữ liệu đọc. Từ biểu đồ này, sau đó chúng tôi phù hợp với đường cong phân phối Gaussian.

Hình 2: Biểu đồ từ dữ liệu đọc.

Sau đó, chúng tôi trích xuất thùng biểu đồ [$ x $ -axis] và các giá trị [$ y $ -axis] trong Hình 2. Hai dữ liệu này sau đó được sử dụng để phù hợp với đường cong Gaussian thông qua tối ưu hóa bình phương nhỏ nhất. Các mã để trích xuất các giá trị bin và xác suất biểu đồ như sau:

n = len[hist]
x_hist=np.zeros[[n],dtype=float] 
for ii in range[n]:
    x_hist[ii]=[bin_edges[ii+1]+bin_edges[ii]]/2
    
y_hist=hist

Bây giờ, chúng ta có mọi thứ để thực hiện phù hợp bình phương nhỏ nhất trên dữ liệu biểu đồ [Hình 2]. Các mã dưới đây:

#Calculating the Gaussian PDF values given Gaussian parameters and random variable X
def gaus[X,C,X_mean,sigma]:
    return C*exp[-[X-X_mean]**2/[2*sigma**2]]

mean = sum[x_hist*y_hist]/sum[y_hist]                  
sigma = sum[y_hist*[x_hist-mean]**2]/sum[y_hist] 

Quy trình phù hợp bình phương nhỏ nhất [tối ưu hóa] như sau:

#Gaussian least-square fitting process
param_optimised,param_covariance_matrix = curve_fit[gaus,x_hist,y_hist,p0=[max[y_hist],mean,sigma],maxfev=5000]

Tham số được tối ưu hóa là $ c $ [hằng số], $ x_mean $ [giá trị trung bình] và $ sigma $ [độ lệch chuẩn]. Tối ưu hóa ở trên về cơ bản là giảm thiểu chức năng mục tiêu của:

Để phù hợp với các phân phối thống kê khác, chúng ta chỉ cần thay đổi phương trình [1] và điều chỉnh tham số trong hàm của DEF DEF [params].def gaus[params]” function.

4. Vẽ đường cong Gaussian

Cuối cùng, âm mưu của đường cong Fit Gaussian như trong Hình 3 như sau:

fig = plt.figure[]
x_hist_2=np.linspace[np.min[x_hist],np.max[x_hist],500]
plt.plot[x_hist_2,gaus[x_hist_2,*param_optimised],'r.:',label='Gaussian fit']
plt.legend[]

#Normalise the histogram values
weights = np.ones_like[x_data] / len[x_data]
plt.hist[x_data, weights=weights]

#setting the label,title and grid of the plot
plt.xlabel["Data: Random variable"]
plt.ylabel["Probability"]
plt.grid["on"]
plt.show[]
Figure 3: Đường cong Gaussian phù hợp từ biểu đồ của dữ liệu đọc.
Figure 3: The Gaussian curve fit from the histogram of the read data.

Mã Python để phù hợp với phân phối Gaussian

Mã đầy đủ để phù hợp với phân phối Gaussian với dữ liệu như sau:

import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

import pandas as pd

from scipy import stats
from scipy.optimize import curve_fit
from scipy import asarray as ar,exp
0

Sự kết luận

Trong bài đăng này, một hướng dẫn từng bước về cách phù hợp với đường cong phân phối Gaussian trên dữ liệu đã được trình bày. Kỹ thuật này rất hữu ích cho nghiên cứu và phân tích trong tất cả các lĩnh vực từ khoa học tự nhiên và xã hội, kỹ thuật đến y học.

Hướng dẫn này sử dụng ngôn ngữ lập trình Python. Bên cạnh miễn phí, ngôn ngữ Python này đã nổi tiếng về phân tích khoa học. Các mã nguồn được sử dụng trong hướng dẫn này cũng được trình bày và có thể được sao chép để sử dụng.

Ngoài ra, phần giới thiệu ngắn gọn về phân phối Gaussian cũng được đưa ra để làm mới kiến ​​thức của người đọc về phân phối Gaussian cũng như khái niệm cơ bản về chức năng mật độ xác suất.

Hướng dẫn phù hợp Gaussian này có thể được mở rộng để phù hợp với các phân phối thống kê khác với công thức phân phối được biết đến.

Chúng tôi bán tất cả các tệp nguồn, tệp EXE, bao gồm và các tệp LIB cũng như tài liệu về việc lắp hình elip bằng cách sử dụng các thư viện C/C ++, QT, thư viện Eigen và OpenCV trong liên kết này.

Chúng tôi bán các hướng dẫn [chứa các tệp PDF, tập lệnh MATLAB và tệp CAD] về phân tích xếp chồng dung sai 3D dựa trên phương pháp thống kê [mô phỏng Monte-Carlo/MC].

Tạo một mảng chứa 250 phao ngẫu nhiên trong khoảng từ 0 đến 5: Nhập Numpy. ....

Tạo một mảng chứa 250 phao ngẫu nhiên trong khoảng từ 0 đến 5: Nhập Numpy. ....we need to know the mean and the standard deviation. Remember that the mean of a binomial distribution is μ = np, and that the standard deviation for that distribution is σ = np[1− p]. The normal distribution is continuous, whereas the binomial distribution is discrete.

Vẽ một biểu đồ: Nhập Numpy. ....

Phân phối bình thường tiêu chuẩn với ví dụ Python..
Mô -đun thống kê SCIPY được sử dụng để tạo một thể hiện phân phối bình thường tiêu chuẩn với giá trị trung bình là 0 và độ lệch chuẩn là 1 [chỉ số. Định mức].
Hàm mật độ xác suất pdf [] được gọi trên ví dụ của các số liệu thống kê ..

Làm thế nào để bạn phù hợp với một dữ liệu Gaussian trong Python?

Hướng dẫn từng bước: Phân phối Gaussian phù hợp với dữ liệu với Python..
Nhập thư viện Python.Bước đầu tiên là chúng tôi cần nhập thư viện cần thiết cho chương trình Python.....
Đọc dữ liệu.Tiếp theo là đọc dữ liệu từ một tệp.....
Quá trình phù hợp bình phương nhất Gaussian.....
Âm mưu đường cong Gaussian ..

Làm thế nào để bạn phân phối dữ liệu trong Python?

Học máy - Phân phối dữ liệu..
❮ Trước Sau ❯.
Học máy - Phân phối dữ liệu.
Vẽ một biểu đồ: Nhập Numpy.....
Tạo một mảng với 100000 số ngẫu nhiên và hiển thị chúng bằng biểu đồ với 100 thanh: nhập Numpy.....
❮ Trước Sau ❯.

Bài Viết Liên Quan

Chủ Đề