【问题标题】:Accuracy of preprocessing single sample预处理单个样本的准确性
【发布时间】:2018-09-16 01:37:45
【问题描述】:

我一直在努力使用 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)

【问题讨论】:

  • 显示代码,你是如何处理单个样本的。您应该使用训练中使用的相同量表。如果您在单个样本上调用scale(),则会给出错误的结果。
  • 我已经添加了代码,如果在单个样本上使用 scale() 时得到不正确的结果,我将如何正确预处理单个样本?

标签: python scikit-learn preprocessor knn


【解决方案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() 方法不返回任何内容。它只是分析数据以了解均值和标准偏差。 transform() 将使用学习到的平均值和标准来缩放数据并返回新数据。

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

【讨论】:

  • 太棒了,解决了问题,最终也提高了模型的准确性。
猜你喜欢
  • 2017-12-08
  • 2020-09-07
  • 2017-08-07
  • 2018-09-13
  • 2016-05-07
  • 2018-05-26
  • 2016-06-03
  • 2011-06-15
相关资源
最近更新 更多