-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathperceptron.py
88 lines (82 loc) · 2.8 KB
/
perceptron.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
import os
import numpy as np
import pandas as pd
from sklearn.utils import shuffle
from sklearn.model_selection import train_test_split
os.chdir('datos')
datos = pd.read_csv("tirosL.csv")
#datos=shuffle(datos.iloc[0:100000])
#clases
Y=datos.iloc[:,7].values
#caracteristicas
X=datos.iloc[:,0:7].values
#aprendizaje
eta=0.01
#pesos iniciales
w=np.zeros(X.shape[1])#20 ceros
#datos para entrenamiento y prueba
train_data, test_data, train_y, test_y=train_test_split(X,Y,test_size=0.5)
#entrenamiento
vector=1
for xi, target in zip(train_data, train_y):
activation = np.dot(xi, w)
output = np.where(activation >= 0.0, 1, 0)
error = target - output
w += eta * error * xi
#if(error!=0):
#print(vector,"\t",target,"\t",output,"\t",error,"\t",w,"\n")
vector+=1
#print("Pesos Finales: ",w)
# Prueba
errores = 0
for xi, target in zip(test_data, test_y) :
activation = np.dot(xi, w)
output = np.where(activation >= 0.0, 1, 0)
if (target != output) :
errores += 1
print("{} vectores mal clasificados de {} ({}%)".format(errores, len(test_y),
errores/len(test_y)*100))
print("SEGUNDA RONDA con la mitad de los datos")
#FALTA CORREGIR DE AQUI EN ADELantE LAS variabLES NOmbres
# 2a ronda de entrenamiento
vectores = 0
shuffled_data = shuffle(list(zip(train_data, train_y)))
for xi, target in shuffled_data:
activation = np.dot(xi, w)
output = np.where(activation >= 0.0, 1, 0)
error = target - output
w += eta * error * xi
if (target != output) :
vectores += 1
print("{} vectores de entrenamiento mal clasificados de {} ({}%)".
format(vectores, len(train_y), vectores/len(train_y)*100))
# Prueba
errores = 0
for xi, target in zip(test_data, test_y) :
activation = np.dot(xi, w)
output = np.where(activation >= 0.0, 1, 0)
if (target != output) :
errores += 1
print("{} vectores mal clasificados de {} ({}%)".format(errores, len(test_y),
errores/len(test_y)*100))
print("TERCERA RONDA con datos completos")
# 3a ronda de entrenamiento... con todos los datos
vectores = 0
for xi, target in zip(X, Y):
activation = np.dot(xi, w)
output = np.where(activation >= 0.0, 1, 0)
error = target - output
w += eta * error * xi
if (target != output) :
vectores += 1
print("{} vectores de entrenamiento mal clasificados de {} ({}%)".
format(vectores, len(Y), vectores/len(Y)*100))
# Prueba
errores = 0
for xi, target in zip(test_data, test_y) :
activation = np.dot(xi, w)
output = np.where(activation >= 0.0, 1, 0)
if (target != output) :
errores += 1
print("{} vectores mal clasificados de {} ({}%)".format(errores, len(test_y),
errores/len(test_y)*100))