Hay que recordar esa recta que se encontró en este ejercicio, es una aproximación de la nueve de puntos originales, osea nuestra nube de puntos no puede estar necesariamente en esta recta
Bienvenida al curso
Todo lo que aprenderás sobre la regresión lineal
Introducción a ML y los algoritmos
Regresión lineal y machine learning
Explicación matemática de la regresión lineal
Entendiendo el algoritmo de regresión lineal
Método de mínimos cuadrados: ecuación
Método de mínimos cuadrados: despejando la ecuación
Generando predicciones en papel
Proyecto del curso
Llevando nuestro algoritmo a Python
Creando nuestra función de graficación
Código main y probando nuestro código
Conclusiones
Aún no tienes acceso a esta clase
Crea una cuenta y continúa viendo este curso
Aportes 62
Preguntas 2
Hay que recordar esa recta que se encontró en este ejercicio, es una aproximación de la nueve de puntos originales, osea nuestra nube de puntos no puede estar necesariamente en esta recta
RETO 😄
Les dejo mis apuntes por si les sirva
.
Otra forma de encontrar la ecuación de la recta que representa nuestra regresión lineal es a través de la ecuación punto-pendiente, es decir, en donde los datos con los que contamos son: un punto por el cual pasa la recta y la pendiente de dicha recta.
.
La ecuación punto-pendiente es: y - y1 = m(x - x1)
.
Donde:
m = la pendiente
(x1, y1) = el punto por el cual pasa la recta.
.
Para nuestro ejercicio serían:
m = 0.9
(x1,y1) = (3, 4.2)
.
Con estos datos porcedemos a sustituir en la ecuación, es decir:
y - 4.2 = 0.9(x - 3)
.
Despejamos
.
y - 4.2 = 0.9x - 2.7
y = 0.9x - 2.7 + 4.2
y = 0.9x + 1.5
.
Así también encontramos que b0 = 1.5
Resolviendo:
4.2 = b0 + 2.7
4.2 - 2.7 = b0 + 2.7 - 2…7
1.5 = b0
Mis resultados
¿Habrá un curso o algun tema que explique los casos cuando la tendencia sea no lineal y se tenga que usar otro tipo de regresión como la logaritmica o polinomica?
Hice un pequeño código en Python para sacar esto a esta altura del curso:
Calcular la media
def median(values: list) -> float:
return sum(values) / len(values)
Calcular la Pendiente(m)
def get_pendent(x_values: list, y_values: list, x_median: float = None, y_median: float = None) -> float:
if not x_median:
x_median = median(x_values)
if not y_median:
y_median = median(y_values)
aux_x = [x-x_median for x in x_values]
aux_y = [y-y_median for y in y_values]
numerator = sum(aux_x[i] * aux_y[i] for i in range(len(aux_x)))
denominator = sum((x-x_median)**2 for x in x_values)
return numerator / denominator
Calcular la constante
def get_constant(x_values: list = None, y_values: list = None, x_median: float = None, y_median: float = None, pendent: float = None):
assert x_values or x_median, "Invalid Must have X Values or the median of X Values"
assert y_values or y_median, "Invalid Must have Y Values or the median of Y Values"
if not x_median:
x_median = median(x_values)
if not y_median:
y_median = median(y_values)
if not pendent:
assert x_values and y_values, "Invalid if you don't send the pendent must send the X and Y Values"
pendent = get_pendent(x_values, y_values,
x_median=x_median, y_median=y_median)
return y_median - pendent * x_median
Obtener un diccionario con todos los resultados
def get_lineal_regretion(x_values: list, y_values: list) -> dict:
x_median = median(x_values)
y_median = median(y_values)
pendent = get_pendent(
x_values=x_values,
y_values=y_values,
x_median=x_median,
y_median=y_median
)
constant = get_constant(
x_median=x_median,
y_median=y_median,
pendent=pendent
)
return {
'equation': 'y= mx + b',
'y': y_median,
'x': x_median,
'm': pendent,
'b': constant
}
b0=1.5
recuerden que este es el caso más sencillo donde x es la única variable predictora para y, pero el caso multilineal y más común en ML es que tienes X1,X2,…,Xn variables que esperas usar para predecir el valor de y.
b0 = 1,5
import numpy as np
<h1>x</h1>x = np.array([1,2,3,4,5])
<h1>y</h1>y = np.array([1,3,5,6,5])
coeffs = np.polyfit(x,y,1)
b1 = coeffs[0]
b0 = coeffs[1]
estimar_y = b0 + (b1 * x)
print(b0)
print(b1)
Resultado:
0.6999999999999997
1.1
Dejo esto por aqui espero sirva para ver de una forma mas general lo que entendi, si tienen alguna corrección por favor haganmela saber 😄
Resolviendo el despeje de Celis:
4.2 = b0 + 0.9(3)
4.2 = b0 + 2.7
4.2 - 2.7 = b0 + 2.7 - 2.7
1.5 = b0
Me gusto el ejercicio, estuvo fácil llenar la tabla, fue muy intuitivo.
4.2=bo+0.9(3) —> 4.2-2.7=bo
bo=1.5
1.5
Recordatorio del curso de algebra de platzi, 100% recomendado tomarlo
Resultado:
b0=1.5
))
Reto:
B0 = 1.5
B0 = 1.5
b1 = 0.9
b0 = 1.5
Me encanto la explicación tan rápida, clara y sencilla. Acabo de repasar semanas de universidad jaja
🟢Entiendo la pendiente negativa📉 como mi nivel de entusiasmo por este curso en particular (espero que la curva mejore al avanzar)
Este es el valor de_ b0_ que a mi me dio despejando la ecuación:
Decidí intentar escribir una función en Python para hallar tanto la pendiente como el intercepto:
def min_sq(list_):
'''
Returns the slope and intercept of a linear regression from a data set.
Input: a list of paired values (x,y)
Output: two float numbers corresponding to the slope and the intercept of the linear equation, respectively.
'''
x = [i[0] for i in list_]
x_mean = sum(x)/len(x)
y = [i[1] for i in list_]
y_mean = sum(y)/len(y)
values1 = []
values2 = []
for i in range(len(list_)):
values1.append((x[i]-x_mean)*(y[i]-y_mean))
values2.append((x[i]-x_mean)**2)
slope = sum(values1)/sum(values2)
intercept = y_mean - slope*x_mean
return slope, intercept
if __name__ == '__main__':
data = [(1,2),(2,3),(3,5),(4,6),(5,5)]
print(f'The approximate linear equation from the data is:\nY = {min_sq(data)[1]} + {min_sq(data)[0]}X')
4.2=bo+0.9(3)
multiplico y paso a restar:
4.2=bo+2.7 --> 4.2-2.7=bo --> bo==1.5
Bo = 1,5
Reto
b0 = 1.5
b0 =1.5
Despejar b₀
Es importante tener claro los principios y los fundamentos del tema que se esta estudiando o desarrollando, para así poder enter como trabajan los algoritmos que usamos comúnmente.
b0 = 1.5
Si saben inglés este video les puede ayudar a entender el método de mínimos cuadrados de forma más clara.
b0 = 4.2 - 2.7 = 1.5
da 1.5 el valor de b0 lo cual nos daria una ecución de la regresión lineal de 1.5 + 0.9x
Se podría usar cualquier par de puntos de la tabla para despejar.
¿Por qué no da igual b0 si se usa la siguiente formula? b0 = (y2-y1)/(x2-x1)
el resultado es : 1.5
Me dió 1.5. Aquí está el procedimiento:
Muy chevere, interesante
1.5=bo
b0= 1.5
4.2-2.7=b0
bo=1.5
b0 = 4.2 - 0.9(3)
b0 = 4.2 * 2.7
b0 = 1.5
(de x1): x menos el promedio de x al cuadrado… me da igual a: -4
… ¿Por que el profesor en su x1 puso 4 y no -4? ¿Negativo pasa a positivo?
Resulta en 1.5
Celis tiene razón, muchas veces solo importamos las librerías y desconocemos un poco la estadística que las conforma.
Este profe explica genial. Breve, desde cero y práctico. De los mejores profes que he visto en Platzi
1.5
4.2 = b0 + 0.9(3)
4.2 = b0 + 2.7
b0 = 4.2 - 2.7
b0 = 1.5
Me da 1.5 jeje.
b0 = 1.5
b0 = 1.5
Para reforzar lo aprendido.
https://www.varsitytutors.com/hotmath/hotmath_help/spanish/topics/line-of-best-fit
Muy buena clase!
¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.