Solusi software AI kustom untuk bisnis Anda. Lihat Layanan →

Kirim AI

7 Langkah Klasifikasi Teks Naive Bayes Python Scikit-learn

Ingin belajar klasifikasi teks dengan Python? Tutorial ini memandu Anda langkah demi langkah menggunakan Naive Bayes dan Scikit-learn. Mulai dari preprocessing teks, implementasi CountVectorizer/TF-IDF, hingga evaluasi model klasifikasi teks. Cocok untuk pemula machine learning yang ingin memahami cara kerja Naive Bayes teks.

0
4
7 Langkah Klasifikasi Teks Naive Bayes Python Scikit-learn

Klasifikasi teks merupakan salah satu tugas fundamental dalam Natural Language Processing (NLP) yang bertujuan untuk mengkategorikan dokumen teks ke dalam kelas-kelas yang telah ditentukan sebelumnya. Aplikasinya sangat luas, mulai dari deteksi email spam, analisis sentimen ulasan produk, hingga pengkategorian artikel berita secara otomatis. Salah satu algoritma yang populer dan efektif untuk tugas ini, terutama sebagai baseline yang kuat, adalah Naive Bayes. Algoritma ini dikenal karena kesederhanaannya, kecepatan komputasi, dan performa yang baik pada data berdimensi tinggi seperti data teks. Dalam tutorial ini, kita akan mempelajari langkah demi langkah cara membangun model klasifikasi teks sederhana untuk deteksi spam menggunakan algoritma Naive Bayes dengan bantuan library machine learning populer di Python, yaitu Scikit-learn.

Memahami Konsep Dasar: Klasifikasi Teks, Naive Bayes, dan Scikit-learn

Klasifikasi teks adalah proses menetapkan label atau kategori ke unit teks (seperti kalimat, paragraf, atau dokumen) berdasarkan isinya. Tujuannya adalah melatih model yang dapat secara otomatis mengklasifikasikan teks baru ke dalam kategori yang relevan.

Contoh penggunaan klasifikasi teks meliputi:

  • Deteksi Spam: Mengidentifikasi email atau pesan yang tidak diinginkan (spam) dari yang sah (ham).
  • Analisis Sentimen: Menentukan polaritas emosional (positif, negatif, netral) dari ulasan pelanggan, posting media sosial, atau teks lainnya.
  • Kategorisasi Topik: Mengelompokkan artikel berita, posting blog, atau dokumen berdasarkan topik utamanya (misalnya, olahraga, politik, teknologi).
  • Deteksi Bahasa: Mengidentifikasi bahasa yang digunakan dalam sebuah teks.

Algoritma Naive Bayes adalah keluarga algoritma klasifikasi probabilistik sederhana yang didasarkan pada Teorema Bayes dengan asumsi independensi (naive) yang kuat di antara fitur-fitur. Meskipun asumsi ini seringkali tidak sepenuhnya benar dalam dunia nyata, Naive Bayes seringkali bekerja dengan sangat baik dalam praktik, terutama untuk klasifikasi teks. Keunggulannya meliputi:

  • Kecepatan: Pelatihan dan prediksi sangat cepat.
  • Kesederhanaan: Mudah diimplementasikan dan dipahami.
  • Performa Baik pada Data Dimensi Tinggi: Efektif bahkan ketika jumlah fitur (misalnya, kata unik dalam kosakata) sangat besar.
  • Membutuhkan Data Latih Relatif Sedikit: Dapat memberikan hasil yang layak bahkan dengan jumlah data pelatihan yang terbatas.

Scikit-learn (sklearn) adalah library machine learning open-source yang komprehensif untuk Python. Ini menyediakan implementasi yang efisien dari berbagai algoritma pembelajaran mesin, alat pra-pemrosesan data, metrik evaluasi, dan utilitas lainnya, menjadikannya pilihan populer bagi praktisi data science dan machine learning.

Langkah 1: Persiapan Lingkungan dan Dataset

Sebelum memulai, kita perlu mempersiapkan lingkungan kerja kita dengan menginstal library yang diperlukan dan mendapatkan dataset yang akan digunakan.

Instalasi Library yang Dibutuhkan

Kita akan membutuhkan scikit-learn untuk model machine learning, pandas untuk manipulasi data, dan nltk untuk beberapa tugas preprocessing teks. Buka terminal atau command prompt Anda dan jalankan perintah berikut:

