一、
使用鳶尾花數據訓練多項式樸素貝葉斯模型,并評估模型
代碼展示:?
from sklearn.datasets import load_iris
from sklearn.metrics import accuracy_score
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import MultinomialNBiris = load_iris()x_train,x_test,y_train,y_test = train_test_split(iris.data,iris.target,test_size=0.3,random_state=42)model = MultinomialNB()model.fit(x_train,y_train)y_pred = model.predict(x_test)
print("預測率:",accuracy_score(y_test,y_pred))
?結果展示:
預測率: 0.9555555555555556
二、
電影評論情感分析
?項目背景?:
你在一家電影評論網站工作,需要開發一個情感分析系統來自動分類用戶評論是正面還是負面。使用Kaggle上的"IMDB Dataset of 50K Movie Reviews"數據集。
?數據集鏈接?:
IMDB Dataset of 50K Movie Reviews | Kaggle
?練習題要求?:
- 使用Pandas加載并預處理數據
- 使用Numpy進行特征工程
- 比較不同樸素貝葉斯變體(高斯、多項式、伯努利)的性能
- 使用matplotlib繪制性能比較圖表
代碼展示:
import re
import pandas as pd
from sklearn.feature_extraction.text import CountVectorizer, TfidfVectorizer
from sklearn.metrics import accuracy_score
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import GaussianNB, MultinomialNB, BernoulliNB
import matplotlib.pyplot as pltdf = pd.read_csv("./data/IMDB Dataset.csv",encoding="utf-8")
print(df.head())
print(df.shape)df["sentiment"] = df["sentiment"].map({"positive":1,"negative":0})
# print(df.head())comment = df["review"]
# print(comment.head())comment_lists = []
for i in comment:# print(i)i = i.lower()i = re.sub(r'<.*?>', '', i)i = re.sub(r'[^a-zA-Z]', ' ', i)words = i.split()words = [word for word in words if len(word) > 2]comment_list = " ".join(words)comment_lists.append(comment_list)# print(comment_list)
df["clean_review"] = comment_liststransfer = TfidfVectorizer(max_features=5000,ngram_range=(1,2))
x = transfer.fit_transform(df["clean_review"])
y = df["sentiment"]x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.3,random_state=42)mu_model = MultinomialNB()
mu_model.fit(x_train,y_train)mu_y_pred = mu_model.predict(x_test)
mu_accuracy = accuracy_score(y_test,mu_y_pred)
print("多項式樸素貝葉斯:",mu_accuracy)be_model = BernoulliNB()
be_model.fit(x_train,y_train)be_y_pred = be_model.predict(x_test)
be_accuracy = accuracy_score(y_test,be_y_pred)
print("伯努利樸素貝葉斯:",be_accuracy)transfer = CountVectorizer(max_features=5000)
x = transfer.fit_transform(comment_lists)x_dense = x.toarray()x_train = x_dense[:4000, :]
good_or_bad = df["sentiment"].values
y_train = good_or_bad[:4000]
x_test = x_dense[4000:, :]
y_test = good_or_bad[4000:]ga_model = GaussianNB()
ga_model.fit(x_train,y_train)
ga_y_pred = ga_model.predict(x_test)
ga_accuracy = accuracy_score(y_test,ga_y_pred)
print("高斯樸素貝葉斯:",ga_accuracy)models = ['GaussianNB','MultinomialNB','BernoulliNB']
values = [ga_accuracy,mu_accuracy,be_accuracy]plt.bar(models,values,color=['blue','green','red']
)plt.title("Comparison of Naive Bayes Variants")
plt.ylabel("Accuracy")
plt.tight_layout()
plt.show()
結果展示:
多項式樸素貝葉斯: 0.8628666666666667
伯努利樸素貝葉斯: 0.8533333333333334
高斯樸素貝葉斯: 0.7214347826086956
?
?
?
?