Boston Housing Data Setを使用してscikit-learn
および機械学習を学習しようとしています。
# 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)
この新しいモデルclf_sgd
に基づいて、X_train
の最初のインスタンスに基づいてy
を予測しようとしています。
X_new_scaled = X_train[0]
print (X_new_scaled)
y_new = clf_sgd.predict(X_new_scaled)
print (y_new)
しかし、結果は私にとって非常に奇妙です(1.34032174
の代わりに20-30
、家の価格の範囲)
[-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]
この1.34032174
値は縮小する必要があると思いますが、成功せずにそれを行う方法を見つけようとしています。どんなヒントでも大歓迎です。どうもありがとうございました。
scalery
オブジェクトを使用してinverse_transform
を使用できます。
y_new_inverse = scalery.inverse_transform(y_new)
ゲームに少し遅れて:あなたのyをスケーリングしないでください。 yをスケーリングすると、実際にユニットを失います。回帰または損失の最適化は、機能間の相対的な違いによって実際に決定されます。ところで、住宅価格(またはその他の金銭的価値)については、対数を取るのが一般的です。次に、実際のドル/ユーロ/円に戻すには、明らかにnumpy.exp()を実行する必要があります...