ЛР2
Перед защитой

Шпаргалка

Перед защитой

Короткая выжимка: что открыть, что сказать, что значат слова.

Лаба за минуту

  1. Прочитал 3 таблицы по 2240 клиентов, у файлов разные разделители. Пропуски только в доходе, 24.
  2. Задание 1: |2447 − 160803| = 158356, в pandas и SQL.
  3. Задание 2: доля PhD 0.18 у сладкоежек и 0.37 у остальных, без join: isin и подзапрос IN.
  4. EDA: id и линии по строкам бесполезны. Гипотеза «дети уменьшают траты» подтвердилась: 1189 против 306.
  5. Предобработка: убрал id, one-hot, дату в min-max, всё в z-scaling.
  6. Своя kNN совпала с sklearn, 24 дохода заполнены средним трёх соседей.
  7. kMeans k=4 по силуэту: экономные, вино + мясо, золото, гурманы. UMAP разделяет лучше PCA.
  8. Свой kMeans: predict, обновление центров, fit_predict с tol и max_iter.

Методы, которые встречаются в коде

КомандаЧто делает
pd.read_csv(f, sep=';')Читает файл в таблицу с нужным разделителем
.shape(строки, столбцы)
.isna().sum()Число пропусков по столбцам
.loc[маска, 'столбец']Строки по условию, нужный столбец
.min() / .max() / .mean()Минимум / максимум / среднее
.isin(список)True, если значение есть в списке
.map(словарь)Заменяет значения по словарю
pd.crosstab(a, b, normalize='index')Таблица-счётчик пар, доли по строкам
pd.merge(a, b, on='id')Склеивает таблицы по id (join)
pd.get_dummies(df, columns=[...])One-hot кодирование
pd.to_datetime(s, format=...)Текст в дату
.dt.daysПромежуток между датами в днях
.dropna()Убирает строки с пропусками
.groupby(c).median()Медиана по группам
pd.read_sql_query(q, conn)Выполняет SQL, ответ таблицей
MinMaxScaler / StandardScalerМасштаб в [0, 1] / к среднему 0 и разбросу 1
.fit_transform(X)Запомнить параметры и сразу преобразовать
cdist(A, B)Таблица всех расстояний между точками A и B
np.argsort / np.argminНомера по возрастанию / номер минимума
np.take_along_axisДостать значения по таблице номеров
np.allcloseРавны ли массивы с точностью до копеек
np.random.normal / uniformСлучайные числа вокруг центра / равномерно в диапазоне
np.linalg.norm(v, axis=1)Длина каждого вектора-строки
KMeans(n_clusters, init, n_init)Готовый kMeans
.inertia_ / .labels_SSE / номера кластеров после обучения
silhouette_score(X, labels)Средний силуэт
PCA / TSNE / UMAPСнижение размерности до 2-3 осей
sns.boxplot / sns.scatterplotЯщики с усами / точечный график

SQL в одной таблице

СловоЗначит
SELECT ... FROM tВыбери ... из таблицы t
WHEREТолько строки, где условие верно
MIN, MAX, AVG, ABSМинимум, максимум, среднее, модуль
(SELECT ...)Подзапрос: запрос внутри запроса
IN (...)Значение есть в списке
CASE WHEN ... THEN ... ELSE ... ENDЕсли, то, иначе
GROUP BYСчитать отдельно для каждой группы
ORDER BY ... DESCСортировать по убыванию
ASДать имя столбцу
<>Не равно

Словарик

Признак
Одно свойство объекта, столбец таблицы.
Вектор
Объект как список чисел-признаков.
Пропуск, NaN
Пустая ячейка.
Выброс
Значение, резко непохожее на остальные.
Медиана
Середина отсортированного списка, устойчива к выбросам.
Стандартное отклонение
Типичное отклонение значений от среднего.
EDA
Первый осмотр данных графиками.
Гипотеза
Проверяемое предположение о данных.
One-hot
Категория → набор столбцов 0/1, одна единица.
Min-max
Сжатие в отрезок [0, 1].
z-scaling
Среднее 0, разброс 1: (x − среднее) / отклонение.
Евклидово расстояние
Расстояние по линейке, по Пифагору.
kNN
Ответ берём у k самых похожих объектов.
Обучение с учителем
Правильные ответы известны (доход соседей).
Обучение без учителя
Ответов нет, ищем структуру (кластеры).
Кластер
Группа похожих объектов.
Центроид
Центр кластера, среднее его точек.
kMeans
Точки к ближайшему центру, центр в среднее, повторить.
k-means++
Старт с центрами подальше друг от друга.
Итерация
Один круг алгоритма.
Сходимость
Алгоритм перестал что-то менять.
Локальный минимум
Неплохое, но не лучшее решение, где алгоритм застрял.
Инерция, SSE
Сумма квадратов расстояний до своих центров.
Силуэт
От −1 до 1, насколько чётко точки сидят в своих кластерах.
Метод локтя
Выбор k по излому графика инерции.
Снижение размерности
Сжать много признаков в 2-3, чтобы нарисовать.
PCA
Линейный метод: оси наибольшего разброса.
t-SNE
Нелинейный: сохраняет соседей.
UMAP
Нелинейный: соседи плюс общая картина.
Гиперпараметр
Настройка, которую выбирает человек: k, tol, max_iter.
axis=0 / axis=1
Считать по каждому столбцу (вниз) / по каждой строке (вдоль).
Маска
Столбец True/False для выбора строк.
tol
Порог остановки по сдвигу центров.

Если спросят что-то общее

Чем kNN отличается от kMeans?

kNN ищет соседей, чтобы предсказать значение (доход), ему нужны известные ответы. kMeans ищет группы без всяких ответов. Общее у них только расстояние.

Где в лабе обучение с учителем, а где без?

С учителем: kNN, доходы соседей известны. Без учителя: kMeans, групп никто не задавал.

Что было бы без масштабирования вообще?

И kNN, и kMeans смотрели бы почти только на признаки с большими числами (вино, мясо, дни), остальные бы не влияли.

Что ты добавил в ноутбук от себя?

import seaborn (его забыли), ячейку сравнения своей kNN с sklearn, markdown с ответами и выводами.

Одна фраза про всю лабуЯ прочитал и проверил данные, ответил на вопросы в pandas и SQL, проверил гипотезу графиком, восстановил пропуски своей kNN, разделил клиентов на 4 группы готовым kMeans и написал kMeans сам.