Ich verwende sklearn.linear_model.LinearRegression und möchte Standardfehler für meine Koeffizienten berechnen. Soweit ich das beurteilen kann, enthält sklearn keine Funktion, die das tut, also muss ich sie manuell berechnen (siehe https://en.wikipedia.org/wiki/Ordinary_least_squares für ein Beispiel für Standardfehler für die Schätzung des linearen Regressionskoeffizienten).Summe der quadrierten Residuen für sklearn.linear_model.LinearRegression
Ich verwende das residents_ Attribut meiner linearen Regression, um die Summe der quadrierten Residuen zu erhalten. Meine Frage ist, über die Dokumentation unter http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LinearRegression.html, die _residues wie definiert:
residues_: array, Form (n_targets,) oder (1) oder leer ist. Summe von Residuen. Squared Euklidische 2-Norm für jedes Ziel, das während der Passgenauigkeit bestanden. Wenn das lineare Regressionsproblem unterbestimmt ist (die Zahl der linear unabhängigen Zeilen der Trainingsmatrix ist kleiner als die Anzahl der linear unabhängigen Spalten), ist dies ein leeres Array. Wenn der während der Anpassung übergebene Zielvektor 1-dimensional ist, handelt es sich um ein (1,) Shape-Array.
Ist "Summe der Residuen" ein Fehler in der Dokumentation? Ich denke, es sollte "Summe der quadrierten Residuen" sagen. (Die Summe der Residuen in den Trainingsdaten ist für eine lineare Regression immer Null, wenn sie eine Konstante enthält: siehe https://stats.stackexchange.com/questions/194523/why-does-the-sum-of-residuals-equal-0-from-a-graphical-perspective. Der folgende Satz in der Dokumentation sagt auch "quadrierte euklidische 2-Norm", die eine Quadratsumme ist.) Wenn die Dokumentation tatsächlich fehlerhaft ist, wie kann ich das korrigieren?
Edit: Ich kann meinen Verdacht anhand eines einfachen Beispiels bestätigen:
import numpy as np
from sklearn import linear_model
n_obs = 5
X = np.ones((n_obs, 1), dtype=float)
X[3] = 7.0
y = np.ones((n_obs,))
y[1] = 10.0
y[3] = 9.0
model = linear_model.LinearRegression(fit_intercept=True, normalize=False, copy_X=True, n_jobs=1)
np.isclose(np.sum(np.power(y - model.predict(X=X), 2)), model.residues_) # True
Wenn Sie glauben, dass dies ein Fehler ist, können Sie ihn auf der [github issues page] (https://github.com/scikit-learn/scikit-learn/issues) veröffentlichen. Wenn Sie Recht haben, werden sie den Fehler korrigieren, wenn Sie nicht sind, erhalten Sie immer noch Informationen darüber, warum dies so geschrieben (oder implementiert) wurde. –
@VivekKumar danke für den Link, ich werde das tun. – Adrian
Veröffentlicht https://github.com/scikit-learn/scikit-learn/issues/9491 – Adrian