使用预先训练的具有缩放特征的模型进行单一预测

时间:2019-06-30 19:02:45

标签: scikit-learn persistence svm prediction

我训练了具有缩放功能的SVM scikit-learn模型,并坚持使用以备后用。在另一个文件中,我加载了保存的模型,并且想要提交一组新的功能来执行预测。我是否需要扩展这套新功能?我该如何仅使用一组功能?

我没有在扩展新的值,我得到的结果很奇怪,我无法进行预测。尽管如此,使用StratifiedShuffleSplit生成的大型测试集进行的预测仍然可以正常工作,我的准确率达到了97%。

问题在于使用通过缩放功能训练的持久SVM模型进行的单个预测。我在做什么错的想法?​​

1 个答案:

答案 0 :(得分:0)

是的,您绝对应该对新数据执行相同的缩放。但是,如果您没有保存之前训练过的洁牙机,这可能是不可能的。

这就是为什么除了训练和保存SVM之外,还应该与SVM一起训练和保存定标器。在机器学习术语中,这称为管道。

这是在玩具示例中使用它的方式:

from sklearn.svm import SVC
from sklearn.preprocessing import StandardScaler
from sklearn.datasets import load_breast_cancer
from sklearn.pipeline import Pipeline
from sklearn.model_selection import train_test_split

data = load_breast_cancer()
X, y = data.data, data.target
X_train, X_test, y_train, y_test = train_test_split(X,y)

pipe = Pipeline([('scaler',StandardScaler()), ('svc', SVC())])

然后,该管道支持与常规scikit-learn模型相同的操作:

pipe.fit(X_train, y_train)
pipe.score(X_test, y_test)

拟合pipe时,它将首先缩放,然后将缩放后的要素输入到分类器中。

一旦受过训练,就可以像之前保存SVM一样保存pipe对象。当您将其加载并应用于新数据时,它将在进行预测之前根据需要进行缩放。