1

Я делаю kNN классификация по некоторым данным. У меня есть данные, которые я произвольно разбил для тренировочных и тестовых наборов в соотношении 80/20. Мои данные выглядит следующим образом:
Коэффициент точности для классификации kNN упал после нормализации нормализации?

[ [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)) 

я выполнить Knn классификации раз для каждого из K = от 1 до 25 (нечетные только цифры). Я записываю среднюю точность для каждого из 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 классификации уменьшается настолько после признака нормализации? Я предполагаю, что сама нормализация не должна ухудшать точность любой классификации. Какова цель использования нормализации функции?

ответ

3

Это общее заблуждение, что нормализация никогда не снизит точность классификации. Это очень хорошо.

КАК?

Относительные значения в строке также очень важны. На самом деле они действительно определяют размещение точек в пространстве объектов. Когда вы выполняете нормализацию, это может серьезно компенсировать относительное размещение. Это ощущается, особенно в классификации k-NN, поскольку она непосредственно действует относительно расстояния между точками. По сравнению с этим, его эффект не ощущается так сильно в SVM, потому что в этом случае процесс оптимизации все равно сможет найти достаточно точную гиперплоскость.

Вы также должны отметить, что здесь вы нормализуетесь с помощью avg (X). Таким образом, рассмотрим две точки в соседних столбцах определенной строки.Если первая точка падает значительно ниже среднего, а вторая точка значительно выше среднего по своим соответствующим столбцам, в то время как в ненормализованном смысле они являются очень близкими численными значениями, расчет расстояний может сильно отличаться.

Никогда не ожидайте нормализации творения чудес.

2

KNN работает так, что находит аналогичные ему экземпляры. Поскольку он вычисляет Euclidean Distance между двумя точками. Теперь по нормализации вы меняете масштаб функций, которые изменили вашу точность.

Посмотрите на this исследований. Переходите к цифрам, вы найдете различные методы масштабирования, дающие разные точности.

Смежные вопросы