15/12/2025
În era digitală, unde datele sunt noul "aur negru", analiza și vizualizarea acestora au devenit esențiale. Procesul de analiză implică adesea alimentarea datelor în modele matematice sofisticate pentru a extrage informații utile și a descoperi tipare ascunse. Printre aceste modele, potrivirea Gaussiană se distinge ca un instrument puternic, utilizat de către specialiștii în știința datelor pentru a modela seturi de date ce prezintă o distribuție caracteristică, adesea denumită "curba în formă de clopot". Acest ghid complet vă va introduce în conceptele fundamentale ale potrivirii Gaussiane și vă va arăta, pas cu pas, cum să o implementați eficient folosind limbajul de programare Python.

Ce este Potrivirea Gaussiană?
Distribuția Gaussiană, cunoscută și sub numele de distribuția Normală, este caracterizată de forma sa simetrică, asemănătoare unui clopot, centrată în jurul valorii medii (μ). Această distribuție este larg răspândită în natură și în multe fenomene statistice, de la înălțimea oamenilor la erorile de măsurare. Forma sa unică o face ideală pentru modelarea datelor în diverse domenii, de la inginerie și științe naturale până la medicină și științe sociale.
Funcția de densitate a probabilității (FDP) a unei distribuții Gaussiane este definită matematic astfel:
f(x) = (1 / (σ * sqrt(2π))) * exp(-(x - μ)² / (2 * σ²))Aici, μ (mu) reprezintă media distribuției, care indică centrul curbei. σ (sigma) este deviația standard, un parametru crucial care măsoară dispersia sau "întinderea" curbei. O valoare mică a lui σ indică o curbă înaltă și îngustă, în timp ce o valoare mare indică o curbă mai aplatizată și mai largă. π (pi) este o constantă matematică (aproximativ 3.14159). Scopul principal al potrivirii Gaussiane este de a estima aceste valori necunoscute μ și σ dintr-un set de date observate, astfel încât curba Gaussiană rezultată să se potrivească cât mai bine datelor.
Realizarea manuală a acestei sarcini sau crearea unui cod logic de la zero ar fi un proces laborios și predispus la erori. Din fericire, Python ne oferă biblioteci puternice, cu funcții predefinite, care simplifică semnificativ acest proces.
Vizualizarea Curbei în Formă de Clopot în Python
Înainte de a ne scufunda în procesul de potrivire, este util să înțelegem cum arată o curbă Gaussiană tipică. Această vizualizare ne va oferi o intuiție mai bună atunci când vom lucra cu date reale. Putem genera o curbă Gaussiană ideală și să o vizualizăm folosind bibliotecile NumPy și Matplotlib.
Exemplul de cod de mai jos generează un set de puncte de date uniform distribuite folosind funcția arange din NumPy. Apoi, utilizează funcția norm.pdf din modulul scipy.stats pentru a calcula funcția de densitate a probabilității pentru o distribuție Gaussiană, specificând o medie de 25 și o deviație standard de 20. În final, curba este plotată cu ajutorul Matplotlib.