pip install scikit-learn pandas nltk

Setelah instalasi NLTK, kita mungkin perlu mengunduh beberapa paket data NLTK, seperti tokenizers ('punkt') dan daftar stopwords ('stopwords'). Jalankan Python interpreter dan ketikkan:

import nltk
nltk.download('punkt')
nltk.download('stopwords')

Mengenal Dataset (Contoh Deteksi Spam SMS)

Untuk tutorial ini, kita akan menggunakan dataset "SMS Spam Collection" yang populer dari UCI Machine Learning Repository. Dataset ini berisi kumpulan pesan SMS yang telah diberi label sebagai 'spam' atau 'ham' (bukan spam).

Anda dapat mengunduh dataset ini dari UCI Machine Learning Repository. Dataset biasanya dalam format file teks (seringkali CSV atau TSV) dengan dua kolom: label ('ham'/'spam') dan isi pesan teks.

Jika Anda tidak ingin mengunduh dataset eksternal, Anda dapat menggunakan sampel data kecil berikut untuk mengikuti tutorial ini:

# Contoh data inline jika tidak mengunduh dataset
data_sample = {
    'label': ['ham', 'spam', 'ham', 'ham', 'spam', 'ham', 'spam', 'ham', 'spam', 'ham'],
    'message': [
        'Go until jurong point, crazy.. Available only in bugis n great world la e buffet... Cine there got amore wat...',
        'Free entry in 2 a wkly comp to win FA Cup final tkts 21st May 2005. Text FA to 87121 to receive entry question(std txt rate)T&C\'s apply 08452810075over18\'s',
        'U dun say so early hor... U c already then say...',
        'Nah I don\'t think he goes to usf, he lives around here though',
        'FreeMsg Hey there darling it\'s been 3 week\'s now and no word back! I\'d like some fun you up for it still? Tb ok! XxX std chgs to send, £1.50 to rcv',
        'Even my brother is not like to speak with me. They treat me like aids patent.',
        'WINNER!! As a valued network customer you have been selected to receivea £900 prize reward! To claim call 09061701461. Claim code KL341. Valid 12 hours only.',
        'I HAVE A DATE ON SUNDAY WITH WILL!!',
        'Had your mobile 11 months or more? U R entitled to Update to the latest colour mobiles with camera for Free! Call The Mobile Update Co FREE on 08002986030',
        'I‘m going to try for 2 months ha ha only joking'
    ]
}

Memuat Dataset ke dalam Pandas DataFrame

Kita akan menggunakan Pandas untuk memuat dan mengelola data kita. Jika Anda mengunduh file CSV/TSV, sesuaikan path file dan separator (sep). Jika menggunakan data sampel, kita buat DataFrame langsung.

import pandas as pd

# Opsi 1: Memuat dari file CSV (misalnya, 'SMSSpamCollection.tsv')
# Pastikan file ada di direktori yang sama atau berikan path lengkap
# Dataset ini seringkali menggunakan tab sebagai pemisah (tsv) dan tidak memiliki header
# Gunakan encoding='latin-1' karena dataset ini mungkin mengandung karakter non-UTF-8
try:
    # Ganti 'SMSSpamCollection.tsv' dengan path file Anda jika perlu
    df = pd.read_csv('SMSSpamCollection.tsv', sep='\t', header=None, names=['label', 'message'], encoding='latin-1')
    print("Dataset berhasil dimuat dari file.")
except FileNotFoundError:
    print("File dataset tidak ditemukan. Menggunakan data sampel inline.")
    # Opsi 2: Menggunakan data sampel inline
    df = pd.DataFrame(data_sample)

# Tampilkan beberapa baris pertama
print("Beberapa baris pertama data:")
print(df.head())

# Tampilkan informasi dasar tentang DataFrame
print("\nInformasi DataFrame:")
df.info()

# Periksa distribusi kelas (ham vs spam)
print("\nDistribusi Label:")
print(df['label'].value_counts())

Langkah 2: Preprocessing Teks untuk Model Klasifikasi

Data teks mentah tidak dapat langsung dimasukkan ke dalam algoritma machine learning. Kita perlu melakukan serangkaian langkah preprocessing teks python untuk membersihkan dan mengubah teks menjadi format numerik yang dapat dipahami oleh model.

