Я хочу знать шаги ML, чтобы следовать, чтобы достигнуть Генетически-байесовского фильтра SMS-спама - PullRequest
0 голосов
/ 07 ноября 2019

Мне дали школьное задание для работы с Генетически-байесовским фильтром спама SMS , я пытаюсь построить алгоритм ML Генетически-байесовским фильтром спама SMS , в данном случае,я собираюсь использовать Genetic для выбора функций, а затем обучать его с байесовским, но моя проблема в том, что я пытаюсь узнать шаги, которые я собираюсь предпринять, чтобы сделать это правильно. PS: я хочу знать, является ли лучший способ выполнения следующих шагов.

Что я ожидаю в качестве конечного результата (если обученные функции извлечены с помощью Байеса) Ожидаю 90% точности классификации

Сначала я загружаю в набор данных и импортирую все необходимые модули.

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

import nltk
from nltk.corpus import stopwords
from nltk.stem import PorterStemmer
import re
from nltk.tokenize import word_tokenize

from sklearn.model_selection import train_test_split

from tpot import TPOTClassifier
from tpot import TPOTRegressor

#to ignore warnings when running
import warnings
warnings.filterwarnings('ignore')

from sklearn.feature_extraction.text import CountVectorizer, HashingVectorizer


dfData = pd.read_csv('datasets/disambiguate_spam_sms.csv', encoding="latin-1")
print(dfData.shape)
dfData.head()

После первого шага я группирую их по категориям SMS, с которыми я работаю, из которых вв данном случае это (спам / ветчина)

#to show a chart of a particular category in the dataset

dfData.groupby('label').message.count().plot.bar(ylim=0)
plt.show()
print(4825/747) #Baseline accuracy

Затем я удалил нулевое значение

# remove null value from the dataset

dfDrop = dfData.dropna(subset=['label', 'message'])
dfDrop.head()

Затем я перетасовал свой набор данных

# randomly shuffle the data before starting, to avoid any type of ordering in the data

dfShuffle = dfDrop.iloc[np.random.permutation(len(dfDrop))]
dfSort = dfShuffle.reset_index(drop=True)
dfSort.head()

Я предварительно обработал набор данных

#  Pre-processing the Raw Text and Getting It Ready for Machine Learning

stemmer = PorterStemmer()
words = stopwords.words("english")

dfSort['processedtext'] = dfSort['message'].apply(lambda x: " ".join([stemmer.stem(i) for i in re.sub("[^a-zA-Z]", " ", x).split() 
                                                                      if i not in words]).lower())
print(dfSort.shape)

Итак, после всего этого я нахожусь на этапе, когда я действительно не знаю, каким будет следующий этап.

...