River состоит из Creme и Scikit-Multiflow и предназначен для работы с данными, которые непрерывно генерируемый. В этом блоге демонстрируется пошаговая процедура использования River на примере набора данных, начиная с его установки. Основы River были подробно рассмотрены в моем предыдущем блоге. Если вы этого не читали, рекомендуется сначала прочитать это, прежде чем подписываться на этот блог, для лучшего понимания.
Установка river аналогична установке других пакетов python. Вы можете использовать pip для его установки в вашей среде.
pip install river
Давайте рассмотрим пример построения простой модели классификации текста с использованием River. Цель состоит в том, чтобы классифицировать данный текст как программный или аппаратный. Для этой цели мы будем использовать BagOfWords() в качестве преобразователя для преобразования текста в объекты и Naive Bayes MultinomialNB для моделирования данных. Итак, сначала мы импортируем необходимые пакеты.
из river.naive_bayes импортируем MultinomialNB из river.feature_extraction импортируем BagOfWords,TFIDF из river.compose импортируем конвейер из river.metrics импортируем ClassificationReport, Accuracy
Давайте создадим конвейер машинного обучения, а также измерим производительность модели на основе ее точности. Мы можем взять примерный набор данных об эмоциях, который представляет собой просто список кортежей, состоящих из текста и связанной с ним метки. Цель состоит в том, чтобы классифицировать текст по одной из эмоций: счастливой или грустной. Данные также могут быть получены из потокового источника. То же самое можно сделать, прочитав данные из csv-файла, но в этом случае требуется преобразовать фрейм данных в словарь, используя обычный пакет Pandas.
импортировать pandas как pd df = pd.read_csv(«emotion_dataset.csv») # Преобразовать в формат df.to_dict(записи) # Преобразовать в кортеж df.to_records(индекс=False)
Вот набор данных об эмоциях, который мы можем использовать для выполнения следующих шагов:
данные = [(«Мои мечты сбылись», «счастлив»), («Он счастлив, как свинья в грязи», «счастлив»), («Разбил мне сердце», «грустно»), («Он прыгал от радости», «счастлив»), («Расстроен из-за чего-то», «грустно»), («Вам грустно», «грустно»), («Друзья, вы сделали мой день», «счастливый»), («Он ушел с тяжелым сердцем», «грустный»), («Я так счастлива, я на седьмом небе от счастья», «счастливый»), («Он в грустном настроении», «грустный»), («Ты на вершине мира», «счастлив»), («Почему ты проливаешь слезы», «грустный»), («Она на седьмом небе от счастья», «счастливый»), («У нее плохая погода», «грустный»)]
Теперь мы создадим конвейер с двумя этапами: этапом преобразования и этапом оценки. Как только конвейер будет построен, мы сможем визуализировать его с помощью функции рисования.
pipe_nb = Конвейер((‘vectorizer’,BagOfWords(нижний регистр=True)), (‘nb’,MultinomialNB())) pipe_nb.шаги
По мере получения данных во время выполнения мы будем подгонять модель к данным по одному за раз. Для этой цели мы будем использовать функцию.learn_one(x,y) во время обучения. Мы можем смоделировать это, выполнив итерацию по нашим данным с использованием цикла for.
для текста, метки в данных: pipe_nb = pipe_nb.learn_one(текст,метка)
Чтобы протестировать модель на выборке входных данных, мы используем функцию predict_one(). Это вернет класс, к которому относится выборка входных данных. Если вы хотите узнать соответствующую вероятность, вы также можете использовать функцию predict_proba_one.
pipe_nb.predict_one(«Она танцует от радости») pipe_nb.predict_proba_one(«Она танцует от радости»)
Один раз когда модель обучена, мы оценим производительность модели, используя функции из подмодуля river.metrics, такие как точность, отчет о классификации и т.д.
metric_accuracy = Точность() для x,y в данных: y_predict_before = pipe_nb.predict_one(x) # Проверка точности metric_accuracy = metric_accuracy.update(y,y_predict_before) pipe_nb = pipe_nb.fit_one(x,y) print(«Конечная точность»,metric_accuracy)
Рассмотрим следующие примеры данных, которые мы будем использовать, чтобы проверить, насколько хорошо наша модель соответствует данным.
sample_data = [«Ты делаешь меня счастливым», «Мой друг расплылся в улыбке, увидев меня», «Он выплакал все глаза», “Ты в отчаянии”] y_actual = [«счастливый», «довольный», «грустный», «печальный»] <давайте пройдемся по выборке данных, чтобы предсказать ее результат.
y_predict = [] для i в sample_data: результат = pipe_nb.predict_one(i) напечатать(«{}: Предсказание: {}».format(я, результат)) y_predict.append(результат)
Чтобы получить результат классификации в виде отчета о классификации, мы будем использовать приведенный выше пример тестового набора данных.
отчет = ClassificationReport() для y_act, y_pred в zip(y_actual, y_predict): отчет = report.update(y_act, y_pred) отчет
Это действительно интересно и к тому же очень быстро. Разве это не так? Мне понравилось изучать его функциональные возможности. Надеюсь, вам это тоже понравится.