Pembersihan Data Teks

Langkah ini melibatkan penghapusan elemen-elemen yang tidak relevan atau dapat mengganggu proses analisis, seperti tanda baca dan angka, serta mengubah teks menjadi huruf kecil.

import string
import re # Modul Regular Expression
from nltk.tokenize import word_tokenize
from nltk.corpus import stopwords

# Fungsi untuk membersihkan teks
def clean_text(text):
    # 1. Mengubah ke huruf kecil
    text = text.lower()
    # 2. Menghapus tanda baca
    text = ''.join([char for char in text if char not in string.punctuation])
    # 3. Menghapus angka (opsional, tergantung kasus penggunaan)
    text = re.sub(r'\d+', '', text)
    # 4. Menghapus spasi berlebih di awal/akhir dan spasi ganda
    text = text.strip()
    text = re.sub(r'\s+', ' ', text)
    return text

# Terapkan fungsi pembersihan ke kolom 'message'
df['cleaned_message'] = df['message'].apply(clean_text)

print("\nContoh Teks Sebelum dan Sesudah Pembersihan:")
print("Sebelum:", df['message'].iloc[1])
print("Sesudah:", df['cleaned_message'].iloc[1])

Tokenisasi Teks

Tokenisasi adalah proses memecah teks yang sudah dibersihkan menjadi unit-unit yang lebih kecil, biasanya kata-kata atau token.

# Terapkan tokenisasi menggunakan NLTK
df['tokens'] = df['cleaned_message'].apply(word_tokenize)

print("\nContoh Hasil Tokenisasi:")
print(df['tokens'].iloc[1])

Penghapusan Stopwords

Stopwords adalah kata-kata umum (seperti "di", "ke", "dari", "yang", "a", "the", "is") yang sering muncul tetapi biasanya tidak membawa banyak makna informatif untuk klasifikasi. Menghapusnya dapat mengurangi dimensi data dan memungkinkan model fokus pada kata-kata yang lebih penting.

Namun, perlu dicatat bahwa penghapusan stopwords tidak selalu meningkatkan performa dan dalam beberapa kasus (misalnya, analisis sentimen yang lebih halus), stopwords bisa jadi penting. Untuk deteksi spam, menghapus stopwords umumnya merupakan langkah yang bermanfaat.

# Dapatkan daftar stopwords bahasa Inggris dari NLTK
stop_words = set(stopwords.words('english'))

# Fungsi untuk menghapus stopwords
def remove_stopwords(tokens):
    return [word for word in tokens if word not in stop_words]

# Terapkan penghapusan stopwords
df['tokens_no_stop'] = df['tokens'].apply(remove_stopwords)

print("\nContoh Token Setelah Penghapusan Stopwords:")
print(df['tokens_no_stop'].iloc[1])

# Gabungkan kembali token menjadi string untuk Vectorizer
df['final_message'] = df['tokens_no_stop'].apply(lambda x: ' '.join(x))

print("\nContoh Pesan Final Siap untuk Vectorization:")
print(df['final_message'].iloc[1])

Langkah 3: Ekstraksi Fitur Teks (Vectorization)

Model machine learning memerlukan input numerik. Kita perlu mengubah teks yang sudah diproses menjadi vektor fitur. Dua metode umum adalah CountVectorizer (Bag-of-Words) dan TfidfVectorizer (TF-IDF).

Menggunakan CountVectorizer (Bag-of-Words)

CountVectorizer mengimplementasikan pendekatan Bag-of-Words (BoW). Ini mengubah koleksi dokumen teks menjadi matriks jumlah token (kata). Setiap kolom mewakili kata unik dalam seluruh dataset (kosakata), dan setiap baris mewakili dokumen. Nilai dalam sel (i, j) adalah frekuensi kemunculan kata j dalam dokumen i.

from sklearn.feature_extraction.text import CountVectorizer

# Inisialisasi CountVectorizer
count_vectorizer = CountVectorizer()

# Terapkan fit_transform pada data teks yang sudah diproses
# Ini membangun kosakata dan mengubah teks menjadi matriks hitungan
X_counts = count_vectorizer.fit_transform(df['final_message'])

print("\nUkuran Matriks CountVectorizer (Jumlah Dokumen, Jumlah Fitur/Kata Unik):")
print(X_counts.shape)
# print(count_vectorizer.get_feature_names_out()[:50]) # Melihat beberapa fitur pertama

