A煤n no tienes acceso a esta clase

Crea una cuenta y contin煤a viendo este curso

Un modelo de regresi贸n

18/28
Recursos

Aportes 29

Preguntas 1

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesi贸n.

en el video no explican de donde salen estos valores

y bueno para hallarlos seria algo as铆:

Para ver el n煤mero de filas y columnas, simplemente usamos df.shape
.
y para ver el total o medida df.size

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

df = pd.read_csv('C:/Users/PERSONAL/OneDrive/Documents/Ciencia de datos-DESKTOP-884AA0V/algebra lineal/income_db_gorg_283cf1bb-74a9-4cf5-9255-da690e2b3e64.csv')

def predicion(x):
    v = 4152.02
    beta = np.array([6.55490348e+02,5.75918372e+02,-2.94216316e-01])
    return [email protected] + v

X = df[['Lat','Lon','Zip_Code']].values
Y_hat = predicion(X)
Y = df['Mean'].values

fig, ax = plt.subplots(1,1,figsize = (7,7),dpi = 120)

ax.scatter(Y_hat,Y,marker = 'o',color = "red")
ax.plot(Y,Y,ls ='--')
plt.show()

me di贸 esto:

El vector beta esta mal el segundo par谩metro, el segundo valor deber铆a ser neg谩tivo, realice el ejercicio con sklearn para comprobar.
beta = [ 6.55490348e+02, -5.75918372e+02, -2.94216316e-01]
Si mejoran los resultados, pero muy poco.

# %% [markdown]
# # Ejercicio

# %%
from sklearn.linear_model import LinearRegression


# %%
X = df[['Lat', 'Lon', 'Zip_Code']]
y = df['Mean']
regressor = LinearRegression()
regressor.fit(X, y)


# %%
y_pred = regressor.predict(X)


# %%
regressor.coef_, regressor.intercept_
# (array([ 6.55490348e+02, -5.75918372e+02, -2.94216316e-01]), 4152.027883761009)


# %%
fig, ax = plt.subplots(1,1,figsize=(7,7),dpi=120)

ax.scatter(y_pred,y,marker='o',color='red')
ax.plot(y,y,ls='--')
plt.show()


# %%
from sklearn import metrics


# %%
print('Root Mean Squared Error:', np.sqrt(metrics.mean_squared_error(y, y_pred)))
# Root Mean Squared Error: 29957.858952859144


# %%
print('R^2: ',metrics.r2_score(y, y_pred))
# R^2:  0.03210950150675185


Parece ser que no mejora, al contrario, empeora la predicci贸n:

Mi c贸digo:

def pred(x):
    beta = np.array([6.55490348*pow(10,2),5.75918372*pow(10,2),-2.94216316*pow(10,-1)])
    v = 4152.02
    return x.dot(beta) + v

X = df[['Lat','Lon','Zip_Code']].values

Y_hat = pred(X)
Y = df['Mean'].values

fig, ax = plt.subplots(1,1,figsize=(7,7),dpi=120)

ax.scatter(Y_hat,Y,marker ='o',color='red')
ax.plot(Y,Y,ls='--')
plt.xlabel("Y estimada")
plt.ylabel("Y real")
plt.show()

Hola a todos, buenas tardes por estos lados.
En mi caso, al tratar de correr el programa me da un error ya que no lee el archivo icome鈥 aunque lo descargu茅 y tambi茅n lo sub铆 al Drive.
Observo lo realizado por otros compa帽eros, agregar el Zip_code y cambiar 鈥渧鈥 y 鈥渂eta鈥 que el resultado no mejora; es decir, los datos se trasladan hacia la izquierda en lugar de colocarse alrededor de la l铆nea verde punteada (ideal).
Sigo revisando mi colab,
saludos

veo que es concurrente la grafica que sale en este ejercicio, a mi tambien me resulto lo mismo, sin embargo rescato como estoy cambiando y ampliando mi zonda de confort, al inicio no me agradaba usar Colab, incluso generaba incomodidad, sin embago ahora esta super!, me parece super practico! espero que clases mas adelante se logre ver que sucedio con este ejercicio. Saludos Comunidad Platzi!

