Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Machine learning 特征归一化后kNN分类的准确率下降?_Machine Learning_Classification_Normalization_Nearest Neighbor_Knn - Fatal编程技术网

Machine learning 特征归一化后kNN分类的准确率下降?

Machine learning 特征归一化后kNN分类的准确率下降?,machine-learning,classification,normalization,nearest-neighbor,knn,Machine Learning,Classification,Normalization,Nearest Neighbor,Knn,我正在对一些数据进行分类。我有随机分割的数据,用于80/20比例的训练和测试集。 我的数据如下所示: [ [1.0, 1.52101, 13.64, 4.49, 1.1, 71.78, 0.06, 8.75, 0.0, 0.0, 1.0], [2.0, 1.51761, 13.89, 3.6, 1.36, 72.73, 0.48, 7.83, 0.0, 0.0, 2.0], [3.0, 1.51618, 13.53, 3.55, 1.54, 72.99, 0.39, 7.78, 0.0

我正在对一些数据进行分类。我有随机分割的数据,用于80/20比例的训练和测试集。 我的数据如下所示:

[ [1.0, 1.52101, 13.64, 4.49, 1.1, 71.78, 0.06, 8.75, 0.0, 0.0, 1.0], 
  [2.0, 1.51761, 13.89, 3.6, 1.36, 72.73, 0.48, 7.83, 0.0, 0.0, 2.0],
  [3.0, 1.51618, 13.53, 3.55, 1.54, 72.99, 0.39, 7.78, 0.0, 0.0, 3.0],
  ...
]
矩阵最后一列中的项目是类:1.0、2.0和3.0

特征规范化后我的数据如下所示:

[[-0.5036443480260487, -0.03450760227559746, 0.06723230162846759, 0.23028986544844693, -0.025324623254270005, 0.010553065215338569, 0.0015136367098358505, -0.11291235596166802, -0.05819669234942126, -0.12069793876044387, 1.0], 
[-0.4989050339943617, -0.11566537753097901, 0.010637426608816412, 0.2175704556290625, 0.03073267976659575, 0.05764598316498372, -0.012976783512350588, -0.11815839520204152, -0.05819669234942126, -0.12069793876044387, 2.0],
...
]
我用于规范化的公式:

(X - avg(X)) / (max(X) - min(X))

我对每个K=1到25(仅奇数)执行kNN分类100次。我记录所用K的平均精度。 以下是我的结果:

Average accuracy for K=1 after 100 tests with different data split: 98.91313003886198 %   
Average accuracy for K=3 after 100 tests with different data split: 98.11976006170633 %    
Average accuracy for K=5 after 100 tests with different data split: 97.71226079929019 %  
Average accuracy for K=7 after 100 tests with different data split: 97.47493145754373 %    
Average accuracy for K=9 after 100 tests with different data split: 97.16596220947888 %   
Average accuracy for K=11 after 100 tests with different data split: 96.81465365733266 %   
Average accuracy for K=13 after 100 tests with different data split: 95.78772655522567 %    
Average accuracy for K=15 after 100 tests with different data split: 95.23116406332706 %    
Average accuracy for K=17 after 100 tests with different data split: 94.52371789094929 %    
Average accuracy for K=19 after 100 tests with different data split: 93.85285871435981 %   
Average accuracy for K=21 after 100 tests with different data split: 93.26620809747965 %    
Average accuracy for K=23 after 100 tests with different data split: 92.58047022661833 %
Average accuracy for K=25 after 100 tests with different data split: 90.55746523509124 %
但当我应用特征规范化时,准确率会显著下降。 我的kNN结果与归一化特征:

Average accuracy for K=1 after 100 tests with different data split: 88.56128075154439 % 
Average accuracy for K=3 after 100 tests with different data split: 85.01466511662318 %    
Average accuracy for K=5 after 100 tests with different data split: 83.32096281613967 %    
Average accuracy for K=7 after 100 tests with different data split: 83.09434478900455 %   
Average accuracy for K=9 after 100 tests with different data split: 82.05628926919964 %  
Average accuracy for K=11 after 100 tests with different data split: 79.89732262550343 %   
Average accuracy for K=13 after 100 tests with different data split: 79.60617886853211 %    
Average accuracy for K=15 after 100 tests with different data split: 79.26511126374507 %    
Average accuracy for K=17 after 100 tests with different data split: 77.51457877706329 %   
Average accuracy for K=19 after 100 tests with different data split: 76.97848441605367 %    
Average accuracy for K=21 after 100 tests with different data split: 75.70005919265326 %    
Average accuracy for K=23 after 100 tests with different data split: 76.45758217099551 %   
Average accuracy for K=25 after 100 tests with different data split: 76.16619492431572 %
我在代码中的算法没有逻辑错误,我在简单数据上检查了它



为什么特征归一化后kNN分类的准确率会下降这么多?我想标准化本身并不会降低任何分类的准确率。那么,使用特征规范化的目的是什么

KNN的工作方式是找到与之相似的实例。当它计算两点之间的
欧几里德距离时。现在,通过标准化,您可以改变特征的比例,从而改变精度


看看研究。转到图中,您会发现不同的缩放技术具有不同的精度。

KNN的工作方式与它找到的实例相似。当它计算两点之间的
欧几里德距离时。现在,通过标准化,您可以改变特征的比例,从而改变精度


看看研究。转到图中,您会发现不同的缩放技术提供不同的精度。

人们普遍错误地认为,标准化永远不会降低分类精度。很可能

怎么做?

行中的相对值也非常重要。事实上,它们确定了点在要素空间中的位置。执行规范化时,可能会严重偏移该相对位置。这是可以感觉到的,特别是在k-NN分类中,因为它直接作用于点之间的距离。相比之下,在支持向量机中,它的效果并不明显,因为在这种情况下,优化过程仍然能够找到一个相当精确的超平面

您还应该注意,这里使用avg(X)进行规范化。因此,在特定行的相邻列中考虑两个点。如果第一个点远远低于平均值,第二个点远远高于各自列的平均值,而在非标准化意义上,它们是非常接近的数值,则距离计算可能会有很大差异


永远不要指望标准化会带来奇迹。

人们普遍错误地认为,标准化永远不会降低分类精度。很可能

怎么做?

行中的相对值也非常重要。事实上,它们确定了点在要素空间中的位置。执行规范化时,可能会严重偏移该相对位置。这是可以感觉到的,特别是在k-NN分类中,因为它直接作用于点之间的距离。相比之下,在支持向量机中,它的效果并不明显,因为在这种情况下,优化过程仍然能够找到一个相当精确的超平面

您还应该注意,这里使用avg(X)进行规范化。因此,在特定行的相邻列中考虑两个点。如果第一个点远远低于平均值,第二个点远远高于各自列的平均值,而在非标准化意义上,它们是非常接近的数值,则距离计算可能会有很大差异

不要指望正常化会创造奇迹