python vector_自然语言处理:Python中的朴素贝叶斯分类实现

3d611fe63eb6bf00d1aabdbbe192779d.png

介绍

本文解释了如何使用python制作用于文本分类的朴素贝叶斯分类器。朴素贝叶斯算法是机器学习中最常用的文本分类算法之一。使用python实现朴素贝叶斯分类器相对容易,本文将使用scikit-learn(python机器学习库)。我将解释如何使用示例代码一步一步地编写代码。

1.什么是朴素贝叶斯分类器

朴素贝叶斯分类器是一种用于分类的机器学习算法,尤其适用于自然语言处理。它通常用于将新闻文章分类为特定类别,过滤垃圾邮件,情感分析等。

[样本用例]

  • 分类新闻文章
  • 过滤垃圾邮件
  • 分析积极/消极情绪

朴素贝叶斯的特点

朴素贝叶斯分类器被分类为监督机器学习,基于贝叶斯定理。这两个因素都很重要,构成了朴素贝叶斯分类。

作为监督机器学习,朴素贝叶斯分类器需要训练数据进行分类。训练数据的质量会影响分类的准确性,因此您需要记住,收集合格的机器学习训练数据集非常重要。否则,朴素贝叶斯分类器会错误地对数据进行分类。

贝叶斯定理是基于条件概率的数学理论来计算偶数概率。它根据事件的先验概率计算事件的概率。换句话说,它显示事件的先验概率对最终概率的影响程度。

[朴素贝叶斯分类器的特点]

  • 监督学习
  • 基于贝叶斯定理
  • 基于条件概率的统计方法

2.什么是TF-IDF

TF-IDF(term frequency- reverse document frequency,简称TF-IDF)是文本数据特征提取的主要方法之一。首先,文本本身无法计算,因此将其转换为向量空间(数值数据)。

TF-IDF计算每个文档中单词的重要性并减少诸如“is”,“the”,“a”等的停止词。TF-IDF提取文档中的特征词(如:技术文档中的“Python”)。TF-IDF利用这些特征词将文本转换为向量空间。

3.用Scikit-learn编写Python中的朴素贝叶斯分类器

在这一章中,我们使用scikit-learn库在python中编写了naive bayes分类器,它提供了很多机器学习算法。在本例中,我们将新闻文章分为每个类别。工作步骤如下。

  1. 机器学习数据收集:从sklearn.dataset准备训练数据集
  2. 将文本数据转换为向量空间:创建字典并将文本数据转换为向量空间。
  3. 建模和训练:创建朴素的贝叶斯分类器机器学习模型和训练
  4. 执行并检查输出:分类测试数据并显示结果。

3-1数据收集:来自sklearn.dataset的数据集

第一步是从sklearn.dataset获取样本训练数据集。Scikit-learn为实验提供了样本和实际数据集。下面的Python代码显示了包含哪些数据集以及如何访问它们。

# Import dataset module.from sklearn.datasets import fetch_20newsgroups# Fetch 20 news groups training dataset.# subset : Select "test" or "train" dataset.# We extract "train" dataset. news_groups_train = fetch_20newsgroups(subset="train")# Show keys. # data : Article data# target_names: Category names. # target : Labeled(categorized) data. Labeled in replaced numbers. news_groups_train.keys()
db6ded4a5383aac98a5ebc20f4590beb.png

dict_keys(['data', 'filenames', 'target_names', 'target', 'DESCR', 'description'])

# Get article content.news_groups_train.data[0]
e9d19719c6bf8602e249b64759adbf0d.png
834bbac61842c03d87a34947844b50e3.png
# Get numerically labeled number of category.news_groups_train.target
e797146c7844cf2f59926fa9a3b02bd1.png

array([7, 4, 4, ..., 3, 1, 8])

# Get target(category) names.news_groups_train.target_names
7da6229707bf753bc271208ce653d36f.png

['alt.atheism',

'comp.graphics',

'comp.os.ms-windows.misc',

'comp.sys.ibm.pc.hardware',

'comp.sys.mac.hardware',

'comp.windows.x',

'misc.forsale',

'rec.autos',

'rec.motorcycles',

'rec.sport.baseball',

'rec.sport.hockey',

'sci.crypt',

'sci.electronics',

'sci.med',

'sci.space',

'soc.religion.christian',

'talk.politics.guns',

'talk.politics.mideast',

'talk.politics.misc',

'talk.religion.misc']

3-2从文本到向量的转换:TF-IDF向量化

下一步是从文本数据创建向量化数据。此步骤还分为两个步骤:创建计数矩阵并从计数矩阵转换为向量表示。Scikit-learn为转换提供了CountVectorizer和TfidfTransformer类。

# Import CountVectorizer class. # CountVectorizer converts text data to matrix of token counts.from sklearn.feature_extraction.text import CountVectorizercount_vector = CountVectorizer()# fit_transform() creates dictionary and return term-document matrix.X_train_counts = count_vector.fit_transform(news_groups_train.data)# Import TfidfTransformer class.# TfidfTransformer transoforms count matrix to tf-idf representation.from sklearn.feature_extraction.text import TfidfTransformertfidf_transformer = TfidfTransformer()# fit_transform transforms count matrix to tf-idf representation(vector).X_train_tfidf = tfidf_transformer.fit_transform(X_train_counts)
e1ce6d2d738797a93b2a21963b676591.png

3-3建模与训练:创建朴素贝叶斯分类器模型

第三步是制作朴素的贝叶斯分类器模型和训练数据。Scikit-learn为文本分类提供了sklearn.naive_bayes.MultinomialNB类。下面的Python代码显示了如何制作模型和训练数据集。

在文本分类中,使用多项式朴素贝叶斯(MultinominalNB)。该算法适合离散类型的数据。

# Create model(naive bayes) and training. from sklearn.naive_bayes import MultinomialNBclf = MultinomialNB().fit(X_train_tfidf, news_groups_train.target)
9621a0cd6a5f0562657f34bdeb5244c4.png

3-4执行分类和检查结果

最后一步是执行分类和检查结果。您可以制作自己的简单文档并进行测试。测试数据也应该转换为向量空间。

# Create test documents.docs_new = [ 'God is love',  'OpenGL on the GPU is fast',  "United states goes to Iraq
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值