Outils pour utilisateurs

Outils du site


nsi:tds:ia:neurones

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
nsi:tds:ia:neurones [2022/04/22 09:36] – [Exercice 1] goupillwikinsi:tds:ia:neurones [2022/04/22 11:37] (Version actuelle) – [Module sklearn] goupillwiki
Ligne 285: Ligne 285:
     Y = [] # étiquettes : 1 pour setosa, 0 sinon     Y = [] # étiquettes : 1 pour setosa, 0 sinon
     for row in reader:     for row in reader:
-        l = float(individu_brut["petal_length"]) +        l = float(row ["petal_length"]) 
-        w = float(individu_brut["petal_width"])+        w = float(row ["petal_width"])
         X.append((l,w))         X.append((l,w))
-        if individu_brut['species'] == 'setosa':+        if row['species'] == 'setosa':
             Y.append(1)             Y.append(1)
         else:         else:
Ligne 303: Ligne 303:
 # vous pouvez voir qu'il ne se trompe pas ! # vous pouvez voir qu'il ne se trompe pas !
 print(rn.predict(X)) print(rn.predict(X))
 +</code>
 +
 +Si on veut étendre la prédiction aux virginica et versicolor, le résultat n'est pas bon. Pour mieux faire, on ajoute la prise en compte des sépales. De plus, on n'est pas obligés d'imposer 1 et 0 en sortie. On peut directement indiquer les étiquettes désirées.
 +
 +<code python>
 +import csv
 +from sklearn.linear_model import Perceptron
 +
 +with open('iris.csv', encoding='utf8') as file:
 +    reader = csv.DictReader(file, delimiter=',')
 +    X = [] # paires (petal_length, petal_width)
 +    Y = [] # étiquettes : 1 pour setosa, 0 sinon
 +    for row in reader:
 +        pl = float(row ["petal_length"])
 +        pw = float(row ["petal_width"])
 +        sl = float(row["sepal_length"])
 +        sw = float(row["sepal_width"])
 +        X.append((pl, pw, sl, sw))
 +        Y.append(row['species'])
 +
 +# création du réseau
 +rn = Perceptron(tol=1e-3)
 +
 +# apprentissage
 +rn.fit(X, Y)
 +
 +# on peut voir ce que prédit notre réseau pour les fleurs du fichier
 +# on obtient une liste de 0 et de 1 correspondant aux espèces
 +# vous pouvez voir qu'il ne se trompe pas !
 +print(rn.predict(X))
 +
 +# et on peut faire un compte des succès :
 +Yp = rn.predict(X)
 +count = 0
 +for i in range(len(Y)):
 +    if Y[i] == Yp[i]:
 +       count += 1
 +print(count/len(Y))
 +</code>
 +
 +On obtient environ 95 % de succès !
 +
 +Le travail de formatage est un peu fastidieux. On gagne beaucoup de temps en utilisant Pandas.
 +
 +<code python>
 +import pandas
 +from sklearn.linear_model import Perceptron
  
-# On peut mieux faire en utilisant pandas 
-import pandas # pandas beaucoup plus puissant que csv 
 train = pandas.read_csv("iris.csv") train = pandas.read_csv("iris.csv")
 rn = Perceptron(tol=1e-3) rn = Perceptron(tol=1e-3)
-X = train[['sepal_length', 'sepal_length', 'petal_length', 'petal_width']] +X = train[['sepal_length', 'sepal_width', 'petal_length', 'petal_width']] 
-Y = train[['species']]+Y = train['species']
 rn.fit(X, Y) rn.fit(X, Y)
 print(rn.predict(X)) print(rn.predict(X))
nsi/tds/ia/neurones.1650612976.txt.gz · Dernière modification : de goupillwiki