Шпаргалка
Перед защитой
Короткая выжимка: лаба за минуту, команды из кода и словарик.
Лаба за минуту
- Энтропия, Джини, MSE: одной формулой numpy через доли классов. Значения 0.650, 1.585, 0.278, 0.667, 0.667, 66.67.
- Своё дерево: перебор признаков и порогов, взвешенный IG, 4 критерия остановки. Ирисы: 0.89-0.93, листья и глубина как у sklearn.
- TreeRegressor: MSE и среднее в листе. Делил по странам, лучшее дерево глубины 5: MAE 3.2 года, R² 0.69.
- Лес: бутстрап, случайные признаки, голосование. ROC-AUC из-за дисбаланса 80/20. Test 0.859 (sklearn 0.860, дерево 0.806).
- Важность: число продуктов, возраст, баланс, активность, Германия.
- Лес для регрессии лучше дерева при всех критериях, лучший R² 0.760.
- Потери и градиенты без циклов. В тестах: MAE 0.22 (не 0.21), градиент Lq для зеркальной потери, MSE без ½.
- Бустинг: синус MSE 0.026 против 0.236. Отток: ρ подбирается 0.850, ρ = 1 0.433, ρ всегда 0.5 из-за градиента 2(f - y).
Команды из кода
| Команда | Что делает |
|---|---|
np.unique(y, return_counts=True) | Разные значения и сколько раз каждое |
np.log2 | Логарифм по основанию 2 |
np.argsort | Номера элементов по возрастанию |
np.flatnonzero(маска) | Номера, где маска True |
np.where(усл, a, b) | a там, где условие верно, иначе b, для всего массива |
np.sign | Знак числа: 1, -1 или 0 |
np.linspace(-1, 1, 201) | 201 число от -1 до 1 с равным шагом |
a[:, None] | Сделать из вектора столбец, чтобы получить матрицу при умножении |
np.eye(n) | Единичная матрица n × n |
np.random.default_rng(seed) | Генератор случайных чисел с зерном |
rng.integers(0, m, size=m) | m случайных номеров с повторами (бутстрап) |
rng.permutation | Перемешать массив |
df.drop(columns=...) | Удалить столбцы |
s.str[:4].astype(int) | Первые 4 символа текста в число |
pd.get_dummies(df, columns=[...]) | One-hot кодирование |
df.to_dict('records') | Таблица в список строк-словарей |
train_test_split(..., stratify=y) | Деление на train/test с сохранением долей классов |
GroupShuffleSplit | Деление по группам (странам) целиком |
StratifiedKFold(n_splits=3) | 3 фолда для кросс-валидации |
DecisionTreeClassifier / Regressor | Дерево sklearn: классы / числа |
max_features | Сколько случайных признаков смотреть в каждом узле |
feature_importances_ | Важность MDI у дерева sklearn |
accuracy_score, f1_score, roc_auc_score | Метрики классификации |
mean_absolute_error, r2_score | Метрики регрессии |
kagglehub.dataset_download | Скачать публичный датасет Kaggle без ключа |
class B(A), super().__init__ | Наследование: взять всё от A, вызвать его конструктор |
**kwargs | «Все остальные параметры», передаются дальше как есть |
Словарик
- Дерево решений
- Модель из вопросов «признак < порог?», ответ в листьях.
- Энтропия / Джини
- Мера перемешанности классов, 0 = все одного класса.
- IG
- Насколько деление уменьшило беспорядок (взвешенно по размеру частей).
- Критерий остановки
- Когда узел больше не делить.
- Переобучение
- Модель запомнила train вместе со случайностями, на test хуже.
- Утечка данных
- В test попала информация из train (у нас: та же страна в другой год).
- Бэггинг
- Много моделей на бутстрап-выборках, ответы усредняются.
- Бутстрап
- Выборка того же размера с возвращением.
- Бустинг
- Модели по очереди исправляют ошибки суммы предыдущих.
- Стэкинг
- Разные модели + мета-модель, которая учится на их ответах.
- Антиградиент
- Направление, в котором потеря уменьшается быстрее всего.
- ρ
- Длина шага в бустинге.
- ROC-AUC
- Вероятность, что ушедший клиент оценён выше оставшегося.
- precision / recall / F1
- Точность среди названных «уйдёт» / полнота среди ушедших / их баланс.
- MAE / RMSE / MAPE / R²
- Ошибка в годах / с упором на крупные / в процентах / доля объяснённого разброса.
- MDI
- Важность по суммарному уменьшению беспорядка в узлах.
- Перестановочная важность
- Падение качества после перемешивания признака.
- Квантиль
- Значение, ниже которого лежит заданная доля данных.
Одна фразаДерево задаёт вопросы, лес усредняет много случайных деревьев, бустинг добавляет деревья, исправляющие ошибку, а ρ подбирает длину шага.