Python khớp nhiều gaussian với biểu đồ

Dữ liệu tuân theo phân phối Gauss khi phân tán được gây ra bởi tổng của nhiều yếu tố độc lập và có trọng số bằng nhau

Phân phối tần số (biểu đồ) được tạo từ dữ liệu Gaussian sẽ trông giống như phân phối Gaussian hình chuông

Từng bước một

Dữ liệu phù hợp với bạn phải ở dạng phân bố tần suất trên bảng XY. Các giá trị X là trung tâm bin và các giá trị Y là số lượng quan sát

Nếu bạn bắt đầu với một cột dữ liệu và sử dụng Prism để tạo phân phối tần suất, hãy đảm bảo rằng bạn đặt loại biểu đồ thành "biểu đồ XY", với điểm hoặc biểu đồ tăng đột biến. Điều này đảm bảo rằng Prism tạo bảng kết quả XY với các trung tâm bin được nhập dưới dạng giá trị X. Thay vào đó, nếu bạn chọn biểu đồ thanh, Prism sẽ tạo bảng kết quả cột, tạo nhãn hàng từ tâm thùng. Loại bảng này không thể phù hợp với hồi quy phi tuyến tính, vì nó không có giá trị X

Bắt đầu từ bảng phân phối tần số, nhấp vào Phân tích, chọn Hồi quy phi tuyến tính từ danh sách phân tích XY, sau đó chọn phương trình "Gaussian" từ họ phương trình "Gaussian"

Mô hình (phân phối Gaussian)

Y=Biên độ*exp(-0. 5*((X-Mean)/SD)^2)

Python khớp nhiều gaussian với biểu đồ

Biên độ là chiều cao của tâm phân bố tính bằng đơn vị Y

Giá trị trung bình là giá trị X ở trung tâm của phân phối

SD là thước đo độ rộng của phân phối, theo cùng đơn vị với X

Giá trị trung bình và SD sẽ không giống với giá trị trung bình và SD được tính trực tiếp từ dữ liệu thô. Có hai lý do cho sự khác biệt. Đầu tiên là việc tạo phân phối tần suất yêu cầu một quyết định khá tùy ý về độ rộng của thùng và điều đó sẽ ảnh hưởng đến các giá trị phù hợp nhất của Giá trị trung bình và SD. Lý do thứ hai là hồi quy phi tuyến tính giả định rằng phần dư (khoảng cách của các điểm từ đường cong) tuân theo phân phối Gaussian. Giả định này sẽ không hoàn toàn đúng trong phân phối tần số

Mô hình (tổng của hai bản phân phối Gaussian)

Nếu dữ liệu của bạn là hỗn hợp các giá trị được lấy mẫu từ hai phân phối Gaussian, hãy điều chỉnh phân phối tần số cho một mô hình tổng của hai phân phối Gaussian

Một=Biên độ1*exp(-0. 5*((X-Mean1)/SD1)^2)

Hai=Biên độ2*exp(-0. 5*((X-Mean2)/SD2)^2)

Y= Một + Hai

Biên độ và Biên độ là độ cao của tâm phân bố theo đơn vị Y

Mean1 và Mean2 là các giá trị X ở trung tâm của hai bản phân phối

SD1 và SD2 là thước đo độ rộng của các bản phân phối, trong cùng đơn vị với X

Prism không thông minh lắm trong việc gán các giá trị ban đầu cho các tham số. Nếu bạn gặp khó khăn trong việc làm cho mô hình này vừa vặn, hãy thử loay hoay với các giá trị tham số ban đầu

Khu vực dưới một phân phối Gaussian

Khu vực dưới phân phối Gaussian bằng  Biên độ*SD/0. 3989. Hằng số đó bằng nghịch đảo của căn bậc hai của hai số pi

Khi chúng tôi vẽ một tập dữ liệu chẳng hạn như biểu đồ, hình dạng của biểu đồ được biểu đồ đó là cái mà chúng tôi gọi là phân phối của nó. Hình dạng phổ biến nhất được quan sát thấy của các giá trị liên tục là đường cong hình chuông, còn được gọi là phân phối Gaussian hoặc chuẩn

Nó được đặt tên theo nhà toán học người Đức Carl Friedrich Gauss. Một số bộ dữ liệu ví dụ phổ biến tuân theo phân phối Gaussian là Nhiệt độ cơ thể, Chiều cao của mọi người, Số dặm ô tô, điểm IQ.  

Hãy thử tạo phân phối chuẩn lý tưởng và vẽ đồ thị bằng Python

Cách vẽ sơ đồ phân phối Gaussian trong Python

Chúng tôi có các thư viện như Numpy, scipy và matplotlib để giúp chúng tôi vẽ một đường cong bình thường lý tưởng

Python3




import numpy as np

import scipy as sp

from scipyimport stats

import matplotlib.pyplot as plt 

numpy as np0

numpy as np1

numpy as np0

numpy as np3

numpy as np4numpy as np5 numpy as np6numpy as np7numpy as np8numpy as np9numpy as np8numpy as np9import2import3

numpy as np0

import5

import6numpy as np5 import8import9numpy as np9scipy as sp1import3

numpy as np0

scipy as sp4

scipy as sp5

đầu ra


Python khớp nhiều gaussian với biểu đồ

Các điểm trên trục x là các quan sát và trục y là khả năng của mỗi quan sát