Outputnya adalah matriks sparse, yang efisien untuk menyimpan data dengan banyak nilai nol (karena sebagian besar kata tidak muncul di sebagian besar dokumen).

Menggunakan TF-IDF (Term Frequency-Inverse Document Frequency)

Term Frequency-Inverse Document Frequency (TF-IDF) adalah skema pembobotan yang lebih canggih daripada sekadar menghitung frekuensi. TF-IDF memberikan bobot yang lebih tinggi pada kata-kata yang sering muncul dalam dokumen tertentu (TF tinggi) tetapi jarang muncul di seluruh korpus dokumen (IDF tinggi). Ini membantu menyoroti kata-kata yang lebih diskriminatif.

Keunggulan TF-IDF scikit-learn dibandingkan CountVectorizer adalah kemampuannya untuk mengurangi bobot kata-kata umum yang muncul di banyak dokumen (seperti stopwords yang mungkin belum terhapus sempurna) dan memberikan penekanan lebih pada kata-kata yang lebih spesifik untuk dokumen tertentu.

Untuk sisa tutorial ini, kita akan menggunakan TF-IDF karena seringkali memberikan hasil yang sedikit lebih baik untuk klasifikasi teks.

from sklearn.feature_extraction.text import TfidfVectorizer

# Inisialisasi TfidfVectorizer
# Kita bisa menambahkan parameter seperti max_features untuk membatasi jumlah fitur
tfidf_vectorizer = TfidfVectorizer(max_features=5000) # Batasi ke 5000 fitur teratas

# Terapkan fit_transform
X_tfidf = tfidf_vectorizer.fit_transform(df['final_message'])

print("\nUkuran Matriks TF-IDF (Jumlah Dokumen, Jumlah Fitur/Kata Unik):")
print(X_tfidf.shape)

# Kita akan menggunakan X_tfidf sebagai fitur (X) untuk model
X = X_tfidf
y = df['label'] # Target/Label

Langkah 4: Membagi Data Latih dan Data Uji

Sangat penting untuk membagi dataset kita menjadi dua bagian: data latih (training set) dan data uji (test set). Model akan dilatih menggunakan data latih, dan kinerjanya akan dievaluasi pada data uji yang belum pernah dilihat sebelumnya untuk mendapatkan estimasi performa yang tidak bias.

from sklearn.model_selection import train_test_split

# Bagi data menjadi data latih (80%) dan data uji (20%)
# X adalah fitur (matriks TF-IDF), y adalah label ('ham'/'spam')
# random_state memastikan pembagian yang sama setiap kali kode dijalankan (reproducibility)
# stratify=y memastikan proporsi kelas tetap sama di data latih dan uji
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42, stratify=y)

print("\nUkuran Data Latih (Fitur dan Label):")
print(X_train.shape, y_train.shape)
print("Ukuran Data Uji (Fitur dan Label):")
print(X_test.shape, y_test.shape)

Parameter stratify=y sangat berguna untuk memastikan proporsi kelas ('ham' dan 'spam') dalam data latih dan data uji sama seperti pada dataset asli, terutama jika dataset tidak seimbang.

Langkah 5: Melatih Model Klasifikasi Naive Bayes

Sekarang kita siap untuk melakukan implementasi naive bayes python dan melatih model klasifikasi kita menggunakan data latih.

Prinsip Kerja Multinomial Naive Bayes untuk Teks

Cara kerja naive bayes teks melibatkan perhitungan probabilitas sebuah dokumen termasuk dalam kelas tertentu berdasarkan frekuensi kemunculan kata-kata di dalamnya. Teorema Bayes digunakan untuk menghitung probabilitas P(Kelas | Dokumen), yaitu probabilitas suatu kelas diberikan fitur-fitur dokumen (kata-kata).

Asumsi "naive" adalah bahwa kemunculan setiap kata dalam dokumen independen satu sama lain, mengingat kelasnya. Meskipun ini jarang benar dalam praktiknya (urutan kata dan hubungan antar kata itu penting), model ini sering bekerja dengan baik secara mengejutkan.

