No tienes acceso a esta clase

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

Convierte tus certificados en títulos universitarios en USA

Antes: $249

Currency
$209

Paga en 4 cuotas sin intereses

Paga en 4 cuotas sin intereses
Suscríbete

Termina en:

17 Días
15 Hrs
27 Min
38 Seg

Un modelo de regresión

18/28
Recursos

Aportes 37

Preguntas 1

Ordenar por:

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

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 x@beta + 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()

¿Mejoró la predicción al introducir un nuevo predictor? En este caso Zip Code?
En absoluto. El modelo es aún peor.

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= x@b + 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 x@beta + 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()```
```python def pred_ejercicio(x): beta = np.array([6.55490348e+02, -5.75918372e+02, -2.94216316e-01]) v = 4152.02 return x@beta + v #se indica que uno de los parametros debio ser -5.7591... X = df[['Lat','Lon','Zip_Code']].values Y_hat = pred_ejercicio(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() ``` ![](https://static.platzi.com/media/user_upload/image-8ef92782-af30-4ecf-8844-1fa86eb7f06a.jpg)
from sklearn.linear_model import LinearRegression

X = df[['Lat', 'Lon', 'Zip_Code']]
y = df['Mean']

# Crear una instancia del modelo de regresión lineal
modelo = LinearRegression()

# Ajustar el modelo a los datos
modelo.fit(X, y)

# Obtener los parámetros del modelo
v = modelo.intercept_
β = modelo.coef_

print("Parámetro v:", v)
print("Parámetros β:", β)

# Crear una gráfica del modelo
predicciones = modelo.predict(X)

plt.scatter(df['Mean'], predicciones)
plt.xlabel('Valor real')
plt.ylabel('Predicción')
plt.title('Gráfica de predicción del modelo de regresión lineal')
plt.show()

# Definir los regresores y la variable dependiente
X = df[['Lat', 'Lon', 'Zip_Code']]
y = df['Mean']

# Crear una instancia del modelo de regresión lineal
modelo = LinearRegression()

# Ajustar el modelo a los datos
modelo.fit(X, y)

# Obtener los coeficientes del modelo
v = modelo.intercept_
β = modelo.coef_

print("Parámetro v:", v)
print("Parámetros β:", β)

# Generar una gráfica del modelo y la predicción
plt.scatter(df['Lon'], df['Mean'], color='blue', label='Datos reales')
plt.plot(df['Lon'], modelo.predict(X), color='red', linewidth=2, label='Predicción')
plt.xlabel('Longitud')
plt.ylabel('Media de ingresos')
plt.title('Modelo de regresión lineal')
plt.legend()
plt.show()
<code> 
  • 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 x@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.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 x@beta + 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 x@beta + 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()

¿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 x@beta + 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 x@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.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(x.T@x)@(x.T@y)


def pred(x,b0,b1,b2,v):
  beta = np.array([b0,b1,b2])
  return x@beta + 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 x@beta + 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 x@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='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 x@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()

![](