Інженерія ознак на згрупованих даних
Тепер ви розвинете попередню вправу, додавши ще одну ознаку: кількість унікальних протоколів, які використовує кожен вихідний комп'ютер. Зауважте, що для згрупованих даних завжди можна конструювати ознаки в такий спосіб: взяти кількість унікальних елементів усіх категоріальних стовпців і середні значення всіх числових стовпців як відправну точку. Як і раніше, у вас попередньо завантажено flows, є cross_val_score() для вимірювання точності, AdaBoostClassifier(), а також pandas як pd і numpy як np.
Ця вправа є частиною курсу
Проєктування робочих процесів машинного навчання в Python
Інструкції до вправи
- Застосуйте функцію
lambdaдо наданого ітератора груп, щоб обчислити кількість унікальних протоколів для кожного вихідного комп'ютера. Ви можете використатиset(), щоб звести стовпецьprotocolдо множини унікальних значень. - Перетворіть результат на датафрейм з правильною формою, надавши індекс і назвавши стовпець
protocol. - Об'єднайте новий датафрейм зі старим, який доступний як
X. - Оцініть точність
AdaBoostClassifier()на цьому новому наборі даних за допомогоюcross_val_score().
Інтерактивна практична вправа
Спробуйте виконати цю вправу, доповнивши цей зразок коду.
# Create a feature counting unique protocols per source
protocols = flows.groupby('source_computer').apply(
lambda df: ____)
# Convert this feature into a dataframe, naming the column
protocols_DF = pd.DataFrame(
protocols, index=____, columns=____)
# Now concatenate this feature with the previous dataset, X
X_more = pd.concat([X, ____], axis=____)
# Refit the classifier and report its accuracy
print(____(____(
AdaBoostClassifier(), ____, y)))