<jupyter_start><jupyter_text>Regresión Lineal Simple usando sklearn  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('SatGpa.csv')

# Primeras 5 lineas
data.head()<jupyter_output><empty_output><jupyter_text>Creamos la regresión  Declaramos las variables dependiente e independientes<jupyter_code># La variable independiente: 'SAT'
x = data['SAT']

# La variable dependiente: 'GPA'
y = data['GPA']
# La forma del arreglo
x.shape
y.shape
# Para usar sklearn necesitamos un arreglo de 2D
# Hay que cambiar la forma de los datos

x_matrix = x.values.reshape(84,1)
x_matrix.shape<jupyter_output><empty_output><jupyter_text>Regresión LinealSklearn documentation: https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LinearRegression.html<jupyter_code># Creamos un objeto regresion lineal
reg = LinearRegression()
# El primer argumento es la varible independiente y el segundo la variable dependiente
# diferente a statsmodels 
reg.fit(x_matrix,y)<jupyter_output><empty_output><jupyter_text>Parametros del constructorcopy_X: se hace una copia de seguridad del arreglo si hay que realizar transfromaciones.fit_intercept: calcula explicitamente la constante de regresión.n_jobs: número de CPUs usadoa si se quiere paralelizar el método.Normalized: los regresores de X se normalizan antes de la regresión restando la media y dividiendo entre la norma L2.Estandarizar: restar la media y dividir entre la desviacion estandarNormalizar $\neq$ estandarizar.   $R^2$<jupyter_code># Para obtener el valor de R-squared
reg.score(x_matrix,y)<jupyter_output><empty_output><jupyter_text>Coeficientes<jupyter_code># Los coeficientes de la regresion
reg.coef_<jupyter_output><empty_output><jupyter_text>Constante de Intersección<jupyter_code># La constante de la regresión
reg.intercept_<jupyter_output><empty_output><jupyter_text>Se pueden comparar los resultados obtenidos en scikit-learn con statsModels  Hacer predicciones<jupyter_code>reg.predict(np.array([[1740]]))
# Podemos crear un dataframe con varios valores de SAT
new_data = pd.DataFrame(data=[1740,1760],columns=['SAT'])
new_data
# Podemos predecir todo el dataframe 
reg.predict(new_data)
# Y agregar el resultado de la prediccion en el dataframe
new_data['Predicted_GPA'] = reg.predict(new_data)
new_data<jupyter_output><empty_output><jupyter_text>Graficando<jupyter_code>plt.scatter(x,y)

yhat = reg.coef_*x_matrix + reg.intercept_

# Plotting the regression line
plt.plot(x,yhat, c='orange')

plt.xlabel('SAT')
plt.ylabel('GPA')
plt.show()<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.08678286129266521, 'fraction_numerical': 0.006899055918663762, 'mean_word_length': 7.582554517133956, 'pattern_counts': {'":': 0, '<': 37, '<?xml version=': 0, '>': 37, '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': '9', 'dir': 'jupyter-structured-clean-dedup', 'id': '525536', 'license': 'MIT', 'n_tokens_mistral': 1013, 'n_tokens_neox': 986, 'n_words': 241, 'path': '5-sklearn-Simple_Linear.ipynb', 'repo_name': 'jrtorresb/Clases-Proyecto-I-Machine-Learning', 'size': '2754'}