Regresión de distancia ortogonal usando SciPy

La regresión consiste básicamente en determinar la relación entre una variable dependiente y una o más variables independientes. Por lo general, implica encontrar la línea de mejor ajuste que minimice la suma de los errores cuadráticos para cada punto. Según los procedimientos de implementación, los algoritmos de regresión se clasifican como regresión lineal, regresión de cresta, regresión de lazo, regresión polinomial, etc. En este artículo, analicemos la regresión de distancia ortogonal y veamos la implementación práctica de la regresión de distancia ortogonal en Scipy. 

regresión ortogonal

A diferencia de los problemas de regresión normales donde los errores se miden verticalmente con respecto a la línea ajustada, la regresión de distancia ortogonal consiste en calcular la distancia ortogonal de los puntos con respecto a la línea ajustada, esto permite tener en cuenta los errores en las medidas tanto para las variables independientes como para las dependientes. a lo largo de los ejes x e y, como se muestra en la figura. Esta forma de calcular la distancia perpendicular añade más robustez al modelo. La regresión de distancia ortogonal minimiza la suma de las distancias perpendiculares al cuadrado, a diferencia de la suma de las distancias por mínimos cuadrados.

La regresión ortogonal generalmente se aplica cuando tanto Y como X son susceptibles de error y también se pueden aplicar al modelo no lineal transformable. La regresión ortogonal asume que existe una relación lineal entre los valores verdaderos de las variables dependientes e independientes. Los valores observados de Y y X tienen un pequeño error agregado. Dados n pares de valores medidos, la regresión ortogonal implica encontrar una línea que minimice la siguiente ecuación.

Aquí, ε, μ son errores en el valor de medida σ denota la varianza de los errores.

La regresión de distancia ortogonal se implementa utilizando ODRPACK, que es una biblioteca basada en FORTRAN – 77. El paquete scipy.odr proporciona una interfaz OOPS para ODRPACK.

Acercarse

  • Importe los paquetes de python necesarios como numpy, matplotlib y random.
  • Importar la función ODR desde scipy. Cree una característica de muestra y una array de destino usando numpy.
  • En función de la distribución de las variables de características, podemos definir la función de destino que debe usarse para el ajuste, mediante la función odr. Aquí, usamos una ecuación lineal simple como función objetivo que usa la función odr para ajustar el modelo.
  • Pase la función objetivo personalizada definida a la función odr.Model(). Aquí se ajusta el modelo.
  • Ahora, transforme la función y las variables de destino pasándolas a través de la función odr.Data().
  • Luego, pase la función transformada y la variable de destino y el modelo ajustado junto con el hiperparámetro beta (un valor pequeño).
  • Utilice la función run() en el modelo odr final para calcular e imprimir el resultado

Código:

Python3

# import the necessary python packages
import numpy as np
import matplotlib.pyplot as plt
 
# odr function from scipy package
# is used to perform ODR regression
from scipy import odr 
import random as r
 
# Create a sample feature array and a target array
feature = np.array(np.arange(1, 11))
# shuffle the created array
np.random.shuffle(feature)
# create a target array of random numbers
target = np.array([0.65, -.75, 0.90, -0.5, 0.14,
                   0.84, 0.99, -0.95, 0.41, -0.28])
 
# Define a function (quadratic in our case)
# to fit the data with.
# odr initially assumes a linear function
def target_function(p, x):
    m, c = p
    return m*x + c
 
#  model fitting.
odr_model = odr.Model(target_function)
 
# Create a Data object using sample data created.
data = odr.Data(feature, target)
 
# Set ODR with the model and data.
ordinal_distance_reg = odr.ODR(data, odr_model,
                               beta0=[0.2, 1.])
 
# Run the regression.
out = ordinal_distance_reg.run()
 
# print the results
out.pprint()

Producción:

Beta:                    [-0.01059931  0.2032962 ]

Beta Std Error:        [0.08421527 0.52254163]

Beta Covariance:       [[ 0.01212265 -0.06667458]

                        [-0.06667458  0.46672142]]

Residual Variance:      0.5850379776588954

Inverse Condition #:    0.06924525890982118

Reason(s) for Halting:
  Sum of squares convergence

El algoritmo odr devolverá el valor beta, el error estándar y la covarianza de los valores beta que se pueden usar para ajustar la línea de regresión. 

Publicación traducida automáticamente

Artículo escrito por jssuriyakumar y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *