12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- #!/usr/bin/python3
- import numpy as np
- from scipy import interpolate
- def ecdf(x):
- data = np.array(x)
- sorted_data = np.sort(data)
- # Calculer les probabilités cumulées
- n = len(sorted_data)
- y = np.arange(1, n+1) / n
- return y
- def gendata():
- # Générer des données suivant une distribution normale
- mean = 0 # Moyenne de la distribution normale
- std_dev = 1 # Écart-type de la distribution normale
- num_samples = 100 # Nombre d'échantillons à générer
- return np.random.normal(mean, std_dev, num_samples)
- data1 = gendata()
- data2 = gendata()
- x1 = sorted(data1)
- y1 = ecdf(data1)
- x2 = sorted(data2)
- y2 = ecdf(data2)
- absmin = max(min(x1), min(x2))
- absmax = min(max(x1), max(x2))
- # Créer une fonction d'interpolation linéaire
- f1 = interpolate.interp1d(x1, y1, kind='linear')
- # Générer des points pour l'interpolation
- x_interp = np.linspace(absmin, absmax, 1000)
- y_interp1 = f1(x_interp)
- # Créer une fonction d'interpolation linéaire
- f2 = interpolate.interp1d(x2, y2, kind='linear')
- # Générer des points pour l'interpolation
- y_interp2 = f2(x_interp)
- # Calculer l'erreur quadratique moyenne (RMSE)
- rmse = np.sqrt(np.mean((y_interp1 - y_interp2) ** 2))
- # Calculer l'erreur quadratique moyenne (MAE)
- mae = np.mean(abs(y_interp1 - y_interp2))
- # normalized RMSE, as y are 0 -> 1 it's just 100x
- # normalized MAE, as y are 0 -> 1 it's just 100x
- print("NRMSE: {}, NMAE: {}".format(100 * rmse, 100 * mae))
- import matplotlib.pyplot as plt
- # Tracer un histogramme des données générées
- plt.hist(data1, bins=30, color='skyblue', edgecolor='black')
- plt.hist(data2, bins=30, color='red', edgecolor='black')
- plt.xlabel('Valeurs')
- plt.ylabel('Fréquence')
- plt.title('Distribution normale générée aléatoirement')
- plt.show()
- # Tracer le nuage de points et la fonction d'interpolation
- plt.scatter(x1, y1, color='blue', label='Données réelles')
- plt.scatter(x2, y2, color='red', label='Données réelles')
- plt.plot(x_interp, y_interp1, color='orange', label='Données interpolées')
- plt.plot(x_interp, y_interp2, color='orange', label='Données interpolées')
- plt.xlabel('X')
- plt.ylabel('Y')
- plt.title('Interpolation linéaire à partir d\'un nuage de points')
- plt.legend()
- plt.show()
|