Chúng tôi đã tạo các quan sát cách đều nhau trong phạm vi (-5, 5) bằng cách sử dụng np. sắp xếp(). Sau đó, chúng tôi chạy nó thông qua định mức. pdf() với giá trị trung bình là 0. 0 và độ lệch chuẩn là 1, trả về khả năng quan sát đó. Các quan sát xung quanh 0 là phổ biến nhất và các quan sát xung quanh -5. 0 và 5. 0 rất hiếm. Thuật ngữ kỹ thuật cho hàm pdf() là hàm mật độ xác suất

Hàm Gaussian

Đầu tiên, hãy khớp dữ liệu với hàm Gaussian. Mục tiêu của chúng tôi là tìm các giá trị của A và B phù hợp nhất với dữ liệu của chúng tôi. Đầu tiên, chúng ta cần viết một hàm python cho phương trình hàm Gaussian. Hàm phải chấp nhận biến độc lập (giá trị x) và tất cả các tham số sẽ làm cho nó

Python3




scipy as sp6

scipy as sp7 scipy as sp8

scipy as sp9from0 from1from2 from3from4 from5numpy as np7from7numpy as np7 from9from4from4 scipy2 scipy3 scipy4scipy2 from4 scipy7from4from4 scipy2import1

Chúng tôi sẽ sử dụng hàm curve_fit từ mô-đun python scipy. tối ưu hóa để phù hợp với dữ liệu của chúng tôi. Nó sử dụng bình phương nhỏ nhất phi tuyến tính để khớp dữ liệu với dạng chức năng. Bạn có thể tìm hiểu thêm về curve_fit bằng cách sử dụng chức năng trợ giúp trong sổ ghi chép Jupyter hoặc tài liệu trực tuyến scipy

Hàm curve_fit có ba đầu vào bắt buộc. chức năng bạn muốn khớp, dữ liệu x và dữ liệu y bạn khớp. Có hai đầu ra. Đầu tiên là một mảng các giá trị tối ưu của các tham số. Thứ hai là ma trận hiệp phương sai ước tính của các tham số mà từ đó bạn có thể tính toán sai số chuẩn cho các tham số

ví dụ 1

Python3




from import3import import5

import numpy as np

import import9

from stats1import stats3

stats4numpy as np5 stats6numpy as np7stats8numpy as np9numpy as np7import1numpy as np9numpy as np7import4numpy as np9numpy as np7import7numpy as np9numpy as np7matplotlib.pyplot as plt 0numpy as np9numpy as np7matplotlib.pyplot as plt 3numpy as np9numpy as np7matplotlib.pyplot as plt 6numpy as np9numpy as np7matplotlib.pyplot as plt 9numpy as np9numpy as np7numpy as np02numpy as np9numpy as np7numpy as np05numpy as np9numpy as np07numpy as np9numpy as np05numpy as np9numpy as np02numpy as np9matplotlib.pyplot as plt 9numpy as np9matplotlib.pyplot as plt 6numpy as np9matplotlib.pyplot as plt 3numpy as np9matplotlib.pyplot as plt 0numpy as np9import7numpy as np9import4numpy as np9import1numpy as np9stats8numpy as np28

numpy as np29numpy as np5 stats6numpy as np32numpy as np9numpy as np34numpy as np9numpy as np36numpy as np9numpy as np38numpy as np9numpy as np40numpy as np9numpy as np42numpy as np9numpy as np44numpy as np9numpy as np46numpy as np9numpy as np48numpy as np9numpy as np50numpy as np9numpy as np52numpy as np9numpy as np54numpy as np9numpy as np56numpy as np9numpy as np58numpy as np9numpy as np60numpy as np9numpy as np62numpy as np9numpy as np64numpy as np9numpy as np66numpy as np9numpy as np68numpy as np9numpy as np70numpy as np9numpy as np72numpy as np28

numpy as np0

numpy as np75

stats4numpy as np5 numpy as np78

numpy as np29numpy as np5 numpy as np81

numpy as np82numpy as np83import3

numpy as np0

numpy as np86

scipy as sp7 numpy as np88

scipy as sp9numpy as np90numpy as np5 from3from4from5numpy as np7scipy as sp1from4numpy as np98from4import00from4from4scipy2import3

scipy as sp9from0 numpy as np90

import08numpy as np5 import10

numpy as np0

import12numpy as np5 import14import9numpy as np28

import17numpy as np5 import14scipy as sp1numpy as np28

numpy as np0

import23numpy as np5 import25

numpy as np82numpy as np83____028numpy as np5import30import3

import32import33____028numpy as np5import36import3

import38



Python khớp nhiều gaussian với biểu đồ

ví dụ 2

Python3




import numpy as np

from stats1import stats3

import import46

numpy as np0

import48

scipy as sp7 import50

scipy as sp9from0 import53_______44from5numpy as np7from7______17from9from4from4scipy2scipy3scipy4scipy2from4scipy7from4from4scipy2import1

numpy as np0

import73

import00numpy as np5 import76import9numpy as np9import79numpy as np9import81import3

numpy as np90numpy as np5 import85scipy as sp1numpy as np9numpy as np8numpy as np9scipy2import3

numpy as np0

import93

import94numpy as np5 numpy as np90from2 import98 from4 scipy as sp00numpy as np5scipy as sp02scipy as sp03