预处理单个样品的准确性

时间:2018-04-06 05:13:20

标签: python scikit-learn preprocessor knn

我一直致力于使用KNN的sklearn实现来预测样本。

到目前为止,我一直在用我的数据集样本训练我的分类器,然后用另一个不同的数据集样本对其进行测试,看起来准确率达到98%左右。

然而,当试图预测单个样本时,即使使用样本模型已经过训练,预测仍然存在。我唯一的猜测是,使用preprocessing.scale预处理整个数据集与使用相同技术预处理单个样本时存在问题。

我已阅读Preprocessing in scikit learn - single sample - Depreciation warning,我想知道是否有正确的方法来预处理单个样本。

编辑:预处理代码如下所示 对于整个数据集:

self.trainData = preprocessing.scale(self.trainData)

对于单个样本,其中log与traindata中的样本具有相同的形式。

log = preprocessing.scale(log)

1 个答案:

答案 0 :(得分:1)

您应该使用StandardScaler作为scale函数的包装器described here。此包装器存储从训练数据中学习的均值和标准差,然后使用此信息来缩放其他数据。

使用示例:

from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()

trainData = scaler.fit_transform(trainData)
# I have used reshape because of single sample. In other cases, its not needed
log = scaler.transform(np.reshape(log, (1,-1)))

fit_transform()只是首先调用fit()然后调用transform()的快捷方式。

fit()方法不返回任何内容。它只是分析数据以了解平均值和standard_deviation。 transform()将使用学习的mean和std来缩放数据并返回新数据。

您应该只在培训数据上调用fit()fit_transform(),而不是其他任何内容。要转换测试或新数据,请始终使用transform()