<jupyter_start><jupyter_text>Regresión Lineal Mútliple  Importar bibliotecas<jupyter_code>import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
sns.set()

from sklearn.linear_model import LinearRegression<jupyter_output><empty_output><jupyter_text>Datos<jupyter_code>data = pd.read_csv('Multiple linear regression.csv')
data.head()
data.describe()<jupyter_output><empty_output><jupyter_text>Creamos la regresión lineal mútliple  Variables dependientes e independientes<jupyter_code># Dos variables independentes: 'SAT' y 'Rand'
x = data[['SAT','Rand 1,2,3']]

# variable dependiente
y = data['GPA']<jupyter_output><empty_output><jupyter_text>Regresión<jupyter_code>reg = LinearRegression()
reg.fit(x,y)
# Los coeficientes de la regresión
reg.coef_
# La constante de la regresión
reg.intercept_<jupyter_output><empty_output><jupyter_text>Calculando R-squared<jupyter_code># La r2 evalua que tambien ajustado esta el modelo
reg.score(x,y)<jupyter_output><empty_output><jupyter_text>Formula de R^2 ajustadaR2 ajustada es mejor para regresiones multiples.Se ajusta al número de variables incluidas en el modeloHay que calcularla a mano.$R^2_{adj.} = 1 - (1-R^2)*\frac{n-1}{n-p-1}$<jupyter_code># Para calcular la R-squared ajustada necesitamos conocer la r2, el #observaciones, el #caracteristicas
r2 = reg.score(x,y)
# Numero de observaciones
n = x.shape[0]
# Numero de predictores
p = x.shape[1]

# Usamos la formula
adjusted_r2 = 1-(1-r2)*(n-1)/(n-p-1)
adjusted_r2<jupyter_output><empty_output><jupyter_text>Podemos concluir que:Como $R^2 adj < R^2$ entonces una o mas predictores tiene poco poder explicativo.Pero, cuál??  Selección de Predictores  Simplifica el modelo  Mejora la eficiencia  Full documentation: https://scikit-learn.org/stable/modules/generated/sklearn.feature_selection.f_regression.htmlF-regression construye regresiones lineales simples por cada predictor.Crea una regresion para GPA <- SAT y otra para GPA <- RAND<jupyter_code># Importamos el método
from sklearn.feature_selection import f_regression
# f_regression encuentra los F-statistics para las regresiones simples creadas con cada 
# una de las variables independientes
# Esto significa ejecutar una regresión lineal simple en GPA donde SAT es la variable independiente
# y una regresión lineal simple en GPA donde Rand es la variable independiente
# La limitación de este enfoque es que no tiene en cuenta el efecto mutuo de las dos características 

# Hay dos arreglos de salida
# El primero contiene las F-statistics para cada una de las regresiones
# El segundo contiene los p-value de estas F-statistics 
f_regression(x,y)
p_values = f_regression(x,y)[1]
p_values
p_values.round(3)<jupyter_output><empty_output><jupyter_text>p-value de SAT = 0p-value de RAND = 0.676Entonces SAT es una variable útil mientras qeu RAND es una variable inútil  Tabla de Resumen<jupyter_code># Construimos un dataframe con los nombres de los predictores
reg_summary = pd.DataFrame(data = x.columns.values, columns=['Features'])
reg_summary
# Construimos una segunda columna con los coeficientes de la regresion
reg_summary ['Coefficients'] = reg.coef_
# Agregamos los p-values
reg_summary ['p-values'] = p_values.round(3)
reg_summary<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.08478726660544843, 'fraction_numerical': 0.010101010101010102, 'mean_word_length': 6.4104308390022675, 'pattern_counts': {'":': 0, '<': 36, '<?xml version=': 0, '>': 33, 'https://': 1, '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': '8', 'dir': 'jupyter-structured-clean-dedup', 'id': '287840', 'license': 'MIT', 'n_tokens_mistral': 1183, 'n_tokens_neox': 1155, 'n_words': 328, 'path': '6-sklearn-Multiple Linear _Regression.ipynb', 'repo_name': 'jrtorresb/Clases-Proyecto-I-Machine-Learning', 'size': '3267'}