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.
Sie können inverse_transform
mit Ihrem scalery
-Objekt verwenden:
y_new_inverse = scalery.inverse_transform(y_new)
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 ...