Untuk data teks yang direpresentasikan sebagai hitungan kata (CountVectorizer) atau frekuensi yang dibobot (TF-IDF), varian Naive Bayes yang paling umum digunakan adalah Multinomial Naive Bayes (MultinomialNB). Varian ini dirancang untuk fitur-fitur diskrit (seperti hitungan kata) dan bekerja dengan baik pada representasi BoW atau TF-IDF.

  • ComplementNB: Varian lain yang sering bekerja baik untuk dataset tidak seimbang.
  • BernoulliNB: Cocok untuk fitur biner (ada/tidak adanya kata), kurang umum untuk hitungan/TF-IDF.

Kita akan menggunakan MultinomialNB dalam tutorial ini.

Melatih Model dengan Scikit-learn

Melatih model Naive Bayes di Scikit-learn sangat mudah menggunakan metode .fit().

from sklearn.naive_bayes import MultinomialNB

# Inisialisasi model Multinomial Naive Bayes
# Alpha adalah parameter smoothing (Laplace/Lidstone smoothing) untuk menangani kata-kata
# yang ada di data uji tapi tidak ada di data latih. Defaultnya 1.0.
model_nb = MultinomialNB(alpha=1.0)

# Latih model menggunakan data latih (fitur TF-IDF dan label)
print("\nMelatih model Multinomial Naive Bayes...")
model_nb.fit(X_train, y_train)
print("Model berhasil dilatih.")

Langkah 6: Evaluasi Kinerja Model Klasifikasi Teks

Setelah model dilatih, kita perlu mengevaluasi seberapa baik kinerjanya pada data uji yang belum pernah dilihat sebelumnya. Ini memberikan gambaran tentang bagaimana model akan berperforma pada data baru di dunia nyata.

Melakukan Prediksi pada Data Uji

Kita gunakan metode .predict() pada model yang telah dilatih untuk mendapatkan prediksi label untuk data uji.

# Lakukan prediksi pada data uji (X_test)
y_pred = model_nb.predict(X_test)

print("\nContoh beberapa prediksi pada data uji:")
print("Prediksi:", y_pred[:10])
print("Aktual   :", y_test[:10].values)

Menghitung dan Menginterpretasikan Metrik Evaluasi

Scikit-learn menyediakan berbagai metrik untuk evaluasi model klasifikasi teks python. Metrik utama yang akan kita lihat adalah Akurasi, Presisi, Recall, F1-Score, dan Confusion Matrix.

from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score, confusion_matrix, classification_report

# 1. Akurasi: Persentase prediksi yang benar secara keseluruhan.
accuracy = accuracy_score(y_test, y_pred)
print(f"\nAkurasi Model: {accuracy:.4f}")

# 2. Presisi: Dari semua yang diprediksi sebagai 'spam', berapa persen yang benar-benar 'spam'?
#    Presisi = TP / (TP + FP)
#    Penting jika kita ingin meminimalkan false positive (salah mengklasifikasikan 'ham' sebagai 'spam').
precision_spam = precision_score(y_test, y_pred, pos_label='spam')
print(f"Presisi (Spam): {precision_spam:.4f}")

# 3. Recall (Sensitivity): Dari semua yang sebenarnya 'spam', berapa persen yang berhasil diprediksi sebagai 'spam'?
#    Recall = TP / (TP + FN)
#    Penting jika kita ingin meminimalkan false negative (salah mengklasifikasikan 'spam' sebagai 'ham').
recall_spam = recall_score(y_test, y_pred, pos_label='spam')
print(f"Recall (Spam): {recall_spam:.4f}")

# 4. F1-Score: Rata-rata harmonik dari Presisi dan Recall. Memberikan skor tunggal yang menyeimbangkan keduanya.
#    F1 = 2 * (Presisi * Recall) / (Presisi + Recall)
f1_spam = f1_score(y_test, y_pred, pos_label='spam')
print(f"F1-Score (Spam): {f1_spam:.4f}")

# 5. Confusion Matrix: Tabel yang merangkum hasil prediksi.
#    [[TN, FP],
#     [FN, TP]]
#    TN: True Negative (ham diprediksi ham)
#    FP: False Positive (ham diprediksi spam) - Tipe I Error
#    FN: False Negative (spam diprediksi ham) - Tipe II Error
#    TP: True Positive (spam diprediksi spam)
print("\nConfusion Matrix (Label: 'ham', 'spam'):")
cm = confusion_matrix(y_test, y_pred, labels=['ham', 'spam'])
print(cm)

