I linear bin regredieren k
Antwortvariablen y
auf auf k
x n
Prädiktorvariablen X
, wobei k> = n. Mit Scikit-Learn scheint die Regression korrekt zu sein, außer wenn n = k
; d.h. wenn die Matrix der Prädiktoren quadratisch ist. Betrachten Sie die folgende MWE, wobei I die zufällig Matrix X
und Koeffizienten b
erzeugen, um die y
zu konstruieren, dann führen Regression Scikit-Learn zu überprüfen, daß die Koeffizienten die gleichen sind wie die echten Koeffizienten sind:Scikit-Learn Lineare Regression auf quadratische Matrix scheint falsch
import numpy as np
from sklearn import linear_model
n = 5 # number of predictor variables
k = 5 # number of response variables, >= n *** Set = n for issue ***
mu_b = 2.0 # mean of each component of b, used to create coeffs
print "n = ", n
# generate true coefficients ~ N(2,0.09)
b = np.random.normal(2.0, 0.3, n)
print "b = ", b
# generate true predictors ~ N(0,25)
X = np.random.normal(0.0, 5.0, (k,n))
# generate true target variables
y = X.dot(b)
# create linear regression object
regr = linear_model.LinearRegression()
# train model
regr.fit(X,y)
# print coeffs
print "estimated b = ", regr.coef_
# print difference
print "difference = ", np.linalg.norm(b - regr.coef_)
Wenn k> Es gibt keinen Unterschied in der Maschinengenauigkeit, aber wenn k = n ist, kann es einen großen Unterschied geben. Hat jemand anderes das angetroffen? Ist das ein bekannter Fehler?
Ich denke, Sie bekommen Ihre Konzepte verwechselt, in Ihrem Code sieht es aus wie 'k' ist die Anzahl der Prädiktorvariablen, und 'n' ist die Stichprobengröße; und Sie müssen 'n' strikt größer als' k' haben, damit die Regression sinnvoll ist. Denken Sie darüber nach, stellen Sie sich 'k = 1' vor, so dass Sie nur eine Variable haben, die Sie vorherzusagen versuchen, d. H. Sie versuchen, den Gradienten einer Linie zu berechnen. Du brauchst mindestens zwei Punkte, um dies zu erklären, also musst du 'n> 2' haben. – maxymoo
@maxymoo nein, der Code ist korrekt. Es funktioniert, wenn ich das System lstsq aus np.linalg für eine quadratische Matrix und für k> = n mit scikit-learn lösen. Ich glaube, es gibt einen Bug in scikit-learn. – bcf