en el video no explican de donde salen estos valores
y bueno para hallarlos seria algo así:
Introducción al curso
Lo que aprenderás sobre álgebra lineal: vectores
Vectores
Algunos objetos matemáticos: vectores y escalares
Convención en notación
Comienza a utilizar vectores en Python
Adición entre vectores
Suma de vectores en Python
Producto escalar-vector
Producto escalar-vector en Python
Producto interno
Producto interno en Python
Proyecto: análisis de sentimientos
Funciones lineales
Funciones lineales
Algunas funciones lineales
Un teorema en funciones lineales
Funciones afines
Aproximaciones de Taylor
Ejemplo en aproximaciones de Taylor
Un modelo de regresión
Norma y distancia
Cómo calcular distancias de vectores
Distancia entre vectores
Distancia entre vectores y búsqueda de departamento
Desviación estándar
Cálculo de riesgo en inversiones
Ángulo entre vectores y correlación
Clustering
¿Qué es y por qué clustering?
Una aproximación: K-Means
K-Means en Python
Cierre
Cierre y despedida
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
Paga en 4 cuotas sin intereses
Termina en:
Aportes 37
Preguntas 1
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()```
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>
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()
¿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()
![](
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?