我训练了具有缩放功能的SVM scikit-learn模型,并坚持使用以备后用。在另一个文件中,我加载了保存的模型,并且想要提交一组新的功能来执行预测。我是否需要扩展这套新功能?我该如何仅使用一组功能?
我没有在扩展新的值,我得到的结果很奇怪,我无法进行预测。尽管如此,使用StratifiedShuffleSplit生成的大型测试集进行的预测仍然可以正常工作,我的准确率达到了97%。
问题在于使用通过缩放功能训练的持久SVM模型进行的单个预测。我在做什么错的想法?
答案 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
对象。当您将其加载并应用于新数据时,它将在进行预测之前根据需要进行缩放。