No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Aprende todo un fin de semana sin pagar una suscripción 🔥

Aprende todo un fin de semana sin pagar una suscripción 🔥

Regístrate

Comienza en:

5D
16H
55M
17S

Un modelo de regresión

18/28
Recursos

Aportes 35

Preguntas 1

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

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:

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()

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


Este es el curso que mencionan de pandas: Curso de Manipulación y Análisis de Datos con Pandas y Python

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 “v” y “beta” 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()```
  • Nuestros regresores en términos de columnas son:
  1. Lat.
  2. Lon.
  • Mientras que nuestra variable dependiente es:
  1. Mean.
  • NOTA.
    Hay que tener claro que len significa longitud.
  • Notación simplificada de un modelo de regresión
    La concatenación de vectores nos puede ayudar a expresar de manera más sencilla la ecuación de regresión.

Justo asi da, mi impresión es que este modelo no se debería entrenar con regresión lineal (?)

def pred(x):
    beta = np.array([6.55490348*10**2,5.75918372*10**2,-2.94216316*10**-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='red')
ax.plot(Y,Y,ls='--')
plt.show()

Este es el resultado que obtuve>

Realmente no mejora, incluso empeora, hay una relación menor con los datos vs la recta.

Básicamente el archivo definitions.pdf contiene el resultado de: “dfinfo()”.

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[‘Lat’])) #Nos muestra el tipo de la columna 'Lat’
print(df[‘Lat’]) #Nos muestra la columna ‘Lat’

print(type(df[‘Lat’].values)) #Convertir una clase pandas en un numpy array
print(df[‘Lat’].values) #Convertir una clase pandas en un numpy array

X = df[[‘Lat’,‘Lon’,‘Zip_Code’]].values #Queremos un numpy array con dos datos por linea.

Y_hat = pred(X)

Y = df[‘Mean’].values

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

ax.scatter(Y_hat, Y, marker = ‘o’,color = ‘red’) #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()

![](