|
@@ -0,0 +1,79 @@
|
|
|
+#!/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()
|