par SoS-Math(25) » dim. 11 déc. 2022 13:49
Bonjour Marguerite,
Je te propose de commencer par formater les données en Python (créer un data set) en lisant un fichier csv :
-- Modifie la ligne 3 pour avoir le bon chemin
--J'ai extrait seulement D130, Hauteur et Volume ici pour voir...
Code : Tout sélectionner
# -*- coding: utf-8 -*-
import csv #Pour l'export de données
import random
#=============Données=======================
#Données csv:
cheminCSV = 'D:\\Animaths\\Sos_IA\\VolChene.csv' #A modifier
data_set = []
with open(cheminCSV, 'r', newline='', encoding="utf-8") as csvfile:
spamreader = csv.reader(csvfile, delimiter=';', quotechar='|')
next(spamreader)#On enlève la première ligne
for row in spamreader:
data_set.append([float(row[4]), float(row[5]), float(row[6])])
print(data_set)
Ensuite, tu peux ajouter cela à ton code pour effectuer des tests comme ceci :
-- Tu peux tester avec d'autres valeurs de W
-- Le bilan n'est pas celui demandé dans tes documents, à toi de poursuivre
-- W = [0.348, -0.836, -0.215] #(Après un entrainement) sont des valeurs trouvées après un entrainement (deep learning) mais je ne sais pas si tu dois aller là
-- Il faudra put-être utiliser les autres données (âges...)
Code : Tout sélectionner
#=============Fonctions pour tester ===========
def forward(X, W):#Prédiction du volume exploitable
o = W[0]*X[0] + W[1]*X[1] + W[2] #Forward avec un bice
return o
def tests(D, W):
for X in D:#Pour chaque point du data set:
res = forward(X, W)
E = X[2]-res #Erreur
return W#On renvoie les poids (en vu d'ajustements eventuels
def bilan(D, W):#Exemple d'estimation performances:
sum = 0
max = 0
for X in D:
calc = (X[2] - forward(X, W))**2
sum += calc
if max < calc:
max = calc
return max, sum/len(D)
D = data_set
W = [1, 1, 0] #Valeurs à tester
#W = [0.348, -0.836, -0.215] #(Après un entrainement)
#W = [random.uniform(-1, 1), random.uniform(-1, 1), random.uniform(-1, 1)] #départ poids aleatoires
print("Valeurs initiales : ", W)
#Devons nous parcourir toutes les données du dataSet ? si > 20 oui sinon, on en choisi 20:
if len(D) > 20:
Dselect = random.sample(D, 20)#20 données extraites
else :
Dselect = D
print(tests(Dselect, W))
print("max et moyenne des carrés des écarts : ", bilan(D, W))
Enfin, pour y voir un peu plus clair, je t'ai affiché en 3D une idée (avec 2 valeurs d'entrées X : D120, Y : Hauteur et en sortie Z : Volume). Et un plan obtenu après entrainement : W = [0.348, -0.836, -0.215]
Cela te permettra peut-être de comprendre l'idée (il faudra ensuite ajouter les autres données)
Bon courage pour ce devoir difficile.
- Fichiers joints
-
Bonjour Marguerite,
Je te propose de commencer par formater les données en Python (créer un data set) en lisant un fichier csv :
-- Modifie la ligne 3 pour avoir le bon chemin
--J'ai extrait seulement D130, Hauteur et Volume ici pour voir...
[code]# -*- coding: utf-8 -*-
import csv #Pour l'export de données
import random
#=============Données=======================
#Données csv:
cheminCSV = 'D:\\Animaths\\Sos_IA\\VolChene.csv' #A modifier
data_set = []
with open(cheminCSV, 'r', newline='', encoding="utf-8") as csvfile:
spamreader = csv.reader(csvfile, delimiter=';', quotechar='|')
next(spamreader)#On enlève la première ligne
for row in spamreader:
data_set.append([float(row[4]), float(row[5]), float(row[6])])
print(data_set)[/code]
Ensuite, tu peux ajouter cela à ton code pour effectuer des tests comme ceci :
-- Tu peux tester avec d'autres valeurs de W
-- Le bilan n'est pas celui demandé dans tes documents, à toi de poursuivre
-- W = [0.348, -0.836, -0.215] #(Après un entrainement) sont des valeurs trouvées après un entrainement (deep learning) mais je ne sais pas si tu dois aller là
-- Il faudra put-être utiliser les autres données (âges...)
[code]#=============Fonctions pour tester ===========
def forward(X, W):#Prédiction du volume exploitable
o = W[0]*X[0] + W[1]*X[1] + W[2] #Forward avec un bice
return o
def tests(D, W):
for X in D:#Pour chaque point du data set:
res = forward(X, W)
E = X[2]-res #Erreur
return W#On renvoie les poids (en vu d'ajustements eventuels
def bilan(D, W):#Exemple d'estimation performances:
sum = 0
max = 0
for X in D:
calc = (X[2] - forward(X, W))**2
sum += calc
if max < calc:
max = calc
return max, sum/len(D)
D = data_set
W = [1, 1, 0] #Valeurs à tester
#W = [0.348, -0.836, -0.215] #(Après un entrainement)
#W = [random.uniform(-1, 1), random.uniform(-1, 1), random.uniform(-1, 1)] #départ poids aleatoires
print("Valeurs initiales : ", W)
#Devons nous parcourir toutes les données du dataSet ? si > 20 oui sinon, on en choisi 20:
if len(D) > 20:
Dselect = random.sample(D, 20)#20 données extraites
else :
Dselect = D
print(tests(Dselect, W))
print("max et moyenne des carrés des écarts : ", bilan(D, W))[/code]
Enfin, pour y voir un peu plus clair, je t'ai affiché en 3D une idée (avec 2 valeurs d'entrées X : D120, Y : Hauteur et en sortie Z : Volume). Et un plan obtenu après entrainement : W = [0.348, -0.836, -0.215]
Cela te permettra peut-être de comprendre l'idée (il faudra ensuite ajouter les autres données)
Bon courage pour ce devoir difficile.
[attachment=1]2X.png[/attachment]
[attachment=1]2X_plan.png[/attachment]