<jupyter_start><jupyter_text>Modelos de Regresion Lineal  Modelo con datos simulados* y = a + b * x* X: 100 valores distribuídos según una N(1.5, 2.5)* Ye = 5 + 1.9 * x + e* e estará distribuida según una N(0, 0.8)<jupyter_code>import pandas as pd
import numpy as np
x = 1.5 + 2.5 * np.random.randn(100)
res = 0 + 0.8 * np.random.randn(100)-0.4
y_pred = 5 + 1.9 * x
y_act = 5 + 1.9 * x + res
x_list = x.tolist()
y_pred_list = y_pred.tolist()
y_act_list = y_act.tolist()
data = pd.DataFrame(
    {
        "x": x_list,
        "y_actual": y_act_list,
        "y_prediccion":y_pred_list
    }
)
data.head()
import matplotlib.pyplot as plt
y_mean = [np.mean(y_act) for i in range(1, len(x_list) + 1)]
%matplotlib inline
plt.plot(x,y_pred)
plt.plot(x, y_act, "ro")
plt.plot(x,y_mean, "g")
plt.title("Valor Actual vs Prediccón")<jupyter_output><empty_output><jupyter_text>¿Cómo es la predicción de buena?* SST = SSD + SSR * SST : Variabilidad de los datos con respecto a su media* SSD : Diferencia entre los datos origniales y las predicciones que el modelo no es capaz de explicar (errores que deberian seguir una distribución normal)* SSR : Diferencia entre la regresión y el valor medio que el modelo busca explicar* R2 = SSR / SST, coeficiente de determinación entre 0 y 1<jupyter_code>data["SSR"] = (data["y_prediccion"]-np.mean(y_act))**2
data["SSD"] = (data["y_prediccion"]-data["y_actual"])**2
data["SST"] = (data["y_actual"]-np.mean(y_act))**2
data.head()
SSR = sum(data["SSR"])
SSD = sum(data["SSD"])
SST = sum(data["SST"])
SSR
SSD
SST
SSD+SSR
R2 = SSR/SST
R2
plt.hist(data["y_prediccion"]-data["y_actual"])<jupyter_output><empty_output><jupyter_text>Obteniedno la recta de regresión* b = sum(xi - x_m)*(y_i - y_m) / sum((xi - x_m)^2)* a=y_n - b*x_m<jupyter_code>x_mean = np.mean(data["x"])
y_mean = np.mean(data["y_actual"])
x_mean, y_mean
data["beta_n"] = (data["x"]-x_mean)*(data["y_actual"]-y_mean)
data["beta_d"] = (data["x"]-x_mean)**2
beta = sum(data["beta_n"])/sum(data["beta_d"])
alpha = y_mean - beta * x_mean
alpha, beta<jupyter_output><empty_output><jupyter_text>El modelo lineal obtenido por regresión es: y = 4.545684955836343 + 1.9360388792448506 * x<jupyter_code>data["y_model"] = alpha + beta * data["x"]
data.head()<jupyter_output><empty_output><jupyter_text>Error estándar de los residuos (RSE)<jupyter_code>RSE = np.sqrt(SSD/(len(data)-2))
RSE
np.mean(data["y_actual"])
RSE / np.mean(data["y_actual"])<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.16490228013029315, 'fraction_numerical': 0.03257328990228013, 'mean_word_length': 5.316195372750642, 'pattern_counts': {'":': 3, '<': 21, '<?xml version=': 0, '>': 21, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '5', 'dir': 'jupyter-structured-clean-dedup', 'id': '204476', 'license': 'MIT', 'n_tokens_mistral': 1117, 'n_tokens_neox': 1063, 'n_words': 233, 'path': 'notebooks/T4 - 1 - linear Regression - Datos Ficticios.ipynb', 'repo_name': 'ledvir26/Machine-Learning-with-Python', 'size': '2456'}