0% encontró este documento útil (0 votos)
51 vistas3 páginas

Regresión Lineal en Python: Predicciones y Visualización

Este documento presenta un análisis de regresión lineal simple y múltiple utilizando Python y Scikit-Learn para predecir el número de compartidos en redes sociales (# Shares) en función de características de artículos, como la cantidad de palabras y enlaces. Primero se cargan y exploran los datos, luego se realiza una regresión lineal simple con la cantidad de palabras para predecir # Shares. Más adelante, se mejora el modelo usando regresión lineal múltiple con cantidad de palabras y suma de enlaces, comentarios e

Cargado por

Luis
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como TXT, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
51 vistas3 páginas

Regresión Lineal en Python: Predicciones y Visualización

Este documento presenta un análisis de regresión lineal simple y múltiple utilizando Python y Scikit-Learn para predecir el número de compartidos en redes sociales (# Shares) en función de características de artículos, como la cantidad de palabras y enlaces. Primero se cargan y exploran los datos, luego se realiza una regresión lineal simple con la cantidad de palabras para predecir # Shares. Más adelante, se mejora el modelo usando regresión lineal múltiple con cantidad de palabras y suma de enlaces, comentarios e

Cargado por

Luis
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como TXT, PDF, TXT o lee en línea desde Scribd

1

#Imports necesarios
import numpy as np
import pandas as pd
import seaborn as sb
import [Link] as plt
%matplotlib inline
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm
[Link]['[Link]'] = (16, 9)
[Link]('ggplot')
from sklearn import linear_model
from [Link] import mean_squared_error, r2_score

2
#cargamos los datos de entrada
data = pd.read_csv("./articulos_ml.csv")
#veamos cuantas dimensiones y registros contiene
[Link]

3
#son 161 registros con 8 columnas. Veamos los primeros registros
[Link]()

4
# Ahora veamos algunas estadísticas de nuestros datos
[Link]()

5
# Visualizamos rápidamente las caraterísticas de entrada
[Link](['Title','url', 'Elapsed days'],1).hist()
[Link]()

6
# Vamos a RECORTAR los datos en la zona donde se concentran más los puntos
# esto es en el eje X: entre 0 y 3.500
# y en el eje Y: entre 0 y 80.000
filtered_data = data[(data['Word count'] <= 3500) & (data['# Shares'] <= 80000)]

colores=['orange','blue']
tamanios=[30,60]

f1 = filtered_data['Word count'].values
f2 = filtered_data['# Shares'].values

# Vamos a pintar en colores los puntos por debajo y por encima de la media de
Cantidad de Palabras
asignar=[]
for index, row in filtered_data.iterrows():
if(row['Word count']>1808):
[Link](colores[0])
else:
[Link](colores[1])

[Link](f1, f2, c=asignar, s=tamanios[0])


[Link]()

7 Regresión Lineal con Python y SKLearn


# Asignamos nuestra variable de entrada X para entrenamiento y las etiquetas Y.
dataX =filtered_data[["Word count"]]
X_train = [Link](dataX)
y_train = filtered_data['# Shares'].values

# Creamos el objeto de Regresión Linear


regr = linear_model.LinearRegression()

# Entrenamos nuestro modelo


[Link](X_train, y_train)

# Hacemos las predicciones que en definitiva una línea (en este caso, al ser 2D)
y_pred = [Link](X_train)

# Veamos los coeficienetes obtenidos, En nuestro caso, serán la Tangente


print('Coefficients: \n', regr.coef_)
# Este es el valor donde corta el eje Y (en X=0)
print('Independent term: \n', regr.intercept_)
# Error Cuadrado Medio
print("Mean squared error: %.2f" % mean_squared_error(y_train, y_pred))
# Puntaje de Varianza. El mejor puntaje es un 1.0
print('Variance score: %.2f' % r2_score(y_train, y_pred))

8 Predicción en regresión lineal simple


#Vamos a comprobar:
# Quiero predecir cuántos "Shares" voy a obtener por un artículo con 2.000
palabras,
# según nuestro modelo, hacemos:
y_Dosmil = [Link]([[2000]])
print(int(y_Dosmil))

9Regresión Lineal Múltiple en Python

#Vamos a intentar mejorar el Modelo, con una dimensión más:


# Para poder graficar en 3D, haremos una variable nueva que será la suma de los
enlaces, comentarios e imágenes
suma = (filtered_data["# of Links"] + filtered_data['# of comments'].fillna(0) +
filtered_data['# Images video'])

dataX2 = [Link]()
dataX2["Word count"] = filtered_data["Word count"]
dataX2["suma"] = suma
XY_train = [Link](dataX2)
z_train = filtered_data['# Shares'].values

10
# Creamos un nuevo objeto de Regresión Lineal
regr2 = linear_model.LinearRegression()

# Entrenamos el modelo, esta vez, con 2 dimensiones


# obtendremos 2 coeficientes, para graficar un plano
[Link](XY_train, z_train)

# Hacemos la predicción con la que tendremos puntos sobre el plano hallado


z_pred = [Link](XY_train)

# Los coeficientes
print('Coefficients: \n', regr2.coef_)
# Error cuadrático medio
print("Mean squared error: %.2f" % mean_squared_error(z_train, z_pred))
# Evaluamos el puntaje de varianza (siendo 1.0 el mejor posible)
print('Variance score: %.2f' % r2_score(z_train, z_pred))

11 Visualizar un plano en 3 Dimensiones en Python

fig = [Link]()
ax = Axes3D(fig)

# Creamos una malla, sobre la cual graficaremos el plano


xx, yy = [Link]([Link](0, 3500, num=10), [Link](0, 60, num=10))

# calculamos los valores del plano para los puntos x e y


nuevoX = (regr2.coef_[0] * xx)
nuevoY = (regr2.coef_[1] * yy)

# calculamos los correspondientes valores para z. Debemos sumar el punto de


intercepción
z = (nuevoX + nuevoY + regr2.intercept_)

# Graficamos el plano
ax.plot_surface(xx, yy, z, alpha=0.2, cmap='hot')

# Graficamos en azul los puntos en 3D


[Link](XY_train[:, 0], XY_train[:, 1], z_train, c='blue',s=30)

# Graficamos en rojo, los puntos que


[Link](XY_train[:, 0], XY_train[:, 1], z_pred, c='red',s=40)

# con esto situamos la "camara" con la que visualizamos


ax.view_init(elev=30., azim=65)

ax.set_xlabel('Cantidad de Palabras')
ax.set_ylabel('Cantidad de Enlaces,Comentarios e Imagenes')
ax.set_zlabel('Compartido en Redes')
ax.set_title('Regresión Lineal con Múltiples Variables')

12 Predicción con el modelo de Mútiples Variables

# Si quiero predecir cuántos "Shares" voy a obtener por un artículo con:


# 2000 palabras y con enlaces: 10, comentarios: 4, imagenes: 6
# según nuestro modelo, hacemos:

z_Dosmil = [Link]([[2000, 10+4+6]])


print(int(z_Dosmil)

También podría gustarte