5.1 KiB
5.1 KiB
Biblioteki
import pandas as pd
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.naive_bayes import MultinomialNB
from sklearn.pipeline import make_pipeline
from sklearn.metrics import accuracy_score
import numpy as np
from gensim.models import Word2Vec
from sklearn.naive_bayes import GaussianNB
from nltk.tokenize import word_tokenize
from nltk.corpus import stopwords
Wczytanie danych
train_data = pd.read_csv('Train.csv')
valid_data = pd.read_csv('Valid.csv')
test_data = pd.read_csv('Test.csv')
X_train = train_data['text']
y_train = train_data['label']
X_valid = valid_data['text']
y_valid = valid_data['label']
X_test = test_data['text']
y_test = test_data['label']
Naiwny klasyfikator bayesowski z wektoryzacją TF-IDF
# Stworzenie pipeline do przetwarzania tekstu i uczenia modelu
model = make_pipeline(TfidfVectorizer(), MultinomialNB())
# Trenowanie modelu
model.fit(X_train, y_train)
# Ewaluacja modelu
y_valid_pred = model.predict(X_valid)
valid_accuracy = accuracy_score(y_valid, y_valid_pred)
y_test_pred = model.predict(X_test)
test_accuracy = accuracy_score(y_test, y_test_pred)
print(f'Dokładność na zbiorze walidacyjnym: {valid_accuracy:.4f}')
print(f'Dokładność na zbiorze testowym: {test_accuracy:.4f}')
Dokładność na zbiorze walidacyjnym: 0.8616 Dokładność na zbiorze testowym: 0.8670
Naiwny klasyfikator bayesowski z osadzeniami słów (Word2Vec)
stop_words = set(stopwords.words('english'))
def tokenize(text):
tokens = word_tokenize(text.lower())
tokens = [word for word in tokens if word.isalnum()]
tokens = [word for word in tokens if word not in stop_words]
return tokens
X_train_tokens = [tokenize(review) for review in X_train]
X_valid_tokens = [tokenize(review) for review in X_valid]
X_test_tokens = [tokenize(review) for review in X_test]
w2v_model = Word2Vec(sentences=X_train_tokens, vector_size=100, window=5, min_count=1, workers=4)
# Funkcja do konwersji recenzji na osadzenia słów
def document_vector(tokens, model):
vec = [model.wv[word] for word in tokens if word in model.wv]
return np.mean(vec, axis=0) if len(vec) > 0 else np.zeros(model.vector_size)
X_train_vectors = np.array([document_vector(tokens, w2v_model) for tokens in X_train_tokens])
X_valid_vectors = np.array([document_vector(tokens, w2v_model) for tokens in X_valid_tokens])
X_test_vectors = np.array([document_vector(tokens, w2v_model) for tokens in X_test_tokens])
# Klasyfikator Naive Bayes
model_w2v = GaussianNB()
# Trenowanie modelu
model_w2v.fit(X_train_vectors, y_train)
# Ewaluacja modelu
y_valid_pred_w2v = model_w2v.predict(X_valid_vectors)
valid_accuracy_w2v = accuracy_score(y_valid, y_valid_pred_w2v)
y_test_pred_w2v = model_w2v.predict(X_test_vectors)
test_accuracy_w2v = accuracy_score(y_test, y_test_pred_w2v)
print(f'Dokładność na zbiorze walidacyjnym (Word2Vec): {valid_accuracy_w2v:.4f}')
print(f'Dokładność na zbiorze testowym (Word2Vec): {test_accuracy_w2v:.4f}')
Dokładność na zbiorze walidacyjnym (Word2Vec): 0.7584 Dokładność na zbiorze testowym (Word2Vec): 0.7644