Введение
Электронные письма со спамом и SMS-сообщения — это печальная реальность современной жизни. Они не только раздражают, но и могут быть опасны, если содержат вредоносные ссылки или вложения. К счастью, алгоритмы машинного обучения могут помочь нам идентифицировать и отфильтровать эти нежелательные сообщения. В этой статье мы рассмотрим, как создать простую модель классификации спама с помощью Python.
Набор данных
Прежде чем мы углубимся в код, давайте взглянем на набор данных, который мы будем использовать. Данные состоят из SMS-сообщений, помеченных как «спам» или «ветчина» (т. е. не спам). Мы будем использовать эти данные для обучения модели машинного обучения, чтобы предсказать, является ли новое сообщение спамом или ветчиной.
Код
Во-первых, давайте импортируем необходимые библиотеки:
javascriptCopy codeimport numpy as np import pandas as pd from sklearn.model_selection import train_test_split from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.linear_model import LogisticRegression from sklearn.metrics import accuracy_score
Далее мы загрузим данные из файла CSV в DataFrame pandas:
raw_mail_data = pd.read_csv('/content/mail_data.csv')
Файл mail_data.csv
должен находиться в том же каталоге, что и ваш скрипт Python. Если нет, вам нужно обновить путь к файлу.
Мы преобразуем столбец label из строк в целые числа, где 0 означает «спам», а 1 — «ветчина»:
mail_data = raw_mail_data.copy() mail_data.loc[mail_data['Category'] == 'spam', 'Category',] = 0 mail_data.loc[mail_data['Category'] == 'ham', 'Category',] = 1
Далее мы разделим данные на текст (X) и метку (Y):
X = mail_data['Message'] Y = mail_data['Category']
Мы разделим данные на обучающий набор и тестовый набор:
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.2, random_state=3)
Мы преобразуем текстовые данные в векторы признаков, которые можно использовать в качестве входных данных для модели машинного обучения:
feature_extraction = TfidfVectorizer(min_df=1, stop_words='english', lowercase=True) X_train_features = feature_extraction.fit_transform(X_train) X_test_features = feature_extraction.transform(X_test)
Мы преобразуем значения Y_train и Y_test в целые числа:
Y_train = Y_train.astype('int') Y_test = Y_test.astype('int')
Теперь мы готовы обучить нашу модель машинного обучения. Мы будем использовать логистическую регрессию для этой задачи:
model = LogisticRegression() model.fit(X_train_features, Y_train)
Оценим точность модели на обучающей выборке:
train_predictions = model.predict(X_train_features) train_accuracy = accuracy_score(Y_train, train_predictions) print('Accuracy on training data: ', train_accuracy)
И оценим точность модели на тестовом наборе:
test_predictions = model.predict(X_test_features) test_accuracy = accuracy_score(Y_test, test_predictions) print('Accuracy on test data: ', test_accuracy)
Наконец, мы сделаем прогноз для нового входного сообщения:
input_mail = ["I've been searching for the right words to thank you for this breather. I promise I won't take your help for granted and will fulfil my promise"]