机器学习——朴素贝叶斯练习题

一、

使用鸢尾花数据训练多项式朴素贝叶斯模型,并评估模型

代码展示:

python 复制代码
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 MultinomialNB

iris = 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))

结果展示:

python 复制代码
预测率: 0.9555555555555556

二、

电影评论情感分析

‌项目背景‌:

你在一家电影评论网站工作,需要开发一个情感分析系统来自动分类用户评论是正面还是负面。使用Kaggle上的"IMDB Dataset of 50K Movie Reviews"数据集。

‌数据集链接‌:

IMDB Dataset of 50K Movie Reviews | Kaggle

‌练习题要求‌:

  1. 使用Pandas加载并预处理数据
  2. 使用Numpy进行特征工程
  3. 比较不同朴素贝叶斯变体(高斯、多项式、伯努利)的性能
  4. 使用matplotlib绘制性能比较图表

代码展示:

python 复制代码
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 plt

df = 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_lists

transfer = 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()

结果展示:

python 复制代码
多项式朴素贝叶斯: 0.8628666666666667
伯努利朴素贝叶斯: 0.8533333333333334
高斯朴素贝叶斯: 0.7214347826086956
相关推荐
做萤石二次开发的哈哈2 小时前
连锁门店、园区、交通枢纽的视频如何统一汇集?应用模板的接入与分权管理详解
人工智能·物联网·音视频·二次开发·视频监控·蓝海aiot一站式工作台·萤石云开放平台
老金带你玩AI3 小时前
全程拿着手机,我让dot准备了一场AI分享
人工智能
nvd113 小时前
Flink 批处理驱动的湖仓 AI 财务研报流水线:从双流广播汇聚到 Agent 智能决策与原生 Iceberg 落盘全景实战
大数据·人工智能·flink
码爸3 小时前
线性回归算法
算法·机器学习·线性回归
snhna3 小时前
向量数据库深度实战:从 HNSW 到 pgvector、Milvus 选型与 RAG 落地
数据库·人工智能·python·postgresql·milvus
架构技术专栏3 小时前
Agent 工具调用:从工具声明到执行反馈
前端·人工智能·后端
点云-激光雷达-Slam-三维牙齿3 小时前
100,000 Records CSV File - India Traffic Accident Analysis Dataset.7z
人工智能·数据集
TechWayfarer3 小时前
精度极限的突破:AI与IPv6如何重塑高精度IP查询
人工智能·网络协议·tcp/ip·transformer
七十二时9563 小时前
视频掉帧怎么用AI补帧
人工智能
可达智灵3 小时前
信创适配|织灵 Coda Loom 2.0 完成银河麒麟服务器操作系统 V10、V11 适配认证
人工智能·可达智灵