-
Notifications
You must be signed in to change notification settings - Fork 0
/
Adaline.m
133 lines (110 loc) · 3.25 KB
/
Adaline.m
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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
%%%%%%%%Variables a leer en txt%%%%%%%
%conjunto de entrenamiento
archivo=input('Ingrese el nombre del archivo con el conjunto de entrenamiento: ','s')
conjuntoE=load(archivo)
%Condiciones de finalizacion
eitI=input('Ingrese el valor de eit: ')
itmax=input('Ingrese el numero de itmax: ')
%factor de aprendizaje
alfa=input('Ingrese el valor de alfa: ')
%Variables del proceso de aprendizaje
i=0
[datos,t] = size(conjuntoE)
entradas=t-1
iteraciones=1
eit=0
%pesos sinapticos
w=rand(1,entradas)
%variables del programa
ar_salida=input('Ingrese un nombre para el archivo de salida: ','s')
fin=0 %0:por iteraciones, 1:por valor de error
%variables para archivos
salida=fopen(ar_salida, 'w')
graf=fopen('grafica.txt', 'w')
graf2=fopen('eit.txt', 'w')
fprintf(salida, 'RESULTADOS: \n\n')
fprintf(salida, 'Iteracion 0:\n')
for i=1:entradas
fprintf(salida, '\tw%d=%.4f', i, w(i))
fprintf(graf, '%.4f ', w(i))
end
fprintf(salida, '\n\n')
fprintf(graf, '%.4f\n', 0)
%%%%%%%Proceso de aprendizaje%%%%%%%
while(iteraciones<itmax+1)
fprintf(salida, '\nIteracion %d:\n', iteraciones)
eit=0
for j=1:datos
%calculo de a
a=0
for k=1:entradas
a=a+(w(k)*conjuntoE(j,k))
end
%calculo de e, suma de eit
e=(conjuntoE(j, t)-a).^2
eit=eit+e
fprintf(salida, 'd%d->', j)
%%calculo del incremento
for k=1:entradas
w(k)=w(k)+(2*alfa*conjuntoE(j,k)*(conjuntoE(j, t)-a))
fprintf(salida, '\tw%d=%.4f', k, w(k))
fprintf(graf, '%.4f ', w(k))
end
fprintf(salida, '\te%d=%.4f\n', j, e)
fprintf(graf, '%f\n', e)
end
%calculo de eit
eit=eit/datos
fprintf(graf2, '%.4f\n', eit)
%se guardan los valores de la iteracion: w y eit
fprintf(salida, '\nValores finales:', iteraciones)
for i=1:entradas
fprintf(salida, '\tw%d=%.4f', i, w(i))
end
fprintf(salida, '\teit=%.4f\n\n', eit)
%control de las iteraciones
iteraciones=iteraciones+1
rondas=iteraciones
%el algoritmo finaliza, el error es aceptable
if(eit<=eitI)
iteraciones=itmax+1
fin=1 %se finaliza por valor de error
end
end
fclose(graf)
fclose(graf2)
%%%%%%%Formato para el archivo de salida%%%%%%%
if(fin==1)
fprintf(salida, '\tAPRENDIZAJE EXITOSO!\n\nFinalizacion por valor de error.\nIteraciones=%d', rondas-1)
else
fprintf(salida, '\tAPRENDIZAJE NO EXITOSO\n\nFinalizacion por iteraciones.\nIteraciones=%d', rondas-1)
end
fclose(salida)
%%%%%%%graficacion%%%%%%%
valores=load('grafica.txt')
eitval=load('eit.txt')
[p1,p2] = size(valores)
pesos=valores(1:p1,1:entradas)
errores=valores(1:p1,entradas+1:entradas+1)
aux=datos:datos:p1
subplot(2,1,1)
for i=1:entradas
p1 = plot(pesos(:,i),'DisplayName',sprintf('w%d',i),'color',rand(1,3));
hold on;
legend ('-DynamicLegend','Location' , 'northeastoutside')
end
hold off;
title('Pesos sinapticos');
xlabel('i')
ylabel('wi')
grid on
subplot(2,1,2)
plot(errores, 'DisplayName','ei','color',rand(1,3))
hold on;
plot(aux, eitval, 'DisplayName','eit','color',rand(1,3))
hold off;
legend ('-DynamicLegend','Location' , 'northeastoutside')
title('Valores de ei/eit');
xlabel('i/iteraciones')
grid on
ylabel('ei/eit')