def predict(x):
  v= 4152.02
  b = np.array([6.55490348*np.exp(0.2),5.75918372*np.exp(0.2),-2.94216316*np.exp(-0.1)])
  y= [email protected] + v
  return y

X = df[['Lat','Lon','Zip_Code']].values

Y_ha =predict(X)

y = df['Mean'].values

fig, ax = plt.subplots(1,1,figsize=(7,7),dpi=120)
ax.scatter(Y_ha,y,marker ='o',color='red')
ax.plot(Y,Y,ls='--')
plt.show()


A mi me dio esto:
![()

def pred1(x):   
  beta = np.array([6.55490348 * np.exp(0.2), 5.75918372 * np.exp(0.2), -2.94216316*np.exp(-0.1)])
  v = 4152.02
  return [email protected] + v

X = df[['Lat','Lon','Zip_Code']].values

Y = df['Mean']
aprox = pred1(X)

fig, ax = plt.subplots(1,1,figsize=(7,7),dpi=120)

ax.scatter(aprox,Y,marker ='o',color='green')
ax.plot(Y,Y)
plt.show()```

B谩sicamente el archivo definitions.pdf contiene el resultado de: 鈥渄finfo()鈥.

Parece que a todos nos queda el mismo gr谩fico, el cual es dif铆cil saber si est谩 bien o mal para empezar. Lo que veo es que al a帽adir el Zip Code los resultados parecen empeorar.

NO MEJORA, es mi respuesta a la pregunta que hace Ulises sobre introducir un tercer regresor, les comparto mi predicci贸n:

Creo que no mejora la predicci贸n debido a que el ZipCode pr谩cticamente es la misma informaci贸n que latitud y longitud.

Les comparto los resultados de mi ejercicio. Adem谩s de graficar la predicci贸n incluyendo el Zip Code, grafiqu茅 el error e hice otras versiones de las gr谩ficas s贸lo considerando los primeros 100 datos. Esto simplemente con motivos visualizar m谩s claramente las magnitudes del error.

def pred2(x):
    beta = np.array([6.55490348e2,5.75918372e2,-2.94216316e-1])
    v = 4152.02
    return [email protected] + v

X = df[['Lat','Lon','Zip_Code']].values
Y_hat = pred2(X)
Y = df['Mean'].values

fig, ax = plt.subplots(2,1,figsize=(14,14),dpi=120)

ax[0].scatter(Y_hat,Y,marker ='o',color='red')
ax[0].plot(Y,Y,ls='--')
ax[0].set_title('Prediction for Mean Income')
ax[1].scatter(np.arange(0,len(X),1),Y-Y_hat,marker='x')
ax[1].set_title('Prediction error')
plt.show()
fig2, ax2 = plt.subplots(2,1,figsize=(14,14),dpi=120)

a, b = 0, 100
Y_hat_s = Y_hat[a:b]
Y_s = Y[a:b]

ax2[0].scatter(Y_hat_s,Y_s,marker ='o',color='red')
ax2[0].plot(Y_s,Y_s,ls='--')
ax2[0].set_title('Prediction for Mean Income (First 100 Data points)')
ax2[1].plot(np.arange(0,len(Y_s),1),Y_s-Y_hat_s,ls='solid',color='black',label='Error')
ax2[1].scatter(np.arange(0,len(Y_s),1),Y_s,marker="x",label='Expected value')
ax2[1].scatter(np.arange(0,len(Y_s),1),Y_hat_s,marker="o",color='red',label='Prediction')
ax2[1].set_title('Prediction error (First 100 Data points)')
ax2[1].legend()
plt.show()

Ejercicio propuesto en la clase:

驴Mejora la predicci贸n al introducir un nuevo regresor?
R: No, no mejora, la predicci贸n empeora. Esto se puede observar en la comparaci贸n de los datos en la gr谩fica de dispersi贸n mostrada abajo, los puntos rojos corresponden al conjunto de puntos cuando utilizamos dos regresores y el conjunto de puntos azules cuando utilizamos tres regresores.

Esta fue la gr谩fica obtenida del ejercicio:

Este fue el c贸digo utilizado en el ejercicio:

def predict(x):
    beta = np.array([6.55490348*np.exp(0.2),5.75918372*np.exp(0.2),-2.94216316*np.exp(-0.1)])
    v = 4152.02
    return [email protected] + v

X = df[['Lat','Lon','Zip_Code']].values
Y_Hat = predict(X)
Y1 = df['Mean'].values

fig, ax = plt.subplots(1,1,figsize=(7,7),dpi=120)

ax.scatter(Y_Hat,Y1,marker ='o',color='blue')
ax.scatter(Y_hat,Y,marker ='o',color='red')
ax.plot(Y1,Y1,ls='--', color= 'black')

plt.show()

驴Mejor贸 la predicci贸n al introducir un nuevo predictor? En este caso Zip Code?
En absoluto. El modelo es a煤n peor.

驴Mejora la preducci贸n al introducir un nuevo regresor?
No mejora, al contrario empeora

Ya que queda un poco raro el resultado del ejercicio, retoque los parametros y puse que todos sean positivos y me quedo asi:

No mejoro, y los datos parecen no tener relaciona como si estuvieran en unidades o rangos diferentes.

import matplotlib.pyplot as plt 
import pandas as pd 
import numpy as np

def pred(x):
    beta = np.array([6.55490348e+02, 5.75918372e+02, -2.94216316e-01])
    v = 4152.02
    return [email protected] + v

if __name__ == '__main__':

    df = pd.read_csv('income_db.csv')
    #print(df.head()) # toda la data, y por cada columna es un vector.
    #print(df.columns) # para ver columnas 
    print("驴Que data contiene?")
    print(df.head())

    print("驴Que tama帽o tiene?")
    print(f'Tiene {len(df)*len(df.columns)} datos y {len(df)} reglones o elementos')

    X = df[['Lat','Lon','Zip_Code']].values
    Y_hat = pred(X)
    #print(Y_hat)
    Y = df['Mean'].values
    #print(Y)

    fig, ax = plt.subplots(1,1,figsize=(7,7),dpi=120)
    ax.scatter(Y_hat, Y, marker='o', color='red')
    ax.plot(Y, Y, ls='--')
    plt.show()


Cre贸 que no mejor贸鈥 o lo hice mal 驴?

Introduciendo el Zip_Code y las constantes dadas, la predicci贸n desmejora.

import matplotlib.pyplot as plt # Para poder realizar visualizaciones

import pandas as pd # Para poder acceder a pandas

import numpy as np # Para poder tener vectores

df = pd.read_csv('income_db_GORG.csv')

df.head()

def pred(x):

    beta = np.array([6.55490348e+02,5.75918372e+02,-2.94216316e-01])

    v = 4152.02

    return [email protected] + v

X = df[['Lat','Lon','Zip_Code']].values

Y_hat = pred(X)

Y = df['Mean'].values

fig, ax = plt.subplots(1,1,figsize=(7,7),dpi=120)

鈥

ax.scatter(Y_hat,Y,marker ='o',color='red')

ax.plot(Y,Y,ls='--')

plt.show()

![](C:\Users\Jared\Documents\Ciencia de Datos Platzi\Recursos\Algebra Lineal\Captura.png)

Compar茅 los dos casos con el error cuadr谩tico medio:

error sin zip_code = 908195469.3700452
error con zip_code = 45642907501.28439

Al agregar Zip_Code el error aument贸 馃槮

import matplotlib.pyplot as plt # Para poder realizar visualizaciones
import pandas as pd # Para poder acceder a pandas
import numpy as np # Para poder tener vectores


def train(x,y):
  #LINALG.INV:CALCULA LA INVERSA MULTIPLICATIVA DE UNA MATRIZ
  #@:MULTIPLICACION MATRICIAL
  return np.linalg.inv([email protected])@([email protected])


def pred(x,b0,b1,b2,v):
  beta = np.array([b0,b1,b2])
  return [email protected] + v

#VALUES:RETORNA NDARRAY
X = df[['Lat','Lon','Zip_Code']].values
#COLUMN_STACK(A,B):CONCATENA MATRICES, COLUMNAS
X_1 = np.column_stack((X, np.ones(len(X))))
Y = df['Mean'].values

result = train(X_1,Y)

print(result)
b0,b1,b2,v=result[0],result[1],result[2],result[3]
Y_hat = pred(X,b0,b1,b2,v)

#SUBPLOTS(NROWS=1,NCOLS=1, ,DPI=100):CREA UN CONJUNTO DE FIGURAS
#DPI:RESOLUCION DE LA FIGURA
#FIGSIZE(ANCHO=6.4, ALTO=4.8):ANCHO Y ALTO EN PULGADAS
#RETORNA FIGURE, AXES
fig, ax = plt.subplots(1,1,figsize=(7,7),dpi=60)

#SCATTER(X,Y):GRAFICO DE DISPERSION DE Y FRENTE A X
ax.scatter(Y_hat,Y,marker ='o',color='red')
#ax.scatter(Y,Y_hat,marker ='o',color='red')
ax.plot(Y,Y,ls='--')
plt.show()

def pred(x):
beta = np.array([6.55490348e+02 +, 5.75918372e+02, -2.94216316e-01])
v = 4152.02
return [email protected] + v

print(type(df[鈥楲at鈥橾)) #Nos muestra el tipo de la columna 'Lat鈥
print(df[鈥楲at鈥橾) #Nos muestra la columna 鈥楲at鈥

print(type(df[鈥楲at鈥橾.values)) #Convertir una clase pandas en un numpy array
print(df[鈥楲at鈥橾.values) #Convertir una clase pandas en un numpy array

X = df[[鈥楲at鈥,鈥楲on鈥,鈥榋ip_Code鈥橾].values #Queremos un numpy array con dos datos por linea.

Y_hat = pred(X)

Y = df[鈥楳ean鈥橾.values

fig, ax = plt.subplots(1,1,figsize=(7,7), dpi=120) #Dibuja los ejes

ax.scatter(Y_hat, Y, marker = 鈥榦鈥,color = 鈥榬ed鈥) #Se dibuja los puntos de las coordenadas (Y_hat,Y)
ax.plot(Y,Y,ls=鈥欌撯) #Se dibuja la linea de las coordenadas (y,y)
plt.show() #Muestra el grafico

no tiene pinta de mejorar a帽adiendo el nuevo parametro

Us茅 este c贸digo:

import matplotlib.pyplot as plt # Para poder realizar visualizaciones
import pandas as pd # Para poder acceder a pandas
import numpy as np # Para poder tener vectores

df = pd.read_csv('/income_db_gorg.csv')

def pred(x):
    beta = np.array([6.5549034 + 2 , 5.75918372 + 2 , -2.94216316 - 1])
    v = 4152.02
    return [email protected] + v

X = df[['Lat','Lon','Zip_Code']].values
Y_hat = pred(X)
Y = df['Mean'].values

fig, ax = plt.subplots(1,1,figsize=(7,7),dpi=120)

ax.scatter(Y_hat,Y,marker ='o',color='green')
ax.plot(Y,Y,ls='--')
plt.show()

Esto fue lo que obtuve y al parecer todos est谩n obteniendo la misma gr谩fica:

Este fue mi resultado del problema.

def pred(x):
  beta = np.array([6.5549034800, 5.7591837200, -2.94216316])
  v = 4152.02
  return [email protected] + v

X = df [['Lat', 'Lon', 'Zip_Code']].values
Y_hat = pred(X)
Y = df['Mean'].values


fig, ax = plt.subplots(1, 1, figsize=(7,7), dpi=120)

ax.scatter(Y_hat, Y, marker ="o", color = "red")
ax.plot(Y,Y, ls="--")
plt.xlabel("Y estimada")
plt.ylabel("Y real")
plt.show()

![](