Scikit-learn:使用使用缩放数据训练的模型预测新的原始和未缩放实例



我使用scikit-learn制作了不同的分类器模型,这是一帆风顺的。由于数据单位的差异(我从按相应类别标记的不同传感器获取数据),我选择使用 StandardScale 模块缩放特征。

不同机器学习分类器的结果准确性分数很好。但是,当我尝试使用该模型预测传感器值的原始实例(意味着未缩放)时,模型会输出错误的分类。

由于对训练数据的缩放,真的应该如此吗?如果是这样,有没有一种简单的方法来缩放原始值?我想使用 joblib 为此使用模型持久性,如果有一种方法可以使其尽可能模块化,我们将不胜感激。意思是说,不要在每次训练数据更改时记录每个特征的平均和标准变异。

由于对训练数据的缩放,真的应该如此吗?

是的,这是预期行为。您在缩放数据上训练了模型,因此它仅适用于缩放数据。

如果是这样,有没有一种简单的方法来缩放原始值?

是的,只需保存您的缩放器即可。

# Training
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
...
# do some training, probably save classifier, and save scaler too!

然后

# Testing
# load scaler
scaled_instances = scaler.transform(raw_instances)

意思是说,不要在每次训练数据发生变化时记录每个特征的均值和标准变异

这正是您必须做的,尽管不是手动操作(因为这是缩放器计算的内容),但本质上"在引擎盖下"这就是发生的事情 - 您必须为每个功能存储平均值/标准。

几天来我一直在为这个问题苦苦挣扎,并在谷歌上搜索了很多,最后,多亏了 lejlot 的帖子,我解决了你确切提到的问题。

我很恼火,没有人写出在标准化 X(目标函数)后如何预测任意数的方法(顺便说一句,你不应该标准化 y。起初我很困惑,因为每个人都似乎很困惑,写错了。

我将在下面放置一个您可以轻松参考的代码。

from sklearn.neural_network import MLPClassifier, MLPRegressor
from sklearn.preprocessing import StandardScaler
from numpy import *

X = array([ [0], [1],[2],[3],[4],[5],[6],[7] ])  
y = 2*array([ [0], [1],[2],[3],[4],[5],[6],[7]  ])

scaler = StandardScaler()
X_train = scaler.fit_transform(X)
print(X_train)


model = MLPRegressor(hidden_layer_sizes=(3 ), activation='logistic', solver='lbfgs', alpha=0.0001, batch_size ="auto",
                    learning_rate= 'constant', learning_rate_init=0.001, power_t=0.5, max_iter=2000, shuffle=True, random_state=None,
                    tol=0.0001, verbose=True, warm_start=False, momentum=0.9, nesterovs_momentum=True, early_stopping=False,
                    validation_fraction=0.1, beta_1=0.9, beta_2=0.999, epsilon=1e-08)

model.fit(X_train, y) 
# YOU CAN SEE I DIDN't STANDARDIZE y BUT ONLY X.

# Testing
# load scaler
scaled_instances = scaler.transform(array([ [1],[2] ]))
print(scaled_instances)
s = model.predict( scaled_instances )
print(s)

我测试了几个数字并显示了正确的值。从 lejlot 的帖子中获得了非常有用的信息,即在训练时保存了"缩放器"。<-我完全不知道。

多亏了这个功能,无论我们使用什么数字来"预测",这个保存的缩放器都会缩放我们将用于预测未知输出的输入数字。

相关内容

最新更新