Spam-Mail-Vorhersage mit Python, maschinellem Lernen; | von Abbas Ali | Juli 2023

0
25


Der beste Weg zu lernen ist, indem man es tut

Foto von Kelly Sikkema An Unsplash

In diesem Weblog werde ich Ihnen ein Anfängerprojekt vorstellen, das ich durchgeführt habe: Spam-Mail-Vorhersage. Wenn Sie gerade erst mit Knowledge Science oder maschinellem Lernen beginnen, wird Ihnen die Durchführung von Projekten wie diesem wirklich dabei helfen, verschiedene ML-Konzepte zu verstehen.

Sie können Ihr Google Colaboratory öffnen und beim Lesen dieses Blogs mitverfolgen.

Sie können den Datensatz und den Code von mir erhalten GitHub.

Ziel des Projekts ist es herauszufinden, ob es sich bei einer Nachricht um SPAM ODER HAM handelt.

Beginnen wir zunächst mit dem Importieren der Pandas-Bibliothek und dem Laden des Datensatzes.

import pandas as pd

df = pd.read_csv('/content material/mail_data.csv')

df.head()

Der df.head() zeigt die folgende Ausgabe.

 Class  Message
0 ham Go till jurong level, loopy.. Accessible solely ...
1 ham Okay lar... Joking wif u oni...
2 spam Free entry in 2 a wkly comp to win FA Cup fina...
3 ham U dun say so early hor... U c already then say...
4 ham Nah I do not assume he goes to usf, he lives aro...

Überprüfen wir mithilfe von, ob der Datensatz Nullwerte enthält ist Null() Methode.

df.isnull().sum()

Der obige Code zeigt die folgende Ausgabe an

Class    0
Message 0
dtype: int64

Somit wissen wir jetzt, dass unser Datensatz keinen Nullwert hat.

Um fortzufahren, müssen wir zunächst die kategoriale Variable in einen numerischen Wert kodieren. Sie können dem Datensatz entnehmen, dass es eine Spalte mit dem Namen „Kategorie“ gibt, die die Werte „Spam“ und „Ham“ enthält. Wenn Sie diese Spalte kodieren, erhalten wir:

Spam – 1

Schinken – 0

Durch die Kodierung werden wir konvertieren Spam an 1 Und Schinken auf 0.

Dazu importieren wir das LabelEncoder-Modul aus der Sklearn-Bibliothek.

from sklearn.preprocessing import LabelEncoder

label_encoder = LabelEncoder()

knowledge = df.copy()

knowledge['Category'] = label_encoder.fit_transform(knowledge['Category'])

Aus dem obigen Code können Sie ersehen, dass wir eine Instanz für LabelEncoder() und eine neue Variable namens Knowledge erstellt haben, um den Datensatz zu speichern.

Und wir konvertieren die Werte „Spam“ und „Ham“ in der Spalte „Kategorie“ in 1 bzw. 0.

Wenn wir die ersten 5 Zeilen des in der Variablen „knowledge“ gespeicherten Datensatzes drucken, erhalten wir:

knowledge.head()

# Output Beneath

Class Message
0 0 Go till jurong level, loopy.. Accessible solely ...
1 0 Okay lar... Joking wif u oni...
2 1 Free entry in 2 a wkly comp to win FA Cup fina...
3 0 U dun say so early hor... U c already then say...
4 0 Nah I do not assume he goes to usf, he lives aro...

Jetzt können Sie sehen, dass der Wert der Spalte „Kategorie“ numerisch ist.

Jetzt können wir unseren Datensatz aufteilen. Lassen Sie uns vor der Aufteilung wissen, wie viele Zeilen unser Datensatz hat.

knowledge.form

# Ouput
(5572, 2)

Durch die Nutzung knowledge.form Sie können die Dimension des Datensatzes kennen. Somit wissen wir jetzt, dass unser Datensatz, wie wir bereits wissen, 5572 Zeilen und 2 Spalten hat.

Teilen wir den Datensatz in Options und Labels auf. Options sind die Spalten, mit denen wir unser Modell trainieren, und Beschriftungen sind die Spalten, die das Modell vorhersagen muss.

