Найти в Дзене
LabelMe

Классификация вредоносных веб-страниц с помощью машинного обучения

Оглавление

Машинное обучение и нейронные сети - нереально универсальные инструменты. Чем больше погружаешься в их изучение и работу с ними, тем лучше понимаешь, что с ними можно решить практически любую задачу.

Например, находить и классифицировать вредоносные сайты. Казалось бы, есть множество других способов. Но преимущество ИИ в этом плане заключается в постоянном развитии и улучшении.

Давайте вместе разберемся, как классифицировать вредоносные веб-страниц с помощью машинного обучения.

Загрузка библиотек

Этот фрагмент кода импортирует библиотеки и функции необходимые для предварительной обработки нашего набора данных. Вкратце пробежимся по всем и поясним, зачем они нам нужны:

Pandas - требуется для загрузки набора данных из его каталога и предварительной обработки и разделения тестовых данных, обучающих данных и тестовых меток.

Matplotlib - нужен для визуализации, чтобы понимать интересные тенденции, лежащие в основе данных, и обрабатывать их соответствующим образом.

Regular expression - позволит нам отфильтровать стоп-слова, символы, "www" и так далее.

Train_test_split - мы импортируем это для разделения наших данных на правильную пропорцию тестовых и обучающих данных. Рекомендуемая доля тестовых и обучающих данных - 20% и 80% соответственно.

TFIDFVectorizer - это сокращение от Term Frequency Inverse Document Frequency. Это очень распространенный алгоритм преобразования текста в осмысленное представление чисел, которое используется для подгонки машинного алгоритма прогнозирования.

CountVectorizer - используется для преобразования коллекции текстовых документов в вектор счетчиков терминов/токенов. Он также позволяет предварительно обрабатывать текстовые данные перед генерацией векторного представления.

LogisticRegression, MultinomialNB - предварительно обученные библиотеки машинного обучения, которые будут использоваться для прогнозирования вредоносности страниц.

Confusion Matrix, Classification report - с их помощью мы поймем производительность нашего алгоритма машинного обучения над набором данных и необходимые поправки для повышения производительности.

Загрузка набора данных и разделение на test и train

разделение набора данных
разделение набора данных

Этот фрагмент кода загружает набор данных из каталога. Затем мы назначаем определенные URL-адреса в качестве тестовых данных, чтобы оценить, насколько хорошо выполняется предварительная обработка.

В следующей строке мы импортируем train_test_split из библиотеки Sklearn, чтобы разделить набор данных на 80% (train) и 20% (test). Присваиваем переменную ‘labels’ столбцу ‘class’ данных обучения, а ‘test_labels’ - столбцу класса тестовых данных.

-3

Далее мы задаем количество образцов данных train и test в консоли следующим образом:

-4

Визуализация данных и фильтрация стоп-слов

Переходим к визуализации "хороших" и "плохих" URL-адресов в данных обучения и тестовых данных. Мы используем функции pandas для всех данных.

Процесс подсчета переносится на pd.value_counts. Используя '.plot', мы отображаем количество "хороших" и "плохих" URL-адресов в виде гистограммы. Далее задаем параметры: размер шрифта, вращение, чтобы придать заголовку гистограммы определенный размер, мы указываем, что график должен быть в форме гистограммы. Для этого можно использовать параметр «kind = bar».

То же самое мы делаем и для тестовых данных. Смотрим на результат.

-5
-6

Определяем функцию для выполнения необходимой предварительной обработки текста, присутствующего в URL.

Tokens = re.split ('[/ -]', url)

Эта строка кода разбивает URL-адрес всякий раз, когда встречается «/» или «-». Далее идет цикл, который перебирает все URL-адреса в данных

if i.find(“.”) >= 0: dot_split = i.split(‘.’)

Эта строка кода проверяет наличие точек в URL-адресе, если она обнаружена, в этот момент она разбивает URL-адрес на 2 части, а именно на домен и расширение.

if “com” in dot_split:
dot_split.remove(“com”)

if “www” in dot_split:
dot_split.remove(“www”)

Этот фрагмент кода удаляет расширения, такие как «www» и «com» ​​в предварительно обработанных URL-адресах. Так мы получим только основной домен и путь к страницам.

Токенизация данных

-7

Токенизация - это процесс удаления стоп-слов из текстовых данных и подгонки их для прогнозного моделирования. Мы используем CountVectorizer для преобразования коллекции текстовых документов в вектор количества токенов. А TFIDF как векторизатор, который преобразует текстовые данные в числа, понятные для модели машинного обучения.

Мы выполняем оба метода векторизации в train и test данных. Более поздние результаты, который мы получаем, относятся к большому диапазону значений, представляющих каждый текст в данных. Наша модель машинного обучения не может запоминать такие большие значения. Поэтому мы применяем fit_transform () и transform () для масштабирования параметров данных в определенном диапазоне и для изучения среднего значения и дисперсии входных функций наборов данных.

Метод подгонки (fit) вычисляет среднее значение и дисперсию, использую средние показатели преобразования всех функций в наших данных. Используя метод transform, мы можем использовать то же среднее значение и дисперсию для преобразования наших тестовых данных.

-8

Получение отчета

Чтобы сгенерировать отчет о производительности алгоритма, мы используем функцию, генерирующую тепловую карту для получения матрицы путаницы. Она покажет нам отзывы и точность, даст показания о том, сколько ложноотрицательных, ложноположительных, истинно отрицательных и истинных положительных результатов. также. В заголовке мы напечатали оценку точности нашей модели, как показано ниже.

-9
определение объекта для модели ML
определение объекта для модели ML

У нас есть данные, готовые для загрузки в модель машинного обучения. Мы используем Multinomial Naive Bayes и логистическую регрессию в качестве наших моделей для прогнозирования вредоносности URL-адреса.

Мы определяем MNB и вписываем его в векторизованные URL-адреса в качестве наших входных данных и метки в качестве прогнозируемого выхода. Затем мы генерируем оценку, которая говорит о точности нашей модели, и прогнозируем, являются ли URL-адреса вредоносными или нет.

После вызываем функцию «classification_report» и генерируем соответствующий отчет. То же самое мы делаем и для логистической регрессии.

-11

Баланс между отзывом и точностью

В таких случаях, как обнаружение мошенничества с кредитными картами, ошибки классификации недопустимы. Пропустили хоть один сайт - минус шекели. Следовательно, нам нужно найти правильный баланс между отзывом и точностью.

Для этого нам нужен высокий показатель отзыва, поскольку он говорит нам о том, насколько точно наша модель предсказала и классифицировала истинные положительные результаты из фактических положительных результатов в наборе данных. С помощью F1 Score мы можем добиться баланса между точностью и отзывчивостью.

Другие наши статьи:

-12