sklearn调包侠之朴素贝叶斯

简介: 文档处理朴素贝叶斯算法常用于文档的分类问题上,但计算机是不能直接理解文档内容的,怎么把文档内容转换为计算机可以计算的数字,这是自然语言处理(NLP)中很重要的内容。
img_d9b2abfffccc06efaffca1e1bfccee73.png

文档处理

朴素贝叶斯算法常用于文档的分类问题上,但计算机是不能直接理解文档内容的,怎么把文档内容转换为计算机可以计算的数字,这是自然语言处理(NLP)中很重要的内容。

TF-IDF方法

今天我们简单讲解TF-IDF方法,将文本数据转换为数字。TF-IDF是一个统计方法,用来评估单个单词在文档中的重要程度。
TF表示词频,对一个文档而言,词频就是词在文档出现的次数除以文档的词语总数。例如:一篇文档有1000个字,“我”字出现25次,那就是0.025;“Python”出现5次就是0.005。
IDF表示一个词的逆向文档频率指数。可以由总文档数除以包含该词出现的文档数目,然后取对数。例如:有10000个文档,“Python”只出现了10篇文章,则IDF=log(10000/10)=3;“我”字在所有文档都出现过,则IDF为0。
词频和权重指数相乘,就是词在文档中的重要程度。可以看出,词语的重要性随它在文档中出现的次数呈正比例增加,但同时会随着它在语料库中出现的频率呈反比下降。

实战——文档分类

数据导入和TF-IDF

在sklearn中,通过load_files方法可以将子目录的名字转换为文档类别(target),将目录所有文档读入内存(data)。

from sklearn.datasets import load_files
news_train = load_files('data/379/train')
img_5e1c561db6cb27d0b075f1b5623faedd.png
img_33a62ad1e1697bf87ecb1fb67dc737a6.png

通过TfidfVectorizer方法,将文档数据进行转换:

from sklearn.feature_extraction.text import TfidfVectorizer

vect = TfidfVectorizer(encoding='latin-1')
X_train = vect.fit_transform(news_train.data)
模型训练

朴素贝叶斯算法使用sklearn.naive_bayes模块中的MultinomialNB方法。

from sklearn.naive_bayes import MultinomialNB
y_train = news_train.target
clf = MultinomialNB(alpha=0.0001)
clf.fit(X_train, y_train)
train_score = clf.score(X_train, y_train)

# result 
# 0.99787556904400609
模型评估

简单的,可以通过score方法来评估整个模型的精度。

news_test = load_files('data/379/test')
X_test = vect.transform(news_test.data)
y_test = news_test.target

clf.score(X_test, y_test)

# result 
# 0.90881728045325783

我们也可以通过classification_report方法来查看全方位的评价。

from sklearn.metrics import classification_report

pred = clf.predict(X_test)

print(classification_report(y_test, pred, target_names=news_test.target_names))
img_0fa27120617c1187b24f172d6eeff972.png

也可以查看我们的混淆矩阵。

from sklearn.metrics import confusion_matrix

cm = confusion_matrix(y_test, pred)

print(cm)
img_fb73dd55ec332d4994e59425b08eee2a.png
相关文章
|
机器学习/深度学习 算法
大模型开发:什么是过拟合和欠拟合?你如何防止它们?
机器学习中,过拟合和欠拟合影响模型泛化能力。过拟合是模型对训练数据过度学习,测试集表现差,可通过正则化、降低模型复杂度或增加训练数据来缓解。欠拟合则是模型未能捕捉数据趋势,解决方案包括增加模型复杂度、添加特征或调整参数。平衡两者需通过实验、交叉验证和超参数调优。
1850 0
|
存储 Prometheus Kubernetes
k8s安装kube-promethues(超详细)
k8s安装kube-promethues(超详细)
6967 0
k8s安装kube-promethues(超详细)
|
消息中间件 数据采集 SQL
1、电商数仓(用户行为采集平台)数据仓库概念、用户行为日志、业务数据、模拟数据、用户行为数据采集模块、日志采集Flume(一)
1、电商数仓(用户行为采集平台)数据仓库概念、用户行为日志、业务数据、模拟数据、用户行为数据采集模块、日志采集Flume(一)
|
11月前
|
机器学习/深度学习 数据采集 算法
Python机器学习:Scikit-learn库的高效使用技巧
【10月更文挑战第28天】Scikit-learn 是 Python 中最受欢迎的机器学习库之一,以其简洁的 API、丰富的算法和良好的文档支持而受到开发者喜爱。本文介绍了 Scikit-learn 的高效使用技巧,包括数据预处理(如使用 Pipeline 和 ColumnTransformer)、模型选择与评估(如交叉验证和 GridSearchCV)以及模型持久化(如使用 joblib)。通过这些技巧,你可以在机器学习项目中事半功倍。
246 3
|
11月前
|
SQL 存储 安全
Web 常见攻击方式及防御方法
【10月更文挑战第25天】Web 安全是一个复杂而重要的领域,攻击者不断寻找新的攻击方法,我们需要不断加强防御措施,提高安全意识,以保障 Web 应用的安全运行。通过采取多种防御手段的综合运用,我们可以有效地降低 Web 攻击的风险,保护用户的信息和财产安全。同时,随着技术的不断发展,我们也需要持续关注和研究新的安全威胁和防御方法,以应对不断变化的安全形势。
1243 56
|
Prometheus Kubernetes Cloud Native
k8s安装kube-promethues(超详细)
k8s安装kube-promethues(超详细)
1742 0
|
11月前
|
算法 调度 UED
深入理解操作系统的进程调度机制
本文旨在探讨操作系统中至关重要的组成部分之一——进程调度机制。通过详细解析进程调度的概念、目的、类型以及实现方式,本文为读者提供了一个全面了解操作系统如何高效管理进程资源的视角。此外,文章还简要介绍了几种常见的进程调度算法,并分析了它们的优缺点,旨在帮助读者更好地理解操作系统内部的复杂性及其对系统性能的影响。
|
12月前
|
存储 分布式计算 NoSQL
大数据基础知识
【10月更文挑战第15天】
586 2
|
11月前
|
安全 区块链 数据安全/隐私保护
介绍一下PoW机制的优缺点
介绍一下PoW机制的优缺点
|
存储 人工智能 BI
【头歌·计组·自己动手画CPU】二、运算器设计(理论版) 【计算机硬件系统设计】
【头歌·计组·自己动手画CPU】二、运算器设计(理论版) 【计算机硬件系统设计】
1454 1