regresion programar paso ordinarios minimos lineal cuadrados codigo python scikit-learn linear-regression

programar - Regresión lineal vs forma cerrada Mínimos cuadrados ordinarios en Python



regresion lineal python numpy (1)

Mira los documentos de LinearRegression de sklearn nuevamente.

Por defecto (como tú lo llamas), ¡también cabe un término de intersección!

Manifestación:

import numpy as np from sklearn.datasets import load_boston from sklearn.linear_model import LinearRegression X, y = load_boston(return_X_y=True) """ OLS custom """ w = np.dot(np.linalg.pinv(X), y) print(''custom'') print(w) """ sklearn''s LinearRegression (default) """ clf = LinearRegression() print(''sklearn default'') print(clf.fit(X, y).coef_) """ sklearn''s LinearRegression (no intercept-fitting) """ print(''sklearn fit_intercept=False'') clf = LinearRegression(fit_intercept=False) print(clf.fit(X, y).coef_)

Salida:

custom [ -9.16297843e-02 4.86751203e-02 -3.77930006e-03 2.85636751e+00 -2.88077933e+00 5.92521432e+00 -7.22447929e-03 -9.67995240e-01 1.70443393e-01 -9.38925373e-03 -3.92425680e-01 1.49832102e-02 -4.16972624e-01] sklearn default [ -1.07170557e-01 4.63952195e-02 2.08602395e-02 2.68856140e+00 -1.77957587e+01 3.80475246e+00 7.51061703e-04 -1.47575880e+00 3.05655038e-01 -1.23293463e-02 -9.53463555e-01 9.39251272e-03 -5.25466633e-01] sklearn fit_intercept=False [ -9.16297843e-02 4.86751203e-02 -3.77930006e-03 2.85636751e+00 -2.88077933e+00 5.92521432e+00 -7.22447929e-03 -9.67995240e-01 1.70443393e-01 -9.38925373e-03 -3.92425680e-01 1.49832102e-02 -4.16972624e-01]

Estoy tratando de aplicar el método de Regresión lineal para un conjunto de datos de 9 muestras con alrededor de 50 funciones usando Python. He intentado una metodología diferente para la regresión lineal, es decir, OLS de forma cerrada (mínimos cuadrados ordinarios), LR (regresión lineal), HR (regresión de Huber), NNLS (mínimos cuadrados no negativos) y cada uno de ellos proporciona diferentes ponderaciones.

Pero puedo intuir por qué HR y NNLS tienen una solución diferente, pero LR y OLS de forma cerrada tienen la misma función objetiva de minimizar la suma de los cuadrados de las diferencias entre el valor observado en la muestra dada y los predichos por una función lineal de un conjunto de características. Como el conjunto de entrenamiento es singular, tuve que usar pseudoinverso para realizar OLS de forma cerrada.

w = np.dot(train_features.T, train_features) w1 = np.dot(np.linalg.pinv(w), np.dot(train_features.T,train_target))

Para LR he usado scikit-learn Linear Regression usa la biblioteca lapack de www.netlib.org para resolver el problema de los mínimos cuadrados

linear_model.LinearRegression()

El sistema de ecuaciones lineales o un sistema de ecuaciones polinómicas se conoce como indeterminado si no hay ecuaciones disponibles que sean menos que parámetros desconocidos. Cada parámetro desconocido se puede contar como un grado de libertad disponible. Cada ecuación presentada se puede aplicar como una restricción que restringe un grado de libertad. Como resultado, un sistema indeterminado puede tener infinitas soluciones o ninguna solución. Como en nuestro caso de estudio, el sistema está infradeterminado y también es singular, existen muchas soluciones.

Ahora tanto la biblioteca de pseudoinverso como la de Lapack intenta encontrar la solución de norma mínima de un sistema no determinado cuando ninguna muestra es menor que ninguna de las características. Entonces, ¿por qué la forma cerrada y LR da una solución completamente diferente del mismo sistema de ecuaciones lineales? Me estoy perdiendo algo aquí que puede explicar los comportamientos de ambas maneras. Al igual que si el peudoinverse se calcula de diferentes maneras, como SVD, la factorización QR / LQ, ¿pueden producir una solución diferente para el mismo conjunto de ecuaciones?