Está en la página 1de 6

Centro de Enseñanza Técnica Industrial

Plantel Colomos
Ingeniería en Desarrollo de Software
Sistemas Expertos

REPORTE DE PRÁCTICA

IDENTIFICACIÓN DE LA PRÁCTICA

Práctica 2 Nombre de la práctica Regresión lineal multivariable


Fecha 25/10/21 Nombre del profesor Alma Nayeli Rodríguez Vázquez
Nombre del estudiante Hector Fabricio Cisneros Sanchez

OBJETIVO
El objetivo de esta práctica consiste en implementar el método de regresión lineal multivariable para
predicción.

PROCEDIMIENTO
Realiza la implementación siguiendo estas instrucciones.
Implementa el método de regresión lineal multivariable en Matlab/Octave y en C++/Python. Para ello,
considera los siguientes requerimientos:
 Utiliza el set de datos del archivo “dataset_RegresionLinealMultivariable.txt”.
 Utiliza los siguientes valores para los parámetros iniciales:
a=vector de ceros, beta=0.8, iteraciones=600
 En la implementación con C++/Python no es necesario que grafiques.
 Reporta el error J y el valor final del vector a. Además, reporta el valor de h para los siguientes
datos de prueba
Dato de prueba 1: x1= 3000, x2=4, y=539900
Dato de prueba 2: x1= 1985, x2=4, y=299900
Dato de prueba 3: x1= 1534, x2=3, y=314900
 Comprueba tus resultados con los siguientes:
J= 2043280050.6028 a0= 340412.6596 a1= 109447.7964 a2= -6578.3548
Dato de prueba 1 x1= 3000 x2= 4 Salida correcta y= 539900 Predicción h= 472277.8551
Dato de prueba 2 x1= 1985 x2= 4 Salida correcta y= 299900 Predicción h= 330979.021
Dato de prueba 3 x1= 1534 x2= 3 Salida correcta y= 314900 Predicción h= 276933.0262

IMPLEMENTACIÓN
Agrega el código de tu implementación aquí.
%Grafica
plot3(x(:,1), x(:,2), y, 'ok', 'MarkerFaceColor', 'y')
xlabel('x1')
ylabel('x2')
zlabel('y')
hold on

%Normalizacion
[m,n] = size(x);
x_norm = zeros(m, n);
mu = mean(x);
sigma = std(x, 1);
1
Centro de Enseñanza Técnica Industrial
Plantel Colomos
Ingeniería en Desarrollo de Software
Sistemas Expertos
for i = 1 : n
x_norm(:, i) = (x(:, i) - mu(i)) / sigma(i);
end

%Graficar
figure(2)
plot3(x_norm(:,1), x_norm(:,2), y, 'ok', 'MarkerFaceColor', 'y')
xlabel('x1')
ylabel('x2')
zlabel('y')
hold on

%Agregar columna de unos


x = x_norm;
x = [ones(m, 1), x];

%parametros iniciales
n = n + 1;
a = zeros(n, 1);
beta = 0.8;
iterMax = 600;
iter = 1;

%CALCULAR LOS VALORES iniciales


for i = 1 : m
h(i, 1) = a' * x(i, :)';
end
J = (1/(2*m))*sum((h-y).^2);

while(iter <= iterMax)


convergencia(iter) = J;
for j = 1 : n
a(j) = a(j) - beta * (1 / m) * sum((h - y).* x(:, j));
end
for i = 1 : m
h(i, 1) = a' * x(i, :)';
end
J = (1/(2*m))*sum((h-y).^2);
iter = iter + 1;
end

%Graficar
figure(3)
plot(convergencia)

%Mostrar valores
disp("J: " + J);
disp("A0: " + a(1));
disp("A1: " + a(2));
disp("A2: " + a(3));

disp("Dato de prueba 1: x1= 3000, x2=4, Salida Correcta y=539900, Prediccion h=" +
h(5));
disp("Dato de prueba 2: x1= 1985, x2=4, Salida Correcta y=299900, Prediccion h=" +
h(6));
disp("Dato de prueba 3: x1= 1534, x2=3, Salida Correcta y=314900, Prediccion h=" +

2
Centro de Enseñanza Técnica Industrial
Plantel Colomos
Ingeniería en Desarrollo de Software
Sistemas Expertos
h(7));
Código Matlab/Octave

