## INCISO 8.C: !git clone https://github.com/mvera1412/tallerPS.git # Para extraer archivos de gihub !pip install geopandas # Librerías: import numpy as np import pandas as pd import sklearn from sklearn.linear_model import LinearRegression import matplotlib.pyplot as plt from numpy.linalg import inv # Archivo a utilizar: ruta_archivo = '/content/tallerPS/data/represa.csv' datos = pd.read_csv(ruta_archivo) datos # ------------------------------------------------------------------------------ # PASO 1: Objetos a usar orden = 8 # Orden del regresor polinómico. data_train = datos.get(["Xtrain","ytrain"]) #Comentario: Las últimas filas poseen datos perdidos (Nan) -> Elimino esas filas data_train = data_train.drop(list(np.arange(10,21,1))) X_train = data_train.get(["Xtrain"]) #------------------------------------------------------------------------------- # PASO 2: Construir la tabla con X^1, X^2, . . .X^(orden) df_Mtx = pd.DataFrame() # DATAFRAME VACÍO. En este objeto voy colocando las columnas X^i. for i in np.arange(1, orden+1, 1): aux = X_train.pow(i) nombre_columna = "X^{}".format(i) # - - - - - - - - - # Normalización de la columna X^i (método de normalización z) # OPCION 1: Normalización z #aux_norm = (aux - aux.mean())/aux.std() # OPCION 2: Normalización máx. mín: #max = aux.max() #min = aux.min() #aux_norm = (aux - min)/(max - min) # - - - - - - - - - # Agregar columna a df_Mtx df_Mtx[nombre_columna] = aux # Sin normalización #df_Mtx[nombre_columna] = aux_norm # Con normalización #------------------------------------------------------------------------------- # PASO 3: Construir el regresor polinómico. Hallar los valores de los coeficientes del polinomio. #Comentario: Se agrega a la tabla la columna de unos, la cual está asociada con el #termino independiente del polinomio: df_Mtx.insert(0, 'X^0', 1) Mtx = df_Mtx.to_numpy() # Mtx a numpy y = data_train.get(['ytrain']).to_numpy() # ytrain a numpy w = np.linalg.inv(Mtx.T @ Mtx) @ Mtx.T @ y # Coeficientes # Regresor polinómico x = np.arange(-65,45,1) len = np.size(x) y = np.zeros(len) w = w[::-1] for i in np.arange(0,len,1): y[i] = np.polyval(w, x[i]) plt.figure() ax1 = datos.plot.scatter(x="Xtrain",y="ytrain",c='Red',label = "ytrain vs Xtrain") datos.plot.scatter(x="Xval",y="yval",c='Green',ax = ax1,label = "yval vs Xval") datos.plot.scatter(x="Xtest",y="ytest",c='Blue',ax = ax1,label = "ytest vs Xtest") plt.plot(x, y, c='Orange', label = 'Regresión polinómica') ax1.legend()