В этой статье мы рассмотрим создание сквозного конвейера машинного обучения (МО) для обнаружения вредоносных программ. Мы будем использовать набор данных о вредоносных программах, который включает в себя как вредоносные, так и безвредные образцы. Мы разделим данные на обучающий и тестовый наборы и создадим модель МО для классификации образцов как вредоносных или безвредных. Затем мы развернем модель и предоставим API для запросов классификации.
Мы будем использовать набор данных Malicious Software Collection с Kaggle. Этот набор данных содержит более 40000 образцов как вредоносных, так и безвредных программ.
Перед тем, как мы сможем создать модель МО, нам необходимо обработать данные. Мы начнем с разделения данных на обучающий и тестовый наборы. Для этого мы используем функцию train_test_split()
, предоставленную библиотекой scikit-learn
.
from sklearn.model_selection import train_test_split
# Разделить данные на обучающий и тестовый наборы
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25)
Далее мы преобразуем данные в формат, который может быть принят моделью МО. Мы будем использовать библиотеку scikit-learn
для создания функции, которая будет извлекать признаки из образцов вредоносных программ.
from sklearn.feature_extraction.text import TfidfVectorizer
# Создать функцию извлечения признаков
vectorizer = TfidfVectorizer()
# Извлечь признаки из обучающих данных
X_train = vectorizer.fit_transform(X_train)
# Извлечь признаки из тестовых данных
X_test = vectorizer.transform(X_test)
Теперь мы можем создать модель МО. Мы будем использовать классификатор LogisticRegression
из библиотеки scikit-learn
.
from sklearn.linear_model import LogisticRegression
# Создать модель МО
model = LogisticRegression()
# Обучить модель на обучающих данных
model.fit(X_train, y_train)
После того, как модель обучена, мы можем оценить ее производительность на тестовом наборе. Для этого мы используем функцию accuracy_score()
, предоставленную библиотекой scikit-learn
.
from sklearn.metrics import accuracy_score
# Оценить модель на тестовых данных
score = accuracy_score(y_test, model.predict(X_test))
print("Точность:", score)
Наконец, мы можем развернуть модель и сделать ее доступной для запросов классификации. Мы будем использовать фреймворк Flask
для создания REST API, который будет принимать образцы вредоносных программ в качестве входных данных и возвращать предсказания модели в качестве выходных данных.
from flask import Flask, request, jsonify
# Создать приложение Flask
app = Flask(__name__)
# Определить конечную точку для запросов классификации
@app.route('/classify', methods=['POST'])
def classify():
# Извлечь образец вредоносной программы из запроса
sample = request.json['sample']
# Преобразовать образец в формат, который может быть принят моделью
sample = vectorizer.transform([sample])
# Классифицировать образец с помощью модели
prediction = model.predict(sample)
# Вернуть предсказание
return jsonify({'prediction': prediction})
# Запустить приложение
if __name__ == '__main__':
app.run()