In unserem Datensatz ist die Spalte „Nachricht“ das Characteristic und die Spalte „Kategorie“ die Bezeichnung. Fügen Sie das Characteristic in die Variable „X“ und die Beschriftungen in die Variable „y“ ein.


X = knowledge['Message']
y = knowledge['Category']

Teilen wir nun den Datensatz in Prepare und Take a look at auf. Dazu müssen wir ein Modul namens „train_test_split“ aus der sklearn-Bibliothek importieren.

from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=89)

Jetzt haben wir die Options in X_train und X_test und Labels in y_train und y_test aufgeteilt. Wir verwenden X_train und y_train, um das Modell zu trainieren, und wir verwenden X_test, um die Genauigkeit des Modells vorherzusagen, indem wir es mit y_test vergleichen.

Der test_size=0,2 Das bedeutet, dass wir den Datensatz zu 80 % für das Coaching und zu 20 % für Exams aufteilen.

Lassen Sie uns die Type von X_train und X_test kennen.

X_train.form, X_test.form

# Output
((4457,), (1115,))

Jetzt müssen wir eine Characteristic-Extraktion durchführen. Sie können sehen, dass die Spalte „Nachricht“ in X_train und X_test im Textformat vorliegt. Wir müssen den Textual content in eine Vektorform umwandeln, damit ein maschinelles Lernmodell ihn verstehen kann.

Daher werden wir ein Modul namens CountVectorizer aus der Sklearn-Bibliothek verwenden.

from sklearn.feature_extraction.textual content import CountVectorizer

vectorizer = CountVectorizer()

train_features = vectorizer.fit_transform(X_train)
test_features = vectorizer.rework(X_test)

Aus dem obigen Code sehen Sie, dass wir zuerst das Modul importiert und dann eine Instanz namens „vectorizer“ erstellt haben und zwei Variablen erstellt haben, eine für den Zugsatz und eine andere für den Testsatz mit den Namen train_features bzw. test_features.

Dann passen und transformieren wir den X_train mithilfe der Instanz (Vectorizer) von CountVectorizer und transformieren dann einfach den

Jetzt ist es an der Zeit, ein Modell zu bauen. Wir werden ein logistisches Regressionsmodell erstellen.


from sklearn.linear_model import LogisticRegression

mannequin = LogisticRegression()

mannequin.match(train_features, y_train)

Jetzt haben wir das LogisticRegression-Modell aus der Sklearn-Bibliothek importiert, eine Instanz des Modells erstellt und die Trainingsdaten angepasst.

Es ist Zeit, die Genauigkeit des Modells vorherzusagen und zu bewerten.


pred = mannequin.predict(test_features)

from sklearn.metrics import accuracy_score

accuracy = accuracy_score(pred, y_test)

print(accuracy)

# My Output:
0.9811659192825112

Um den Genauigkeitswert eines Modells zu ermitteln, müssen wir ein Modul namens „accuracy_score“ importieren.

Sie können sehen, dass das von uns erstellte Modell zu 98 % genau ist. Es ist eine tolle Punktzahl.

Testen wir nun, ob unser Modell feststellen kann, dass eine „Nachricht“ „Ham“ oder „Spam“ ist.

enter = ['Ok lar... Joking wif u oni...']

mes = vectorizer.rework(enter)
pred = mannequin.predict(mes)

if pred == [0]:
print('HAM')
else:
print('SPAM!')

# My Output:
HAM

Sie können sehen, dass das Modell sagt, dass die „Nachricht“ – „Okay Lars… Scherz mit dir, Oni…“ ein HAM ist. Und es ist richtig, dass es eine HAM-Nachricht ist.

Somit kann unser Modell erkennen, ob es sich bei einer Nachricht um HAM oder SPAM handelt.

Dies ist ein sehr einfaches Projekt, das Sie erstellen können, wenn Sie gerade erst anfangen. Ich werde morgen ein weiteres Projekt wie dieses lernen und erstellen und es in Medium schreiben.

Tschüss… Bis dann…



Source link

HINTERLASSEN SIE EINE ANTWORT

Please enter your comment!
Please enter your name here