meka中mlknn分类准确率和Python准确率不同?为什么

最近使用meka跑emotions数据集,发现MLkNN的汉明损失在0.21,而用python跑出来一直是0.30左右,后对比了meka中mlknn和python的代码,发现对于MLKNN部分是一模一样的。通过单步调试,发现问题出现在寻找knn近邻中,meka中knn中的代码是linearNNsearch方法,此方法默认算距离时候算的是标准化后的距离。而python中,并没有进行数据标准化,后来在python中加入标准化代码。发现效果和meka类似。但即便类似,为什么不是一模一样呢?下面是原因:

说明:python中的标准化和meka中还有一点点区别

在python中,我是先用trainset标准化,然后对testset做标准化,最后寻找测试集的近邻时,近邻样本和测试样本不在一个标准化区间内。而meka中有一点点不同,即python中是先标准化,然后算标准化后的距离平方,而meka中,并没有先标准化,而是在算距离的时候才用到标准化的公式。导致结果有细微的差别,总之,meka和python准确率不同主要是由于数据是否标准化,至于同样数据集测试集,两种工具的结果仍不完全相同是因为代码编程过程中标准化步骤的细微差别,这种差别是很小的,不影响算法的性能。

你可能感兴趣的:(机器学习)