我一直致力于使用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)
答案 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()
。