import numpy as np import scipy as sp from scipy import stats import matplotlib.pyplot as plt # Generarea datelor pentru axa X x_data = np.arange(-100, 100, 0.01) # Calcularea valorilor FDP pentru o distribuție Gaussiană # cu media = 25 și deviația standard = 20 y_data = stats.norm.pdf(x_data, 25, 20) # Plotarea curbei plt.plot(x_data, y_data) plt.title("Curba în formă de clopot (Distribuție Gaussiană)") plt.xlabel("Valoarea lui X") plt.ylabel("Densitatea Probabilității") plt.grid(True) plt.show()O observație importantă din grafic este că valorile din jurul mediei (25) sunt mult mai frecvente decât valorile extreme, cum ar fi -100 sau 100. Aceasta este esența unei distribuții normale: majoritatea datelor se aglomerează în jurul mediei, iar probabilitatea scade pe măsură ce ne îndepărtăm de centru.
Potrivirea Datelor Gaussiane cu Metoda curve_fit
Așa cum am menționat, ideea principală a potrivirii unei distribuții Gaussiane este de a găsi valorile optime pentru μ și σ. Biblioteca SciPy ne oferă o funcție extrem de utilă pentru acest scop: curve_fit. Această funcție utilizează metoda celor mai mici pătrate pentru a găsi parametrii care minimizează suma pătratelor diferențelor dintre datele observate și modelul nostru (funcția Gaussiană).
Algoritmul pentru a realiza potrivirea Gaussiană folosind curve_fit este următorul:
- Definiți funcția Gaussiană pe care doriți să o potriviți. Aceasta este exact formula FDP pe care am discutat-o anterior.
- Utilizați metoda
curve_fitdin pachetulscipy.optimize. Aceasta va returna parametrii optimi (μșiσ) pentru potrivirea curbei Gaussiane la datele dvs. - Generați curba potrivită folosind parametrii obținuți și vizualizați-o împreună cu datele originale, folosind o bibliotecă de vizualizare a datelor precum Matplotlib.
Iată un exemplu practic:
import numpy as np import matplotlib.pyplot as plt from scipy.optimize import curve_fit # 1. Definirea funcției Gaussiane def gaussian(x, mu, sigma): return (1 / (sigma * np.sqrt(2 * np.pi))) * np.exp(-((x - mu) 2) / (2 * mu 2)) # Generarea datelor sintetice cu zgomot # np.linspace creează 100 de puncte uniform distanțate între -5 și 5 x_data = np.linspace(-5, 5, 100) # Cream date y pe baza unei distribuții Gaussiane ideale (mu=0, sigma=1) # și adăugăm zgomot aleator pentru a simula date reale y_data = gaussian(x_data, 0, 1) + np.random.normal(0, 0.2, 100) # 2. Realizarea potrivirii Gaussiane cu curve_fit # curve_fit returnează: # popt: un array cu parametrii optimi (μ_fit, σ_fit) # pcov: matricea de covarianță a parametrilor optimi popt, pcov = curve_fit(gaussian, x_data, y_data) # Extragerea parametrilor optimi mu_fit, sigma_fit = popt # Generarea valorilor y pentru curba potrivită y_fit = gaussian(x_data, mu_fit, sigma_fit) # 3. Plotarea datelor originale și a curbei potrivite plt.scatter(x_data, y_data, label='Date Originale', alpha=0.7) # Datele originale sunt afișate ca puncte discrete plt.plot(x_data, y_fit, 'r-', label=f'Potrivire Gaussiană (μ={mu_fit:.2f}, σ={sigma_fit:.2f})') # Curba potrivită este o linie roșie plt.xlabel('X') plt.ylabel('Y') plt.title('Potrivirea Curbei Gaussiane la Date Cu Zgomot') plt.legend() plt.grid(True) plt.show()Notă: Rezultatul generat poate diferi ușor de fiecare dată când rulați codul, deoarece generăm numere aleatoare (zgomot) pentru a simula date reale. Totuși, curba potrivită ar trebui să urmeze îndeaproape tendința generală a datelor.
Tutorial Detaliat Pas cu Pas pentru Potrivirea Distribuției Gaussiane la Date Reale
Acest tutorial extinde conceptele anterioare, arătând cum să potriviți o distribuție Gaussiană la date dintr-un fișier, simulând un scenariu mai realist de analiză a datelor. Vom folosi o histogramă a datelor pentru a efectua potrivirea, o abordare comună atunci când lucrați cu distribuții.
1. Importarea Bibliotecilor Python
Primul pas este importarea bibliotecilor necesare. Vom folosi NumPy pentru manipularea matricelor, Pandas pentru citirea ușoară a fișierelor, Matplotlib și Seaborn pentru plotare, și Scipy pentru procesul de optimizare prin metoda celor mai mici pătrate.
import numpy as np import matplotlib.pyplot as plt import seaborn as sns # Pentru o vizualizare mai estetică, deși nu e strict necesar pentru funcționalitate import pandas as pd from scipy import stats from scipy.optimize import curve_fit from scipy import asarray as ar, exp # asarray și exp sunt importate pentru compatibilitate cu codul originalCea mai importantă bibliotecă aici este scipy.optimize, în special funcția curve_fit, care va realiza procesul de potrivire prin metoda celor mai mici pătrate.

