Конструирование признаков на сгруппированных данных
Теперь вы расширите предыдущее упражнение, добавив ещё один признак: количество уникальных протоколов, используемых каждым компьютером-источником. Обратите внимание: при работе со сгруппированными данными признаки всегда можно строить именно таким образом — в качестве отправной точки можно взять количество уникальных значений всех категориальных столбцов и среднее значение всех числовых столбцов. Как и прежде, в вашем распоряжении есть flows, функция cross_val_score() для оценки точности, AdaBoostClassifier(), pandas как pd и numpy как np.
Это упражнение является частью курса
Проектирование рабочих процессов машинного обучения на Python
Инструкции к упражнению
- Примените функцию
lambdaк итератору групп, чтобы вычислить количество уникальных протоколов, используемых каждым компьютером-источником. Для получения множества уникальных значений из столбцаprotocolиспользуйтеset(). - Преобразуйте результат в датафрейм нужной формы, указав индекс и назвав столбец
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)))