web-dev-qa-db-de.com

scikit-learn: Wie kann man das vorhergesagte 'y' Ergebnis reduzieren?

Ich versuche, scikit-learn und maschinelles Lernen mit dem Boston Housing Data Set zu lernen.

# I splitted the initial dataset ('housing_X' and 'housing_y')
from sklearn.cross_validation import train_test_split
X_train, X_test, y_train, y_test = train_test_split(housing_X, housing_y, test_size=0.25, random_state=33)

# I scaled those two datasets
from sklearn.preprocessing import StandardScaler
scalerX = StandardScaler().fit(X_train)
scalery = StandardScaler().fit(y_train)
X_train = scalerX.transform(X_train)
y_train = scalery.transform(y_train)
X_test = scalerX.transform(X_test)
y_test = scalery.transform(y_test)

# I created the model
from sklearn import linear_model
clf_sgd = linear_model.SGDRegressor(loss='squared_loss', penalty=None, random_state=42) 
train_and_evaluate(clf_sgd,X_train,y_train)

Basierend auf diesem neuen Modell clf_sgd versuche ich, die y basierend auf der ersten Instanz von X_train vorherzusagen.

X_new_scaled = X_train[0]
print (X_new_scaled)
y_new = clf_sgd.predict(X_new_scaled)
print (y_new)

Das Ergebnis ist jedoch für mich ziemlich seltsam (1.34032174, anstelle von 20-30, dem Preisbereich der Häuser)

[-0.32076092  0.35553428 -1.00966618 -0.28784917  0.87716097  1.28834383
  0.4759489  -0.83034371 -0.47659648 -0.81061061 -2.49222645  0.35062335
 -0.39859013]
[ 1.34032174]

Ich denke, dass dieser 1.34032174-Wert zurückgesetzt werden sollte, aber ich versuche herauszufinden, wie er dies ohne Erfolg tun kann. Jeder Tipp ist willkommen. Vielen Dank.

13
Hookstark

Sie können inverse_transform mit Ihrem scalery-Objekt verwenden:

y_new_inverse = scalery.inverse_transform(y_new)
19
Ryan

Etwas spät zum Spiel: Skaliere nicht dein y. Mit der Skalierung von y verlieren Sie tatsächlich Ihre Einheiten. Die Regressions- oder Verlustoptimierung wird tatsächlich durch die relativen Unterschiede zwischen den Merkmalen bestimmt. Übrigens, bei Hauspreisen (oder einem anderen Geldwert) ist es üblich, den Logarithmus zu verwenden. Dann müssen Sie natürlich eine numpy.exp () machen, um zu den tatsächlichen Dollar/Euro/Yen zurückzukehren ...

1
Maartenk