Классификация ближайших соседей, формула нормализации данных. Поиск среднего и среднеквадратичного отклонений

Решаю задание из летней практики. Ранее не работал с такими задачами вообще, поэтому нужна помощь

В общем, хочу для начала узнать - правильно ли я нормализировал столбцы.

По заданию преподавателя нужно было сделать следующее: выполнить нормализацию каждого столбца (кроме последнего) матрицы X.

import numpy as np

X = np.array([
[4, 4],
[3, 3],
[5, 3],
[2, 3],
[5, 5],
[3, 2],
[2, 4],
[4, 5],
[5, 4],
[2, 2]])

sub_X = X[:, 0:-1] # Хранит часть матрицы X без последнего столбца.

# Нормализация, по формуле которую я нашел в гугле - X_norm = X-X_min / X_max-X_min
normalized_X = (sub_X - np.min(sub_X, axis=0)) / (np.max(sub_X, axis=0) - np.min(sub_X, axis=0))

Я не уверен, что формула найденная мной является верной, поэтому решил перестраховаться и спросить насчет этого тоже.

Следующее что я должен выполнить по заданию: зная параметры среднего и среднеквадратического отклонения по каждому столбцу sub_X, выполнить нормализацию объекта obj

Я прошерстил довольно много статей на habr, а так же википедию, но все еще не нашел (не понял) что является средним отклонением (находил только среднеквадратичное отклонение, возможно это одно и тоже) был бы рад услышать ответ.

Теперь перейду к основному вопросу: как найти это самое среднее и среднеквадратичное отклонение? (Являются ли значения моей нормализированной матрицы X этими отклонениями)?

Буду благодарен за любое объяснение / помощь с кодом если она понадобится


Ответы (1 шт):

Автор решения: passant
  1. Начнем с "основного вопроса" - "как найти это самое среднее и среднеквадратичное отклонение?". Еще раз читаем: найти СРЕДНЕЕ и найти СРЕДНЕКВАДРАТИЧНОЕ ОТКЛОНЕНИЕ.

Уж не знаю, где и что вы изучаете, но что такое среднее - вообще-то говоря учат в школе. В классе этак в пятом. При работе c numpy можете использовать соответствующий метод .mean(). Для вашего примера это будет выглядеть вот так:

mn1=X[:,0].mean()
mn2=X[:,1].mean()

Но если очень хочется, то можете и посчитать самостоятельно, по формуле среднего (за одно - и что такое среднее значение вспомните):

av1=X[:,0].sum()/len(X)
av2=X[:,1].sum()/len(X)

Результат тождественен. Можете проверить.

Что такое среднеквадратичное отклонение - это тоже изучают на первом семестре курса теории вероятностей и мат.статистике. По сути - это корень квадратный среднего значения квадратов отклонения значений ряда от его же среднего. Т.е. опять можете посчитать самостоятельно:

std1=(((X[:,0]-av1)**2).sum()/len(X))**0.5
std2=(((X[:,1]-av1)**2).sum()/len(X))**0.5

Опять-же, о нас позаботились создатели numpy и создали готовый метод:

std1=X[:,0].std()
std2=X[:,1].std()
  1. Вопрос второй -"Являются ли значения моей нормализированной матрицы X этими отклонениями" - разумеется нет. Это совсем другие сущности.

  2. Вопрос третий - Нормализация. Дело в том, что нормализация бывает разной. По какой формуле вы должны считать в вашем случае - это должен вам был сказать преподаватель (явно в задании или неявно, на занятии, когда объяснял, что такое нормализация). Если вы этот материал упустили - то можете его легко найти в интернет, например: https://wiki.loginom.ru/articles/data-normalization.html и выбрать тот, о котором вам рассказывали. Ну, или какой вам больше понравился.

  3. Вопрос четвертый. "зная параметры среднего и среднеквадратического отклонения ... выполнить нормализацию". Ну, объединив ответы на предыдущие вопросы, ответ получается практически автоматически.

  4. Вопрос пятый. Причем тут "Классификация ближайших соседей" - вообще загадка.

→ Ссылка