nsi:tds:ia:neurones
Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
| nsi:tds:ia:neurones [2022/04/21 14:33] – [Gradient] goupillwiki | nsi:tds:ia:neurones [2022/04/22 11:37] (Version actuelle) – [Module sklearn] goupillwiki | ||
|---|---|---|---|
| Ligne 85: | Ligne 85: | ||
| color indique la couleur désirée | color indique la couleur désirée | ||
| """ | """ | ||
| - | x = [item[" | + | x = [item[" |
| - | y = [item[" | + | y = [item[" |
| if len(x) > 0: | if len(x) > 0: | ||
| plt.scatter(x, | plt.scatter(x, | ||
| - | plot_sub_cloud(' | + | plot_sub_cloud(' |
| - | plot_sub_cloud(' | + | plot_sub_cloud(' |
| - | plot_sub_cloud(' | + | plot_sub_cloud(' |
| plt.legend() | plt.legend() | ||
| plt.show() | plt.show() | ||
| Ligne 195: | Ligne 195: | ||
| ==== Exercice 2 ==== | ==== Exercice 2 ==== | ||
| - | Dans le fichier | + | Vous pouvez reprendre |
| - | * Écrivez une fonction '' | + | |
| - | | + | |
| - | | + | * '' |
| - | | + | * '' |
| + | - Écrivez une fonction '' | ||
| + | | ||
| + | | ||
| + | | ||
| * $g_a = \sum_{individus} (s-s_{attendu})\cdot f'(h) \cdot x$ | * $g_a = \sum_{individus} (s-s_{attendu})\cdot f'(h) \cdot x$ | ||
| * $g_b = \sum_{individus} (s-s_{attendu})\cdot f'(h) \cdot y$ | * $g_b = \sum_{individus} (s-s_{attendu})\cdot f'(h) \cdot y$ | ||
| * $g_c = \sum_{individus} (s-s_{attendu})\cdot f'(h)$ | * $g_c = \sum_{individus} (s-s_{attendu})\cdot f'(h)$ | ||
| - | | + | |
| $$(a,b,c) \leftarrow (a -\lambda\cdot g_a, b - \lambda \cdot g_b, c - \lambda\cdot g_c)$$ | $$(a,b,c) \leftarrow (a -\lambda\cdot g_a, b - \lambda \cdot g_b, c - \lambda\cdot g_c)$$ | ||
| Ligne 210: | Ligne 214: | ||
| On pourra utiliser une constante '' | On pourra utiliser une constante '' | ||
| - | Le fichier | + | Exécutez le calcul et vérifiez que le triplet $(a, b, c)$ obtenu est valide. |
| + | |||
| + | ==== Base d'apprentissage, | ||
| + | |||
| + | //On peut dire aussi entraînement pour apprentissage.// | ||
| + | |||
| + | Comme vous l'avez vu, il nous faut un fichier de données pour entraîner notre neurone. | ||
| + | |||
| + | On souhaite bien-sûr que notre neurone, une fois entraîné, ne fasse pas (ou très peu) d'erreurs sur les items de cette base. | ||
| + | |||
| + | Mais ça ne suffit pas : nous voulons que le neurone réponde juste pour des items qui n'étaient pas dans la base (sinon quel intérêt ?) | ||
| + | |||
| + | Pour vérifier que c'est bien le cas, on constitue une base de tests contenant d'autres individus, absents de la base d' | ||
| ===== Réseau ===== | ===== Réseau ===== | ||
| Ligne 258: | Ligne 274: | ||
| Ici '' | Ici '' | ||
| - | Le fichier | + | Voici un exemple que vous pouvez tester. |
| + | |||
| + | <code python> | ||
| + | import csv | ||
| + | from sklearn.linear_model import Perceptron | ||
| + | |||
| + | with open('iris.csv', encoding=' | ||
| + | reader = csv.DictReader(file, | ||
| + | X = [] # paires (petal_length, | ||
| + | Y = [] # étiquettes : 1 pour setosa, 0 sinon | ||
| + | for row in reader: | ||
| + | l = float(row [" | ||
| + | w = float(row [" | ||
| + | X.append((l, | ||
| + | if row[' | ||
| + | Y.append(1) | ||
| + | else: | ||
| + | Y.append(0) | ||
| + | |||
| + | # 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)) | ||
| + | </ | ||
| + | |||
| + | 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 | ||
| + | |||
| + | <code python> | ||
| + | import csv | ||
| + | from sklearn.linear_model import Perceptron | ||
| + | |||
| + | with open(' | ||
| + | reader = csv.DictReader(file, | ||
| + | X = [] # paires (petal_length, | ||
| + | Y = [] # étiquettes : 1 pour setosa, 0 sinon | ||
| + | for row in reader: | ||
| + | pl = float(row [" | ||
| + | pw = float(row [" | ||
| + | sl = float(row[" | ||
| + | sw = float(row[" | ||
| + | X.append((pl, | ||
| + | Y.append(row[' | ||
| + | |||
| + | # création du réseau | ||
| + | rn = Perceptron(tol=1e-3) | ||
| + | |||
| + | # apprentissage | ||
| + | rn.fit(X, Y) | ||
| + | |||
| + | # on peut voir ce que prédit | ||
| + | # 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/ | ||
| + | </ | ||
| + | |||
| + | 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 | ||
| + | |||
| + | train = pandas.read_csv(" | ||
| + | rn = Perceptron(tol=1e-3) | ||
| + | X = train[[' | ||
| + | Y = train[' | ||
| + | rn.fit(X, Y) | ||
| + | print(rn.predict(X)) | ||
| + | </ | ||
| + | |||
| + | <WRAP important> | ||
| + | Dans cet exemple, j' | ||
| + | </ | ||
| + | |||
| + | ===== Exemples d' | ||
| + | |||
| + | Vous pouvez | ||
nsi/tds/ia/neurones.1650544409.txt.gz · Dernière modification : de goupillwiki
