2016-03-21 8 views
-1

versucht, diesen Code:Lineare Regression andere Ergebnisse als synthetischen Parameter

from sklearn import linear_model 
import numpy as np 

x1 = np.arange(0,10,0.1) 
x2 = x1*10 

y = 2*x1 + 3*x2 
X = np.vstack((x1, x2)).transpose() 

reg_model = linear_model.LinearRegression() 
reg_model.fit(X,y) 

print reg_model.coef_ 
# should be [2,3] 

print reg_model.predict([5,6]) 
# should be 2*5 + 3*6 = 28 

print reg_model.intercept_ 
# perfectly at the expected value of 0 

print reg_model.score(X,y) 
# seems to be rather confident to be right 

Die Ergebnisse sind

  • [0,31683168 3,16831683]
  • 20,5940594059
  • 0,0
  • 1,0

und daher nicht, was ich erwartet habe - sie sind nicht dasselbe wie die Parameter, die verwendet werden, um die Daten zu synthetisieren. Warum ist das so?

Antwort

0

Ihr Problem ist mit der Einzigartigkeit von Lösungen, da beide Dimensionen die gleichen sind (die Anwendung einer linearen Transformation auf eine Dimension macht keine eindeutigen Daten in den Augen dieses Modells), Sie erhalten eine unendliche Anzahl von möglichen Lösungen passen Sie Ihre Daten an. Wenn Sie eine nichtlineare Transformation auf Ihre zweite Dimension anwenden, sehen Sie die gewünschte Ausgabe.

from sklearn import linear_model 
import numpy as np 

x1 = np.arange(0,10,0.1) 
x2 = x1**2 
X = np.vstack((x1, x2)).transpose() 
y = 2*x1 + 3*x2 

reg_model = linear_model.LinearRegression() 
reg_model.fit(X,y) 
print reg_model.coef_ 
# should be [2,3] 

print reg_model.predict([[5,6]]) 
# should be 2*5 + 3*6 = 28 

print reg_model.intercept_ 
# perfectly at the expected value of 0 

print reg_model.score(X,y) 

Ausgänge sind

  • [ 2. 3.]
  • [ 28.]
  • -2.84217094304e-14
  • 1.0