scikit-learn:如何缩减 'y' 预测结果
scikit-learn: how to scale back the 'y' predicted result
我正在尝试使用波士顿住房数据集学习 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
值应该缩减,但我想弄清楚如何做到这一点,但没有成功。欢迎任何提示。非常感谢。
您可以使用 inverse_transform
使用您的 scalery
对象:
y_new_inverse = scalery.inverse_transform(y_new)
比赛有点晚了:
只是不要缩放你的 y。通过缩放 y 你实际上失去了你的单位。回归或损失优化实际上是由特征之间的相对差异决定的。顺便说一句,对于房价(或任何其他货币价值),通常的做法是取对数。那么你显然需要做一个 numpy.exp() 来回到实际的 dollars/euros/yens...
我正在尝试使用波士顿住房数据集学习 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
值应该缩减,但我想弄清楚如何做到这一点,但没有成功。欢迎任何提示。非常感谢。
您可以使用 inverse_transform
使用您的 scalery
对象:
y_new_inverse = scalery.inverse_transform(y_new)
比赛有点晚了: 只是不要缩放你的 y。通过缩放 y 你实际上失去了你的单位。回归或损失优化实际上是由特征之间的相对差异决定的。顺便说一句,对于房价(或任何其他货币价值),通常的做法是取对数。那么你显然需要做一个 numpy.exp() 来回到实际的 dollars/euros/yens...