# 6. Classification Report: Rangkuman Presisi, Recall, F1-Score untuk setiap kelas.
print("\nLaporan Klasifikasi Lengkap:")
print(classification_report(y_test, y_pred, target_names=['ham', 'spam']))

Interpretasi dalam Konteks Deteksi Spam:

  • Akurasi Tinggi: Menunjukkan bahwa model secara keseluruhan bekerja baik dalam membedakan ham dan spam.
  • Presisi Spam Tinggi: Berarti ketika model memprediksi sebuah pesan sebagai spam, prediksinya cenderung benar. Ini penting untuk meminimalkan risiko pesan penting (ham) masuk ke folder spam (mengurangi False Positives).
  • Recall Spam Tinggi: Berarti model mampu mengidentifikasi sebagian besar pesan spam yang sebenarnya. Ini penting untuk meminimalkan jumlah spam yang lolos ke inbox (mengurangi False Negatives).
  • F1-Score: Memberikan keseimbangan antara Presisi dan Recall, berguna jika keduanya sama pentingnya.
  • Confusion Matrix: Memberikan detail jumlah kesalahan. FP (False Positive / ham dikira spam) sering dianggap lebih merugikan dalam konteks email daripada FN (False Negative / spam dikira ham).

Langkah 7: Menggunakan Model untuk Prediksi Teks Baru

Setelah model dilatih dan dievaluasi, kita dapat menggunakannya untuk mengklasifikasikan pesan teks baru yang belum pernah dilihat sebelumnya.

Langkah-langkahnya adalah sebagai berikut:

  1. Ambil teks baru.
  2. Terapkan langkah preprocessing yang sama persis seperti yang dilakukan pada data latih (pembersihan, tokenisasi, penghapusan stopwords).
  3. Gunakan objek vectorizer (dalam kasus ini tfidf_vectorizer) yang sudah di-fit pada data latih untuk mengubah teks baru menjadi vektor fitur. Penting: Gunakan metode .transform(), bukan .fit_transform(), karena kita ingin menggunakan kosakata dan skema pembobotan yang sama yang dipelajari dari data latih.
  4. Gunakan model Naive Bayes yang sudah dilatih (model_nb) untuk melakukan prediksi dengan metode .predict() atau .predict_proba() untuk mendapatkan probabilitas.
# Contoh teks baru
contoh_email_spam = "Congratulations! You've won a $1000 Walmart gift card. Go to http://example-scam.com to claim now."
contoh_email_ham = "Hey, are we still on for dinner tonight at 7 PM? Let me know."
contoh_lain = "Can you please send me the report by tomorrow morning?"

# Daftar teks baru untuk diprediksi
teks_baru = [contoh_email_spam, contoh_email_ham, contoh_lain]

# 1 & 2: Preprocessing teks baru menggunakan fungsi yang sama
teks_baru_cleaned = [clean_text(text) for text in teks_baru]
teks_baru_tokens = [word_tokenize(text) for text in teks_baru_cleaned]
teks_baru_no_stop = [remove_stopwords(tokens) for tokens in teks_baru_tokens]
teks_baru_final = [' '.join(tokens) for tokens in teks_baru_no_stop]

print("\nTeks baru setelah preprocessing:")
print(teks_baru_final)

# 3: Transformasi teks baru menggunakan vectorizer yang sudah di-fit
vektor_baru = tfidf_vectorizer.transform(teks_baru_final)
print("\nUkuran vektor fitur teks baru:")
print(vektor_baru.shape)

# 4: Lakukan prediksi pada vektor baru
prediksi_baru = model_nb.predict(vektor_baru)

# Tampilkan hasil prediksi
print("\nHasil Prediksi untuk Teks Baru:")
for text, prediction in zip(teks_baru, prediksi_baru):
    print(f"Teks: '{text}'\nPrediksi: {prediction}\n---")

# Anda juga bisa mendapatkan probabilitas kelas
probabilitas_baru = model_nb.predict_proba(vektor_baru)
print("\nProbabilitas Prediksi (ham, spam):")
for i, text in enumerate(teks_baru):
    # Mendapatkan indeks kelas dari model
    ham_index = list(model_nb.classes_).index('ham')
    spam_index = list(model_nb.classes_).index('spam')
    print(f"Teks: '{text}'")
    print(f"  Probabilitas Ham: {probabilitas_baru[i][ham_index]:.4f}")
    print(f"  Probabilitas Spam: {probabilitas_baru[i][spam_index]:.4f}")
    print("---")