from math import fsum


import math

x = []
y = []

fileName="C:\\Users\\\skate\\Downloads\\datasetM.txt"
with open(fileName, "r") as tf:
lines = tf.read().split('\n')

x1 = []
x2 = []
for line in lines:
splitLine = line.rstrip().split(',')
x1.append(int(splitLine[0]))
x2.append(int(splitLine[1]))
y.append(int(splitLine[2]))

x.append(x1)
x.append(x2)
m = len(x1)
n = len(x)

x_norm = [[0]*m]*n

mu = []
mu.append(sum(x1) / m)
mu.append(sum(x2) / m)

sigma = []
op = 0
for num in x1:
op = op + ((num - mu[0]) ** 2)
sigma.append(math.sqrt(op / m))
op = 0
for num in x2:
op = op + ((num - mu[1]) ** 2)
sigma.append(math.sqrt(op / m))

temporal=[]
for i in range(m):
temporal.append((x1[i] - mu[0]) / sigma[0])
temporal1=[]
for i in range(m):
temporal1.append((x2[i] - mu[1]) / sigma[1])

x_norm[0] = temporal
x_norm[1] = temporal1

ones = [1] * m
3
Centro de Enseñanza Técnica Industrial
Plantel Colomos
Ingeniería en Desarrollo de Software
Sistemas Expertos
x_norm.insert(0, ones)

n = n + 1;
a = [0] * n;
beta = 0.8;
iterMax = 600
iter = 1

temp = []
filasX = []
for i in range(m):
temp = []
temp.append(ones[i])
temp.append(temporal[i])
temp.append(temporal1[i])
filasX.append(temp)

h = []
for i in range(m):
sum = 0
for j in range(len(filasX[0])):
sum = sum + a[j] * filasX[i][j];
h.append(sum)

hipY2 = []
index = 0
for valor in h:
hipY2.append((valor - y[index])**2)
index = index + 1

J = (1/(2*m))*fsum(hipY2)

temp = []
temp.append(ones)
temp.append(temporal)
temp.append(temporal1)

while(iter <= iterMax):

hy = []
index = 0
for valor in h:
hy.append((valor - y[index]))
index = index + 1

hyx = []
for i in range(n):
temporal = []
for j in range(m):
temporal.append(hy[j] * temp[i][j])
hyx.append(temporal);

4
Centro de Enseñanza Técnica Industrial
Plantel Colomos
Ingeniería en Desarrollo de Software
Sistemas Expertos
for j in range(len(a)):
a[j] = a[j] - beta *(1/m) * fsum(hyx[j]);

h = []
for i in range(m):
sum = 0
for j in range(len(filasX[0])):
sum = sum + a[j] * filasX[i][j];
h.append(sum)

hipY2 = []
index = 0
for valor in h:
hipY2.append((valor - y[index])**2)
index = index + 1

J = (1/(2*m))*fsum(hipY2)
iter = iter + 1;

print("J: " + str(J));


print("A0: " + str(a[0]));
print("A1: " + str(a[1]));
print("A2: " + str(a[2]));

print("Dato de prueba 1: x1= 3000, x2=4, Salida Correcta y=539900, Prediccion h=" + str(h[4]));
print("Dato de prueba 2: x1= 1985, x2=4, Salida Correcta y=299900, Prediccion h=" + str(h[5]));
print("Dato de prueba 3: x1= 1534, x2=3, Salida Correcta y=314900, Prediccion h=" + str(h[6]))

Código C++/Python

RESULTADOS
Agrega la(s) imagen(es) con los resultados obtenidos en los espacios indicados.

Gráfica de los datos Gráfica de convergencia

5
Centro de Enseñanza Técnica Industrial
Plantel Colomos
Ingeniería en Desarrollo de Software
Sistemas Expertos

Resultados de la ventana de comandos en la que se desplieguen los valores de J, a0, a1, a2,
los datos de prueba x con su salida correcta y y su predicción h
Resultados Matlab/Octave

Resultados C++/Python

CONCLUSIONES
Escribe tus observaciones y conclusiones.

Fue una practica muy retadora a la hora de implementar en Python mas sin embargo me dio otra perspectiva de
como implementar este tipo de algoritmos con mas datos

También podría gustarte