web-dev-qa-db-fra.com

scikit-learn: comment réduire le résultat prédit 'y'

J'essaie d'apprendre scikit-learn et l'apprentissage automatique à l'aide du Boston Housing Data Set.

# 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)

Sur la base de ce nouveau modèle clf_sgd, j'essaie de prédire la y en fonction de la première instance de X_train.

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

Cependant, le résultat est assez étrange pour moi (1.34032174, au lieu de 20-30, la fourchette du prix des maisons)

[-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]

Je suppose que cette valeur 1.34032174 devrait être réduite, mais j'essaie de comprendre comment le faire sans succès. Toute astuce est la bienvenue. Merci beaucoup.

13
Hookstark

Vous pouvez utiliser inverse_transform en utilisant votre objet scalery:

y_new_inverse = scalery.inverse_transform(y_new)
19
Ryan

Peu de retard dans le jeu: Juste ne balance pas votre y. Avec la mise à l'échelle, vous perdez réellement vos unités. L’optimisation de la régression ou de la perte est en réalité déterminée par les différences relatives entre les caractéristiques. BTW pour les prix de l'immobilier (ou toute autre valeur monétaire), il est de pratique courante de prendre le logarithme. Ensuite, vous devez évidemment faire numpy.exp () pour revenir aux dollars/euros/yens réels ...

1
Maartenk