Skip to content

A custom Naive Bayes classifier for sentiment analysis of movie reviews from the IMDb dataset, utilizing feature selection based on Information Gain and comparing its performance with scikit-learn's BernoulliNB.

License

Notifications You must be signed in to change notification settings

Anthippi/Naive-Bayes-IMDB-Classification

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

15 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Κατηγοριοποίηση Κριτικών με Naive Bayes (Θετικές/Αρνητικές) (IMDB Dataset) Static Badge

Αυτό το έργο υλοποιεί έναν Naive Bayes ταξινομητή για την ανάλυση συναισθήματος σε κριτικές ταινιών από το σύνολο δεδομένων IMDb. Ο ταξινομητής κατασκευάζεται από την αρχή, με στόχο την κατανόηση βασικών εννοιών επεξεργασίας φυσικής γλώσσας (NLP), επιλογής χαρακτηριστικών και πιθανοκρατικής μοντελοποίησης.


Περιεχόμενα

  • Δημιουργία λεξιλογίου με βάση Information Gain
  • Μετατροπή κειμένων σε διανύσματα χαρακτηριστικών (bag-of-words)
  • Εκπαίδευση custom Naive Bayes ταξινομητή
  • Σύγκριση με Scikit-learn BernoulliNB
  • Αξιολόγηση μοντέλων με precision, recall, F1 και accuracy

Δομή Κώδικα

Ο κώδικας αποτελείται από τις εξής βασικές κλάσεις:

WordStat

  • Κρατά στατιστικά για κάθε λέξη: πόσες φορές εμφανίζεται σε θετικά/αρνητικά έγγραφα.

VocabularyBuilder

  • Υλοποιεί το λεξιλόγιο:
  • Φιλτράρει λέξεις (αγνοεί τις πιο συχνές και πιο σπάνιες).
  • Υπολογίζει Information Gain (IG) για επιλογή των πιο χρήσιμων λέξεων.
  • Παράγει το τελικό λεξιλόγιο με m χαρακτηριστικά.

FeatureVector

  • Μετατρέπει έγγραφα σε διανύσματα χαρακτηριστικών (binary features):
  • 1 αν η λέξη υπάρχει στο έγγραφο, 0 αν όχι.
  • Προσθέτει και την ετικέτα (1 = θετικό, 0 = αρνητικό).

NaiveBayes

  • Custom υλοποίηση του Naive Bayes:
  • Χρήση log πιθανοτήτων και Laplace smoothing.
  • Υπολογίζει log-likelihood για κάθε χαρακτηριστικό.
  • Προβλέπει την πιθανότερη κατηγορία για νέα έγγραφα.

Οδηγίες Εκτέλεσης

  1. Κατεβάστε το IMDB dataset και αποσυμπιέστε το.
  2. Τρέξε το Jupyter notebook:
jupyter notebook NaiveBayesClassifier.ipynb

Στάδια Εκτέλεσης

Δημιουργία Λεξιλογίου

  • Παράμετροι: n=50, k=80, m=500
  • Αφαιρούνται οι top-50 συχνότερες λέξεις και οι 80 σπανιότερες.
  • Επιλέγονται οι top-500 λέξεις βάσει Information Gain.

Δημιουργία Διανυσμάτων

  • Μετατροπή όλων των κριτικών σε διανύσματα χαρακτηριστικών.

Εκπαίδευση & Αξιολόγηση

  • Εκπαίδευση custom Naive Bayes.
  • Εκπαίδευση Scikit-learn BernoulliNB για σύγκριση.
  • Εκτύπωση precision, recall, F1-score, accuracy.

Παραμετροποίηση

Τροποποίησε τις παρακάτω παραμέτρους στο notebook:

# Παράμετροι λεξιλογίου
n = 50    # Αγνόηση top-n συχνών λέξεων
k = 80    # Αγνόηση bottom-k σπάνιων λέξεων
m = 500   # Επιλογή top-m χαρακτηριστικών

# Παράμετροι εκπαίδευσης
train_size = 25000  # Δείγματα εκπαίδευσης ανά κατηγορία
test_size = 25000   # Δείγματα δοκιμής ανά κατηγορία

Σύγκριση Απόδοσης Μοντέλων

Μοντέλο Accuracy Precision Recall F1 Score
Custom NaiveBayes 0.85 0.84 0.85 0.84
Scikit-Learn NaiveBayes 0.86 0.85 0.86 0.85

Απαιτήσεις

  • Python 3.7+
  • Βιβλιοθήκες:
    • numpy
    • pandas
    • matplotlib
    • sklearn

Εγκατάσταση εξαρτήσεων:

pip install numpy pandas matplotlib scikit-learn seaborn jupyter

Κύρια Χαρακτηριστικά

Υπολογισμός Πληροφορικής Απόδοσης

  • Στατιστική μέθοδος για επιλογή των πιο διακριτικών χαρακτηριστικών

Ομαλήνση Laplace

  • Αντιμετωπίζει άγνωστες λέξεις κατά την ταξινόμηση

Αποδοτική Διανυσματοποίηση

  • Δυαδικά χαρακτηριστικά βελτιστοποιημένα για μνήμη και ταχύτητα

Οπτική Ανάλυση

  • Καμπύλες μάθησης, πίνακες σύγχυσης και γραφήματα σημαντικότητας χαρακτηριστικών

Δείγμα Αποτελεσμάτων

Ολοκληρώθηκε η δημιουργία λεξιλογίου (500 λέξεις)  
Πρώτες 10 λέξεις λεξιλογίου: ['excellent', 'wonderful', 'best', 'perfect', 'great', ...]

Μέγεθος εκπαίδευσης: 25,000 διανύσματα  
Μέγεθος τεστ: 25,000 διανύσματα

Αποτελέσματα Προσαρμοσμένου NaiveBayes:
              precision    recall  f1-score   support

    Αρνητικό     0.84      0.85      0.84     12500
    Θετικό       0.85      0.84      0.84     12500

    accuracy                           0.85     25000

Αποτελέσματα Scikit-Learn:
              precision    recall  f1-score   support

    Αρνητικό     0.85      0.86      0.85     12500
    Θετικό       0.86      0.85      0.85     12500

    accuracy                           0.86     25000

About

A custom Naive Bayes classifier for sentiment analysis of movie reviews from the IMDb dataset, utilizing feature selection based on Information Gain and comparing its performance with scikit-learn's BernoulliNB.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published