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