Классификация ближайших соседей, формула нормализации данных. Поиск среднего и среднеквадратичного отклонений
Решаю задание из летней практики. Ранее не работал с такими задачами вообще, поэтому нужна помощь
В общем, хочу для начала узнать - правильно ли я нормализировал столбцы.
По заданию преподавателя нужно было сделать следующее: выполнить нормализацию каждого столбца (кроме последнего) матрицы 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 шт):
- Начнем с "основного вопроса" -
"как найти это самое среднее и среднеквадратичное отклонение?". Еще раз читаем: найти СРЕДНЕЕ и найти СРЕДНЕКВАДРАТИЧНОЕ ОТКЛОНЕНИЕ.
Уж не знаю, где и что вы изучаете, но что такое среднее - вообще-то говоря учат в школе. В классе этак в пятом. При работе 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()
Вопрос второй -
"Являются ли значения моей нормализированной матрицы X этими отклонениями"- разумеется нет. Это совсем другие сущности.Вопрос третий - Нормализация. Дело в том, что нормализация бывает разной. По какой формуле вы должны считать в вашем случае - это должен вам был сказать преподаватель (явно в задании или неявно, на занятии, когда объяснял, что такое нормализация). Если вы этот материал упустили - то можете его легко найти в интернет, например: https://wiki.loginom.ru/articles/data-normalization.html и выбрать тот, о котором вам рассказывали. Ну, или какой вам больше понравился.
Вопрос четвертый.
"зная параметры среднего и среднеквадратического отклонения ... выполнить нормализацию". Ну, объединив ответы на предыдущие вопросы, ответ получается практически автоматически.Вопрос пятый. Причем тут
"Классификация ближайших соседей"- вообще загадка.