Ini adalah contoh kode klasifikasi teks python naive bayes yang lengkap untuk mengklasifikasikan data baru secara efektif.

Rangkuman dan Langkah Selanjutnya

Dalam tutorial Belajar Klasifikasi Teks Python ini, kita telah melalui langkah-langkah lengkap untuk membangun model klasifikasi teks deteksi spam menggunakan algoritma Naive Bayes dan library Scikit-learn:

  1. Persiapan: Menginstal library yang diperlukan dan memuat dataset SMS Spam Collection.
  2. Preprocessing Teks: Membersihkan teks (lowercase, hapus tanda baca/angka), melakukan tokenisasi, dan menghapus stopwords.
  3. Ekstraksi Fitur: Mengubah teks menjadi vektor numerik menggunakan TF-IDF (setelah membahas CountVectorizer).
  4. Pembagian Data: Memisahkan data menjadi set latih dan uji secara proporsional.
  5. Pelatihan Model: Melatih model Multinomial Naive Bayes pada data latih.
  6. Evaluasi Model: Menilai kinerja model pada data uji menggunakan metrik seperti akurasi, presisi, recall, F1-score, dan confusion matrix.
  7. Prediksi Baru: Menggunakan model yang telah dilatih untuk mengklasifikasikan pesan teks baru.

Naive Bayes terbukti menjadi algoritma yang cepat, sederhana, dan seringkali memberikan performa awal yang solid untuk tugas klasifikasi teks. Meskipun demikian, penting untuk mengingat kekurangannya, terutama asumsi independensi fitur yang kuat yang mungkin tidak selalu berlaku dalam bahasa alami.

Langkah Selanjutnya untuk Eksplorasi:

  • Preprocessing Lanjutan: Coba teknik seperti Stemming atau Lemmatization untuk menyatukan variasi kata ke bentuk dasarnya (misalnya, 'running', 'ran' menjadi 'run').
  • Varian Naive Bayes Lain: Eksperimen dengan ComplementNB (terutama jika dataset tidak seimbang) atau BernoulliNB (jika menggunakan representasi biner ada/tidaknya kata).
  • Algoritma Lain: Bandingkan performa Naive Bayes dengan algoritma klasifikasi lain seperti Support Vector Machines (SVM), Logistic Regression, atau bahkan model deep learning seperti Long Short-Term Memory (LSTM) atau Transformer jika Anda ingin menggali lebih dalam belajar nlp python.
  • Tuning Hyperparameter: Optimalkan parameter model (misalnya, alpha pada Naive Bayes) atau parameter vectorizer (misalnya, max_features, ngram_range pada TfidfVectorizer) menggunakan teknik seperti Grid Search atau Randomized Search untuk menemukan kombinasi terbaik.
  • Pipeline Scikit-learn: Gabungkan langkah preprocessing dan pemodelan ke dalam satu objek Pipeline. Ini menyederhanakan alur kerja, mencegah kebocoran data dari set uji ke set latih selama preprocessing, dan memudahkan proses seperti cross-validation atau tuning hyperparameter.

Membangun model klasifikasi teks ini adalah langkah awal yang bagus dalam memanfaatkan kekuatan AI untuk memahami dan memproses data tekstual. Jika Anda ingin menerapkan solusi AI yang lebih kompleks atau membutuhkan bantuan dalam mengintegrasikan kecerdasan buatan ke dalam proses bisnis Anda, mulai dari otomatisasi tugas seperti ini, optimasi SEO berkelanjutan dengan AI Agent, hingga pengembangan platform web atau aplikasi mobile khusus, tim ahli siap membantu. Solusi berbasis AI unggulan, termasuk alat kreasi konten (teks, audio, gambar, video) dan pengembangan platform, dirancang untuk mendorong efisiensi dan pertumbuhan. Pelajari lebih lanjut tentang bagaimana solusi AI yang disesuaikan dapat mengakselerasi transformasi digital bisnis Anda.

SEO Jago AIS
DITULIS OLEH

SEO Jago AI

Semua pekerjaan SEO ditangani secara otomatis oleh agen AI, memungkinkan Anda untuk lebih fokus membangun bisnis dan produk Anda.

Tanggapan (0 )