2. Citirea Datelor
Următorul pas este citirea datelor dintr-un fișier. Fișierul poate fi un fișier Excel, CSV, text sau orice alt format. În acest exemplu, presupunem că avem un fișier text numit Data.txt, unde datele sunt separate prin tabulatori și nu conțin un antet.
# Path-ul către fișierul de date. Asigurați-vă că "Data.txt" se află în același director cu scriptul Python folder_path = 'Data.txt' # Citirea datelor folosind pandas.read_csv # sep="" indică separatorul (tab) # header=None indică faptul că fișierul nu are rând de antet df_data = pd.read_csv(folder_path, sep="", header=None) # Deoarece majoritatea manipulărilor de date se fac cu NumPy, convertim DataFrame-ul Pandas df_numpy = df_data.to_numpy(dtype='float32')Dacă fișierul Data.txt arată, de exemplu, astfel:
10.2 5.1 11.5 6.3 ... 20.1 7.8Atunci, după citire, df_numpy va fi o matrice nx2. Pentru potrivirea Gaussiană, vom folosi de obicei o singură coloană de date.
3. Procesul de Potrivire Gaussiană prin Metoda Celor Mai Mici Pătrate
Din matricea noastră df_numpy, vom extrage prima coloană de date pentru a calcula o histogramă. Histograma ne va oferi o reprezentare a distribuției frecvențelor datelor noastre, care este apoi folosită pentru potrivirea curbei Gaussiane.
x_data = df_numpy[:, 0] # Selectăm prima coloană de date # Calculăm histograma. np.histogram returnează valorile de frecvență și marginile intervalelor (bins) hist, bin_edges = np.histogram(x_data, bins='auto', density=True) # density=True normalizează histograma la 1 # Aici, am modificat pentru a folosi density=True direct în np.histogram # Dacă density=False, atunci ar trebui să normalizăm manual: hist = hist / sum(hist) # Pentru a obține centrele intervalelor histogramei (x_hist) 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 # Valorile de probabilitate din histograma normalizatăAcum, definim din nou funcția Gaussiană pe care curve_fit o va folosi pentru optimizare. Observați că am adăugat un parametru C, un factor de scalare, care este util atunci când potriviți o histogramă (care poate să nu fie perfect normalizată la 1 în înălțime maximă).
# Calcularea valorilor FDP Gaussiane, dată fiind o variabilă aleatoare X și parametrii Gaussieni (C, media, sigma) def gaus(X, C, X_mean, sigma): return C * exp(-(X - X_mean)2 / (2 * sigma2)) # Calculăm estimări inițiale pentru medie și deviația standard din datele histogramei. # Acestea sunt folosite ca "ghiciri inițiale" (p0) pentru funcția curve_fit. mean = sum(x_hist * y_hist) / sum(y_hist) sigma = np.sqrt(sum(y_hist * (x_hist - mean)**2) / sum(y_hist)) # Corecție: sigma ar trebui să fie sqrt(varianța)Procesul de potrivire prin metoda celor mai mici pătrate (optimizare) este următorul:
# Procesul de potrivire Gaussiană prin metoda celor mai mici pătrate # p0: Ghiciri inițiale pentru parametrii [C, X_mean, sigma] # maxfev: Numărul maxim de apeluri ale funcției param_optimised, param_covariance_matrix = curve_fit(gaus, x_hist, y_hist, p0=[max(y_hist), mean, sigma], maxfev=5000)Funcția curve_fit încearcă să găsească valorile lui C, X_mean și sigma care minimizează suma pătratelor erorilor dintre y_hist și valorile prezise de funcția gaus. Parametrul p0 este esențial, deoarece oferă funcției curve_fit un punct de plecare pentru căutarea parametrilor optimi. O estimare inițială bună poate accelera convergența și poate preveni blocarea în minime locale.
Putem, de asemenea, să afișăm parametrii potriviți și erorile lor standard (calculate din matricea de covarianță):
print("Parametrii potriviți:") print("=====================================================") print(f"C = {param_optimised[0]:.4f} +- {np.sqrt(param_covariance_matrix[0,0]):.4f}") print(f"X_mean = {param_optimised[1]:.4f} +- {np.sqrt(param_covariance_matrix[1,1]):.4f}") print(f"sigma = {param_optimised[2]:.4f} +- {np.sqrt(param_covariance_matrix[2,2]):.4f}") print(" ")4. Plotarea Curbei Gaussiane Potrivite
În cele din urmă, vom vizualiza rezultatele. Vom plotă histograma originală a datelor și vom suprapune curba Gaussiană potrivită, folosind parametrii optimi calculați de curve_fit.

