¿Cómo resolver problemas de regresión lineal con Python?
1) Predecir los precios de la vivienda
Queremos predecir el valor de una casa específica y la predicción se basa en el área de la casa.
2) Predice qué programa de televisión tendrá más espectadores la próxima semana.
Flash y Arrow son mis programas de televisión favoritos. Quiero ver qué programa tendrá más espectadores la próxima semana.
3) Reemplazar los valores faltantes en el conjunto de datos.
A menudo tratamos con conjuntos de datos con valores faltantes. No hay ejemplos prácticos para esta parte, pero te enseñaré cómo reemplazar estos valores con regresión lineal.
Entonces, comencemos a programar (ahora mismo)
Antes de comenzar a trabajar, es una buena idea instalar los paquetes de mi artículo anterior (Paquetes Python para minería de datos).
1) Predecir los precios de la vivienda
Tenemos el siguiente conjunto de datos:
Ingrese el número
Pies cuadrados
Precio
1 150 6450
2 200 7450
3 250 8450
4 300 9450
5 350 11450
6 400 15450
7 600 18450
Pasos:
En la regresión lineal, todos sabemos que la linealidad Debe encontrarse en la relación de datos, podemos obtener θ0 y θ1. Nuestra ecuación hipotética es la siguiente:
Donde: hθ(x) es el valor del precio (el valor que queremos predecir) con respecto a un pie cuadrado específico, (lo que significa que el precio es una función lineal del cuadrado metraje); θ0 es constante; θ1 es el coeficiente de regresión.
Empiece a codificar ahora:
Paso 1
Abra su editor de texto favorito y asígnele el nombre predict_house_price. Necesitamos los siguientes paquetes en nuestro programa, así que copie el siguiente código en el archivo predict_house_price.py.
Lenguaje de programación informática
1
2
Tres
Cuatro
Cinco
#Paquetes requeridos
Importar matplotlib.pyplot como plt
Importar numpy como np
Importar pandas como pd
p >Importar conjunto de datos desde sklearn, modelo lineal
Ejecute su código. Si su programa es correcto, entonces el paso 1 está básicamente completo. Si recibe algunos errores, le faltan algunos paquetes, así que regrese y mire la página de paquetes. Instale todos los paquetes de la publicación del blog y ejecute su código nuevamente. Espero que esta vez no tengas ningún problema.
Ahora que su programa es correcto, sigamos adelante...
Paso 2
Guardé los datos como algo llamado archivo input_data.csv. entonces escribamos una función que convierta los datos en valores X (pies cuadrados) y valores Y (precios).
Lenguaje de programación informática
1
2
Tres
Cuatro
Cinco
Seis
Siete
Ocho
Nueve
#Función para obtener datos
def get_data(nombre de archivo):
datos = pd.read_csv(nombre de archivo)
X_parameter = []
Y_parameter = []
Para single_square_feet, single_price_value en zip(data['square_foots'],data['price']):
x_parameter .append([float (single _ square _ feet)])
y _ parámetro. append(float(single_price_value))
Devuelve parámetro X, parámetro Y
Tercera línea: Leer. Convierta datos csv en un marco de datos de pandas.
Líneas 6-9: convierta el marco de datos de Pandas en datos de parámetros X e parámetros Y y devuélvalos.
Entonces, imprimamos el parámetro X y el parámetro Y:
Lenguaje de programación informática
1
2
Tres
[[150.0], [200.0], [250.0], [300.0], [350.0], [400.0], [600.0]]
[6450.0, 7450.0, 8450.0, 9450.0, 11450.0, 15450.0, 18450.0]
[Completar en 0,7 segundos]
Salida del script:? [[150.0], [200.0], [250.0], [300.0], [350.0], [400.0], [600.0]] [6450.0, 7450.0, 8450.0, 9450.0, 11450.0, 15450.0, 65438
Paso 3
Ahora ajustemos los parámetros X e Y en un modelo de regresión lineal. Necesitamos escribir una función que tome como entrada los parámetros X, el parámetro Y y el valor en pies cuadrados que desea predecir, y devuelva θ0, θ1 y el valor del precio previsto.
Lenguaje de programación informática
1
2
Tres
Cuatro
Cinco
Seis
Siete
Ocho
Nueve
10
11 p> p>
12
# Ajustar nuestros datos a la función del modelo lineal
Definir linear_model_main(x_parameters, y_parameters, predicted_values ):
#Crear objeto de regresión lineal
regr = modelo lineal.
Regresión lineal()
regr.fit(X_parameter, Y_parameter)
predict_outcome = regr.predict(valor previsto)
predicción = {}
previsión['intercept'] = regr.intercept_
previsión['coeficiente'] = regr.coef_
previsión['valor previsto'] = resultados de previsión
Devolver predicciones
Líneas 5-6: Primero, cree un modelo lineal y entrénelo con nuestros parámetros X e y.
Línea 8-12: Creamos un diccionario llamado predicciones, que almacena θ0, θ1 y los valores de predicción, y devuelve el diccionario de predicción como salida.
Así que llamemos a nuestra función y predizcamos que el valor en pies cuadrados será 700.
Lenguaje de programación informática
1
2
Tres
Cuatro
Cinco
Seis
x, Y = obtener datos('inputdata.csv')
valor previsto = 700
resultado = linear_model_main ( X, Y, valor predicho)
Imprimir "valor de intercepción", resultado ['intercepción']
Imprimir "coeficiente", resultado ['coeficiente']
Imprimir "valor previsto:" resultado['valor previsto']
Salida del script: valor de intercepción 1771.80851064 coeficiente [28.77659574] valor previsto: [2195438 05.438 091][
Aquí la intersección El valor es el valor de θ0 y el valor del coeficiente es el valor de θ1. El valor del precio previsto que obtenemos es 21915,4255, lo que significa que hemos completado el trabajo de predecir los precios de la vivienda.
Para verificarlo, necesitamos ver cómo nuestros datos se ajustan a la regresión lineal. Entonces necesitamos escribir una función que tome los parámetros X y los parámetros Y como entrada y muestre la línea recta ajustada a los datos.
Lenguaje de programación informática
1
2
Tres
Cuatro
Cinco
Seis
Siete
Ocho
Nueve
10
#Mostrar linealidad Función de ajuste de los resultados del modelo
Definición de la línea lineal de visualización (parámetro X, parámetro Y):
#Crear objeto de regresión lineal
regr = modelo lineal. Regresión lineal()
regr . fit(X_parameter, Y_parameter)
plt.scatter(X parámetro, Y parámetro, color='blue ')
plt .plot(X_parameters, regr.predict(X_parameters), color='rojo ', ancho de línea=4)
plt.xticks(())
plt.yticks (())
plt.show()
Luego llame a la función show_linear_line:
Lenguaje de programación informática
1
show_linear_line(X, Y)
Salida del guión:
2) Predice qué programa de televisión tendrá más espectadores la próxima semana.
"The Flash" es una serie de televisión estadounidense creada por los guionistas y productores Greg Berlanti, Andrew Kreisberg y Jeff Jones, y es transmitida por la estación de televisión The CW.
Está basado en el personaje de DC Comics Barry Allen, un superhéroe que lucha contra el crimen vestido de manera extraña y con una velocidad sobrehumana, creado por Robert Cannell, John Blum y Carmine Infantino. es un spin-off de Arrow y existe en el mismo mundo. El piloto de la serie fue escrito por Berlanti, Kreisberg y Johns y dirigido por David Nutt. El programa se estrenó en Norteamérica el 7 de octubre de 2014 y se convirtió en el programa de televisión más visto en CW.
Arrow es una serie de televisión creada por los guionistas/productores Greg Berlanti, Marc Guggenheim y Andrew Kreisberg. Está basado en el personaje de DC Comics Arrow, un luchador contra el crimen vestido de manera extraña creado por Mort Weisinger y George Papp. Se estrenó en Norteamérica el 10 de octubre de 2012 y comenzó a transmitirse a nivel mundial a finales de 2012. Filmada principalmente en Vancouver, Columbia Británica y Canadá, la serie sigue al playboy multimillonario Oliver Queen, quien, después de estar varado en una isla enemiga durante cinco años, regresa a su ciudad natal para luchar contra el crimen y la corrupción y convertirse en un hombre con arco y flechas. guerrero. La historia de un misterioso justiciero. A diferencia de los cómics, Queen no utilizó inicialmente el seudónimo "Arrow".
Con estos dos programas empatados como mis títulos de programas de televisión favoritos, siempre me he preguntado qué programa era más popular entre los demás y quién ganaría finalmente la guerra de ratings. Entonces, escribamos un programa para predecir qué programa de televisión tendrá más espectadores. Necesitamos un conjunto de datos para cada episodio de espectadores. Afortunadamente, obtuve estos datos de Wikipedia y los organicé en un archivo .csv. Como se muestra a continuación.
"The Flash"
Audiencias de Flash en EE. UU.
Flecha verde
Número de audiencia de "Flecha" en EE. UU.
1 4,83 1 2,84
2 4,27 2 2,32
3 3,59 3 2,55
4 3,53 4 2,49
5 3,46 5 2,73 p>
6 3,73 6 2,6
7 3,47 7 2,64
8 4,34 8 3,92
9 4,66 9 3,06
Espectadores número en millones.
Pasos para resolver el problema:
Primero, necesitamos convertir los datos en parámetros_X y parámetros_Y, pero aquí tenemos dos parámetros_X y parámetros_Y. Por lo tanto, los llamamos flash_x_parameter, flash_y_parameter, Arrow_x_parameter y Arrow_y_parameter. Luego necesitamos ajustar los datos en dos modelos de regresión lineal diferentes: primero para destellos y luego para flechas. Luego necesitamos predecir la audiencia del próximo episodio de ambos programas de televisión. Luego podemos comparar los resultados y adivinar qué programa tendrá más espectadores.
Paso 1
Importar nuestro paquete:
Lenguaje de programación informática
1
2
Tres
Cuatro
Cinco
Seis
Siete
#Paquetes requeridos p>
Importar csv
Importar sistema
Importar matplotlib.pyplot como plt
Importar numpy como np
Importar Panda como pd
Importar conjunto de datos desde sklearn, modelo lineal
Segundo paso
Escribir una función que tome nuestro conjunto de datos como entrada y devuelva el valor flash_x_parameter, flash_y_parameter, arrow_x_parameter, arrow_y_parameter.
Lenguaje de programación informática
1
2
Tres
Cuatro
Cinco
Seis
Siete
Ocho
Nueve
10
11 p> p>
12
13
#Función para obtener datos
def get_data (nombre de archivo):
datos = pd .read_csv(nombre de archivo)
flash_x_parameter = []
flash_y_parameter = []
arrow_x_parameter = []
arrow_y_parameter = []
Para x1, y1, x2, y2 (datos['flash_episode_number'], datos['flash_us_viewers'], datos['arrow_episode_number'], datos['arrow_us_viewers']) en zip:
p>
parámetro flash _ x _ append([float(x 1)])
parámetro flash _ y _ append(float(y 1)) p>
flecha _ x _ parámetro . append([float(x2)])
flecha _ y _ parámetro . append(float(y2))
Devuelve el flash. parámetro x, parámetro flash y, parámetro Flecha x, parámetro Flecha y
Ahora que tenemos los parámetros, escribamos una función que use estos parámetros como entrada y proporcione una salida para predecir qué programa tendrá más espectadores. .
Lenguaje de programación informática
1
2
Tres
Cuatro
Cinco
Seis
Siete
Ocho
Nueve
10
11 p> p>
12
13
14
15
#Función para saber qué programa de TV tendrá más espectadores
def more_viewers(x1,y1,x2,y2):
regr1 = modelo lineal. Regresión lineal()
regr1.fit(x1, y1)
valor _ previsto 1 = regr 1 .
Imprimir valor previsto 1<. /p>
regr2 = Modelo lineal.
Regresión lineal()
regr2.fit(x2, y2)
valor_predicho 2 = regr 2
#print valor_predicho1
#Imprimir valor previsto 2
Si predicción_ valor 1 gt Valor previsto 2:
Imprimir "La próxima semana el programa Flash TV tendrá más espectadores"
De lo contrario:
Imprimir "El programa de Arrow TV tendrá una mayor audiencia la próxima semana"
Escribe todo en un archivo. Abra el editor, asígnele el nombre predict.py y copie el siguiente código en predict.py.
Lenguaje de programación informática
1
2
Tres
Cuatro
Cinco
Seis
Siete
Ocho
Nueve
10
11 p> p>
12
13
14
15
16
17 p>
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
p>37
38
39
40
41
# Paquete requerido
Importar csv
Importar sistema
Importar matplotlib.pyplot como plt
Importar numpy como np
Importar pandas como pd
Importar conjunto de datos desde sklearn, modelo lineal
#Función para obtener datos
def get_data (nombre de archivo):
datos = pd.read_csv(nombre de archivo)
flash_x_parameter = []
flash_y_parameter = []
arrow_x_parameter = []
arrow_y_parameter = []
Para x1, y1, x2, y2 en zip (datos['flash_episode_number'], datos['flash_us_viewers'], datos['arrow_episode_number'], datos['arrow_us_viewers' ]):
parámetro flash _ x _ append([float(x 1)])
parámetro flash _ y _ append(float(y 1))
flecha _ x _ parámetro . append([float(x2)])
flecha _ y _ parámetro . append(float(y2))
Devuelve el flash x. parámetro , flash y parámetro, flecha x parámetro, flecha y parámetro
#Función para saber qué programa de TV tendrá más espectadores
def more_viewers(x1, y1, x2, y2):
regr1 = modelo lineal. Regresión lineal()
regr1.fit(x1, y1)
valor _ previsto 1 = regr 1 .
Imprimir valor previsto 1<. /p>
regr2 = Modelo lineal.
Regresión lineal()
regr2.fit(x2, y2)
valor_predicho 2 = regr 2
#print valor_predicho1
#Imprimir valor previsto 2
Si predicción_ valor 1 gt Valor previsto 2:
Imprimir "La próxima semana el programa Flash TV tendrá más espectadores"
De lo contrario:
Imprimir "El programa de Arrow TV tendrá más espectadores la próxima semana"
x1, y1, x2, y2 = get_data('input_data. csv ') p>
#Imprimir x1, y1, x2, y2
Más espectadores (x1, y1, x2, y2)
Tal vez puedas adivinar qué programa tendrá más espectadores. pero ejecuta el programa para ver si acertaste.
3) Reemplazar los valores faltantes en el conjunto de datos.
A veces, nos encontramos con situaciones en las que necesitamos analizar datos que contienen valores faltantes. Algunas personas descartan estos valores faltantes y luego los analizan; otras los reemplazan con valores máximos, mínimos o promedio; La media es la mejor de las tres, pero los valores faltantes se pueden reemplazar efectivamente con regresión lineal.
Este método funciona más o menos así.
Primero, encontramos el valor que falta en la columna que queremos reemplazar y averiguamos de qué datos en otras columnas depende el valor que falta. Trate las columnas con valores faltantes como parámetros_Y y aquellas columnas de las que los valores faltantes dependen más como parámetros_X, y ajuste estos datos en un modelo de regresión lineal. Ahora puede predecir las columnas faltantes con columnas de las que los valores faltantes dependen más.
Una vez completado este proceso, tenemos datos sin valores faltantes para que los analicemos libremente.
Para practicar, te dejo este problema, así que busca algunos datos de valores faltantes en Internet para resolver este problema. Por favor deja un comentario cuando hayas terminado. Me encantaría ver tus resultados.
Nota personal:
Me gustaría compartir mi experiencia personal en minería de datos. Recuerdo que en mi clase de introducción a la minería de datos, el profesor comenzó lentamente y explicó algunas áreas donde se puede aplicar la minería de datos y algunos conceptos básicos. Entonces, de repente, la dificultad aumenta rápidamente. Esto hizo que algunos de mis compañeros de clase se sintieran deprimidos, intimidados por el curso y, en última instancia, acabó con su interés en la minería de datos. Por eso quiero evitar hacer eso en las publicaciones de mi blog. Quería mantener las cosas más simples y más informales. Por eso trato de utilizar ejemplos interesantes para que los lectores puedan aprender más cómodamente en lugar de aburrirse o asustarse.
Gracias por leer esto. Deje sus preguntas o sugerencias en el cuadro de comentarios y estaré encantado de responderle.