Aún no tienes acceso a esta clase

Crea una cuenta y continúa viendo este curso

Método de mínimos cuadrados: despejando la ecuación

5/10
Recursos

Aportes 62

Preguntas 2

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.

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

Ecuación punto-pendiente


.
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

y=bo+b1(x) bo=y-b1(x) bo=4.2-0.9(3) bo= 4.2-2.7 bo=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

  • 4.2 = b0 + 2.7
    4.2 - 2.7 = b0
    1.5 = b0
b0 = -22.8

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

Muy buena clase!