Email Spam Detection
हम क्या बना रहे हैं
Spam detector एक machine learning program है जो message पढ़कर तय करता है वो spam है या नहीं। यह पहले से spam या safe labelled example messages से सीखता है। यह classic supervised classification project है, scikit-learn library से आसानी से बना।
Spam detection कैसे काम करता है
Spam messages कुछ शब्द ज़्यादा इस्तेमाल करते हैं ("free", "win", "offer")। Model कई labelled examples देखता है, सीखता है कौन-से शब्द spam की ओर इशारा करते हैं, और उससे नए messages आँकता है। चूँकि यह labelled data से सीखता है, यह supervised learning है — ख़ासकर, दो classes में classification: spam या not spam।
Data
messages = [
"Win a free prize now", # spam
"Meeting at 5 pm today", # not spam
"Claim your free reward", # spam
"Lunch tomorrow?" # not spam
]
labels = [1, 0, 1, 0] # 1 = spam, 0 = not spam
हमें messages और उनके labels चाहिए। यहाँ 1 यानी spam और 0 यानी not spam। असली projects हज़ारों examples इस्तेमाल करते हैं, पर विचार वही है।
Text को numbers में बदलना
from sklearn.feature_extraction.text import CountVectorizer
vec = CountVectorizer()
X = vec.fit_transform(messages) # word counts numbers के रूप में
Models शब्द नहीं पढ़ सकते, तो CountVectorizer हर message को word counts की एक row में बदलता है। अब हर message numbers की list है जिससे model सीख सकता है।
Model train करना
from sklearn.naive_bayes import MultinomialNB
model = MultinomialNB()
model.fit(X, labels) # examples से सीखो
MultinomialNB (Naive Bayes) text के लिए तेज़, भरोसेमंद model है। fit() इसे हमारे numbers और labels पर train करता है, तो यह सीखता है कौन-से शब्द spam का संकेत हैं।
Predictions करना
new = ["Free reward waiting for you"]
new_X = vec.transform(new) # वही vectorizer
print(model.predict(new_X)) # [1] = spam
हम नए message को उसी vectorizer से transform करते हैं, फिर predict call करते हैं। 1 का result मतलब model को लगता है यह spam है। यह चलता हुआ spam detector है।
आम गलतियाँ
- नए data के लिए अलग vectorizer इस्तेमाल करना। उसी fitted vectorizer के साथ
transformइस्तेमाल कीजिए, नया नहीं। - बहुत कम data। कुछ examples अच्छा नहीं सीख सकते — असली models कई messages इस्तेमाल करते हैं।
- Train और test न बाँटना। खुद को धोखा देने से बचने को अनदेखे data पर accuracy जाँचिए।
- Text clean करना भूलना। Lowercasing और punctuation हटाना आमतौर पर results सुधारता है।
सारांश
- Spam detection supervised classification है: spam या not spam।
- Text को
CountVectorizer(या TF-IDF) से numbers में बदलिए। MultinomialNBmodel कोfit()से train कीजिए।- नए messages को उसी vectorizer और
predict()से predict कीजिए। - भरोसेमंद model को ढेर data और train/test split इस्तेमाल कीजिए।
आगे, ML type समझिए supervised learning में, या model quality जाँचिए overfitting और underfitting से।
अक्सर पूछे जाने वाले प्रश्न (FAQ)
Machine learning spam कैसे पहचानता है?
हम text को numbers में क्यों बदलते हैं?
Spam detection के लिए कौन-सा algorithm अच्छा है?
Python में कौन-सी library इस्तेमाल करूँ?
scikit-learn (sklearn) vectorizer, model, और train/test tools सब एक साथ देता है। इसे pip install scikit-learn से install कीजिए।