fig = plt.figure(figsize=(10, 6)) # Dimensiunea figurii pentru o mai bună vizualizare # Generăm un interval mai fin de puncte pentru a desena curba Gaussiană lin x_hist_2 = np.linspace(np.min(x_hist), np.max(x_hist), 500) # Plotăm curba Gaussiană potrivită plt.plot(x_hist_2, gaus(x_hist_2, *param_optimised), 'r-', linewidth=2, label='Potrivire Gaussiană') plt.legend() # Plotăm histograma originală a datelor # Utilizăm weights pentru a normaliza histograma la probabilitate, dacă nu a fost deja făcută weights = np.ones_like(x_data) / len(x_data) plt.hist(x_data, bins='auto', weights=weights, alpha=0.6, color='skyblue', label='Histograma Datelor') # Setarea etichetelor, titlului și grilei plotului plt.xlabel("Date: Variabilă Aleatoare") plt.ylabel("Probabilitate") plt.title("Potrivirea Curbei Gaussiane la Distribuția Datelor") plt.grid("on") plt.legend() plt.show()Această vizualizare ne permite să evaluăm vizual cât de bine se potrivește modelul Gaussian datelor noastre. O potrivire bună înseamnă că curba Gaussiană urmărește îndeaproape forma și tendința histogramei.
Înțelegerea Momentelor Distribuției
Pentru anumite scenarii simple, în special când distribuția Gaussiană nu este "tăiată" excesiv sau este foarte mică, potrivirea datelor Gaussiane nu necesită neapărat o rutină complexă de optimizare precum curve_fit. În aceste cazuri, simpla calculare a momentelor distribuției poate fi suficientă și mult mai rapidă.
Momentele unei distribuții sunt măsuri statistice care descriu forma acesteia. Primul moment central este media (μ), iar al doilea moment central este varianța (σ²), din care se derivează deviația standard (σ). Prin calcularea directă a mediei și deviației standard dintr-un set de date, putem obține rapid o estimare a parametrilor Gaussieni. Această metodă este rapidă, dar mai puțin robustă decât curve_fit atunci când datele sunt zgomotoase, incomplete sau au forme complexe.
Întrebări Frecvente (FAQ)
- Ce este o distribuție Gaussiană?
- O distribuție Gaussiană, sau distribuție normală, este o distribuție de probabilitate continuă, simetrică în jurul mediei sale, care descrie adesea fenomene naturale. Graficul său are forma unui "clopot".
- De ce este utilă potrivirea Gaussiană?
- Potrivirea Gaussiană este utilă pentru a modela date care urmează o distribuție normală, permițând estimarea parametrilor cheie (medie și deviație standard) ai procesului subiacent. Este folosită în controlul calității, analiza erorilor, modelarea fenomenelor fizice și multe altele.
- Ce biblioteci Python sunt necesare pentru potrivirea Gaussiană?
- Bibliotecile principale sunt
NumPypentru operații numerice,SciPy(în specialscipy.optimize.curve_fitșiscipy.stats) pentru funcționalități statistice și de optimizare, șiMatplotlib(sauSeaborn) pentru vizualizarea datelor. - Pot folosi această tehnică pentru alte distribuții?
- Absolut! Metoda
curve_fitdin SciPy este generică și poate fi folosită pentru a potrivi orice funcție matematică (nu doar Gaussiană) la un set de date. Trebuie doar să definiți funcția corespunzătoare distribuției dorite (Exponențială, Gamma, etc.) și să o pasați cătrecurve_fit. - Care este diferența dintre
stats.norm.pdfșicurve_fit? stats.norm.pdfeste o funcție care calculează densitatea probabilității pentru o distribuție normală dată (cu parametri specifici μ și σ). Pe de altă parte,curve_fiteste o funcție de optimizare care găsește parametrii μ și σ (și alți parametri, cum ar fi C) ai unei funcții (în cazul nostru, funcția Gaussiană) care se potrivește cel mai bine unui set de date observate.
Concluzie
În acest articol, am explorat conceptul de potrivire Gaussiană și am demonstrat cum poate fi implementată eficient în Python. De la înțelegerea fundamentelor distribuției normale și a funcției sale de densitate a probabilității, până la aplicarea practică a funcției curve_fit din SciPy, am acoperit pașii esențiali pentru a modela datele cu o curbă în formă de clopot.
Potrivirea Gaussiană este o tehnică valoroasă în arsenalul oricărui specialist în date, permițând extragerea de informații semnificative din distribuții de date complexe. Datorită bibliotecilor standard din Python, acest proces devine accesibil și ușor de realizat. Vă încurajăm să experimentați cu această tehnică pe diverse seturi de date pentru a vă consolida înțelegerea și a vă dezvolta încrederea în aplicarea sa.
Dacă vrei să descoperi și alte articole similare cu Ghid Complet: Potrivirea Gaussiană în Python, poți vizita categoria Fitness.
