Попередня тема: дерева рішень
Головна вимога до всіх трьох рівнів: кожен висновок підпертий числом або графіком. Фраза «ліс працює краще» без цифри не зараховується.
рівень 1Рівень 1 — База
Повтори порівняння «одне дерево проти лісу» на своїх даних.
Візьми load_breast_cancer() або load_wine() з sklearn.datasets, розбий на
train/test і навчи три моделі: DecisionTreeClassifier(), RandomForestClassifier(n_estimators=10)
і RandomForestClassifier(n_estimators=300). Далі побудуй криву тестової точності
від n_estimators для значень 1, 5, 10, 25, 50, 100, 200, 400.
Зроблено, якщо:
- крива побудована, і на ній видно, де точність виходить на плато;
- виписано три числа: точність одного дерева, точність на плато й приблизна
кількість дерев, після якої приріст менший за 0.005;
- одним реченням пояснено, чому ця крива, на відміну від кривої max_depth
з попередньої теми, не розвертається вниз.
рівень 2Рівень 2 — Плюс
Знайди компроміс сили й кореляції на числах.
Для max_features від 1 до кількості ознак побудуй на одному графіку три криві:
- точність ансамблю —
ліс.score(X_тест, y_тест); - сила окремого дерева —
np.mean([д.score(X_тест, y_тест) for д in ліс.estimators_]); - згода дерев — частка тестових обʼєктів, на яких два випадково взяті дерева лісу дають однакову відповідь (усередни хоча б по 20 парах).
Зроблено, якщо:
- усі три криві на одному графіку з підписаними осями;
- показано, що зі зростанням max_features сила окремого дерева росте, а згода теж росте —
тобто вимоги тягнуть у різні боки;
- назване значення max_features, на якому точність ансамблю максимальна, і сказано,
чи збігається воно з $\sqrt{p}$;
- окремим реченням пояснено, чому «згода 100%» означала б, що ансамбль вироджений.
рівень 3Рівень 3 — Виклик
Дослідь межу застосовності важливостей ознак.
Візьми датасет із практики й додай до нього ще три копії ознаки «витрати»
з різним рівнем шуму: витрати + rng.normal(0, s, n) для s = 0.1, 0.5, 2.0.
Далі поступово додавай ці копії в модель (0, 1, 2, 3 дублікати) і для кожного
варіанта фіксуй MDI оригінальних «витрат», MDI «id сесії» та тестову точність.
Зроблено, якщо:
- побудовано графік: по осі X — кількість дублікатів, по осі Y — MDI «витрат»
і MDI «id сесії» двома лініями;
- названо кількість дублікатів, на якій MDI справжньої ознаки опускається нижче
за MDI чистого шуму;
- показано, що тестова точність при цьому майже не змінилась — тобто модель
не постраждала, а інтерпретація зламалась;
- сформульовано практичне правило в одне речення: за яких умов взагалі не можна
довіряти feature_importances_.
Додатковий бал. Постав експеримент на порушення незалежності:
навчи 50 дерев із bootstrap=False і max_features=None, лише з різними random_state.
Виміряй згоду дерев і точність ансамблю, порівняй зі звичайним лісом і поясни
результат через формулу $\mathrm{Var} = \rho\sigma^2 + (1-\rho)\sigma^2/M$.
Підказки
- Пари дерев для «згоди» зручно брати так:
i, j = rng.choice(len(ліс.estimators_), 2, replace=False), даліnp.mean(ліс.estimators_[i].predict(X_тест) == ліс.estimators_[j].predict(X_тест)). - Якщо крива від
n_estimatorsвиглядає рвано — це не баг, це шум одного запуску. Усередни по трьох-чотирьох лісах із різнимиrandom_state. permutation_importanceповертає обʼєкт із полямиimportances_meanіimportances_std. Якщоmeanменший заstd, ознака нічим не відрізняється від шуму — це зручний поріг.- Не порівнюй MDI з PI за абсолютною величиною: перша нормована на суму 1, друга вимірюється в пунктах точності. Порівнювати треба порядок ознак.