Scikit learn 使用具有比例特征的预训练模型进行单一预测

Scikit learn 使用具有比例特征的预训练模型进行单一预测,scikit-learn,persistence,svm,prediction,Scikit Learn,Persistence,Svm,Prediction,我训练了一个具有缩放特征的SVM scikit学习模型,并将其保存到以后使用。在另一个文件中,我加载了保存的模型,我想提交一组新的特征来执行预测。我是否必须扩展这套新功能?如何仅使用一组功能就可以做到这一点 我没有调整新的价值观,我得到了奇怪的结果,我不能做预测。尽管如此,由StratifiedShuffleSplit生成的大型测试集的预测效果良好,我获得了97%的准确率 问题在于单一预测使用的是经过缩放特征训练的持久化SVM模型。知道我做错了什么吗?是的,您应该对新数据执行相同的缩放。但是,如

我训练了一个具有缩放特征的SVM scikit学习模型,并将其保存到以后使用。在另一个文件中,我加载了保存的模型,我想提交一组新的特征来执行预测。我是否必须扩展这套新功能?如何仅使用一组功能就可以做到这一点

我没有调整新的价值观,我得到了奇怪的结果,我不能做预测。尽管如此,由StratifiedShuffleSplit生成的大型测试集的预测效果良好,我获得了97%的准确率


问题在于单一预测使用的是经过缩放特征训练的持久化SVM模型。知道我做错了什么吗?

是的,您应该对新数据执行相同的缩放。但是,如果您没有保存以前训练过的定标器,这可能是不可能的

这就是为什么不应该训练和保存SVM,而应该一起训练和保存scaler和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学习
模型相同的操作:

pipe.fit(X_train, y_train)
pipe.score(X_test, y_test)
安装
管道时,它首先缩放,然后将缩放后的特征输入分类器


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

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

这就是为什么不应该训练和保存SVM,而应该一起训练和保存scaler和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学习
模型相同的操作:

pipe.fit(X_train, y_train)
pipe.score(X_test, y_test)
安装
管道时,它首先缩放,然后将缩放后的特征输入分类器


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

您可以在缩放过程中包括测试功能,以便在测试和训练测试的联合上进行缩放。也许这有帮助。测试集中缺少的准确性也可能是测试集结构的问题,您是否运行了交叉验证?这意味着您可以使用不同的训练集和测试集运行它。您可以在缩放过程中包括您的测试功能,以便在测试和训练测试的联合上进行缩放。也许这有帮助。测试集中缺少的准确性也可能是测试集结构的问题,您是否运行了交叉验证?这意味着您可以使用不同的训练集和测试集运行它。