Skip to content

Instantly share code, notes, and snippets.

@BruJu
Last active Jun 30, 2020
Embed
What would you like to do?
Perceptron
# Script permettant de calculer les résultats de l'apprentissage d'un perceptron
# Ecrit dans le cadre de l'Ue Techniques d'Apprentissage Automatique du M2IA de Lyon 1
# (parce que calculer à la main des sommes de multiplications avec des virgules, c'est rigolo 5 minutes, mais pas 6)
# Paramètres
base_dapprentissage = [
(1, 6, 4, 1),
(1, 7, 5, 1),
(1, 11, 16, -1),
(1, 14, 11, -1),
(1, 16, 5, -1)
]
base_de_tests = [
(1, 1, 2, 1), # 1
(1, 2, 16, 1), #2
(1, 4, 9, 1), #3
(1, 8, 13, -1), #6
(1, 9, 9, -1) #7
]
poids = [10.0, 3.0, -2.0]
alpha = 0.1
# Implémentation
nb_param = len(poids)
donnee_actuelle = 0
def calculer_somme(vecteur_poids, transaction):
somme = 0
for i in range(len(vecteur_poids)):
somme = somme + vecteur_poids[i] * transaction[i]
return somme
est_stable = False
nb_passe = -1
while not est_stable:
nb_passe = nb_passe + 1
est_stable = True
for i in range(len(base_dapprentissage)):
t = base_dapprentissage[i]
somme = calculer_somme(poids, t)
if (somme < 0 and t[-1] > 0) or (somme > 0 and t[-1] < 0):
est_stable = False
for i in range(nb_param):
poids[i] = poids[i] + t[-1] * t[i] * alpha
print("somme trouvée = " + str(somme) + " ; poids = " + str(poids))
print("Nombre de passes instables sur les données : " + str(nb_passe))
print("Poids finaux = " + str(poids))
print("== Somme de la base d'apprentissage")
for t in base_dapprentissage:
somme = calculer_somme(poids, t)
print(somme)
print("== Analyse sur la base de tests")
matrice_confusion = [[0, 0], [0, 0]]
for t in base_de_tests:
somme = calculer_somme(poids, t)
print(str(t[-1]) + " / " + str(somme))
pos_classe = 0 if t[-1] == 1 else 1
pos_classe_predite = 0 if somme > 0 else 1
matrice_confusion[pos_classe][pos_classe_predite] = matrice_confusion[pos_classe][pos_classe_predite] + 1
print(matrice_confusion)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment