Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >机器学习基础——朴素贝叶斯做文本分类代码实战

机器学习基础——朴素贝叶斯做文本分类代码实战

作者头像
TechFlow-承志
发布于 2020-03-05 07:58:34
发布于 2020-03-05 07:58:34
1.4K00
代码可运行
举报
文章被收录于专栏:TechFlowTechFlow
运行总次数:0
代码可运行

点击上方蓝字,和我一起学技术。

上一篇文章当中我们介绍了朴素贝叶斯模型的基本原理

朴素贝叶斯的核心本质是假设样本当中的变量服从某个分布,从而利用条件概率计算出样本属于某个类别的概率。一般来说一个样本往往会含有许多特征,这些特征之间很有可能是有相关性的。为了简化模型,朴素贝叶斯模型假设这些变量是独立的。这样我们就可以很简单地计算出样本的概率。

想要回顾其中细节的同学,可以点击链接回到之前的文章:机器学习基础——让你一文学会朴素贝叶斯模型

在我们学习算法的过程中,如果只看模型的原理以及理论,总有一些纸上得来终觉浅的感觉。很多时候,道理说的头头是道,可是真正要上手的时候还是会一脸懵逼。或者是勉强能够搞一搞,但是过程当中总会遇到这样或者那样各种意想不到的问题。一方面是我们动手实践的不够, 另一方面也是理解不够深入。

今天这篇文章我们实际动手实现模型,并且在真实的数据集当中运行,再看看我们模型的运行效果。

朴素贝叶斯与文本分类

一般来说,我们认为狭义的事件的结果应该是有限的,也就是说事件的结果应该是一个离散值而不是连续值。所以早期的贝叶斯模型,在引入高斯混合模型的思想之前,针对的也是离散值的样本(存疑,笔者推测)。所以我们先抛开连续特征的场景,先来看看在离散样本当中,朴素贝叶斯模型有哪些实际应用。

机器学习广泛的应用场景当中,有一个非常经典的应用场景,它的样本一定是离散的,它就是自然语言处理(Natural Language Processing)。在语言当中,无论是什么语言,无论是一个语句或是一段文本,它的最小单位要么是一个单词,要么是一个字。这些单元都是离散的,所以天生和朴素贝叶斯模型非常契合。

我们这次做的模型针对的场景是垃圾邮件的识别,这应该是我们生活当中经常接触到的功能。现在的邮箱基本上都有识别垃圾邮件的功能,如果发现是垃圾邮件,往往会直接屏蔽,不会展示给用户。早期的垃圾邮件和垃圾短信识别的功能都是通过朴素贝叶斯实现的。

在这个实验当中,我们用的是UCI的数据集。UCI大学的机器学习数据集非常出名,许多教材和课本上都使用了他们的数据集来作为例子。我们可以直接通过网页下载他们的数据,UCI的数据集里的数据都是免费的。

https://archive.ics.uci.edu/ml/datasets/sms+spam+collection

下载完成之后,我们先挑选其中几条来看看:

ham Go until jurong point, crazy.. Available only in bugis n great world la e buffet... Cine there got amore wat... ham Ok lar... Joking wif u oni... spam Free entry in 2 a wkly comp to win FA Cup final tkts 21st May 2005. Text FA to 87121 to receive entry question(std txt rate)T&C's apply 08452810075over18's ham U dun say so early hor... U c already then say...

这份数据是以txt文件类型保存,每行文本的第一个单词表示文本的类别,其中ham表示正常,spam表示是垃圾邮件。

我们首先读取文件,将文件当中的内容先读取到list当中,方便我们后续的处理。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def read_file(filename):
    file = open(filename, 'r')
    content = []
    for line in file.readlines():
        content.append(line)
    return content

我们查看一下前三条数据:

可以发现类别和正文之间通过\t (tab)分开了,我们可以直接通过python的split方法将类别和正文分开。其中类别也就是我们想要模型学习的结果,在有监督学习当中称为label。文本部分也就是模型做出预测的依据,称为特征。在文本分类场景当中,特征就是文本信息

我们将label和文本分开:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
labels = []
data = []

for i in smsTxt:
    row = i.split('\t')
    if len(row) == 2:
        labels.append(row[0])
        data.append(row[1])

过滤标点符号

将文本和label分开之后,我们就需要对文本进行处理了。在进行处理之前,我们先随便拿一条数据来查看一下,这里我们选择了第一条:

'Go until jurong point, crazy.. Available only in bugis n great world la e buffet... Cine there got amore wat...\n'

这是一条非常典型的未处理之前的文本,当中不仅大小写字母混用,并且还有一些特殊符号。所以文本处理的第一步就是把所有字母全部小写,以及去除标点符号。

说起来比较复杂,但只要使用正则表达式,我们可以很方便地实现:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import re
# 只保留英文字母和数字
rule = re.compile("[^a-zA-Z\d ]")
for i in range(len(data)):
    data[i] = re.sub("[^a-zA-Z\d ]", '', data[i].lower())

最后得到的结果如下:

go until jurong point crazy available only in bugis n great world la e buffet cine there got amore wat

这里正则表达式非常简单,就是只保留英文字母和数字以及空格,其余所有的内容全部过滤。我们在传入的时候做了大小写转换,会把所有的大写字母转成小写。到这里为止,所有的特殊字符就都处理掉了,接下来就可以进行分词了。

英文的分词很简单,我们直接根据空格split即可。如果是中文分词,可以使用一些第三方库完成,之前的文章里介绍过,这里就不赘述了。

安装nltk

在接下来的文本处理当中,我们需要用到一个叫做nltk的自然语言处理的工具库。当中集成了很多非常好用的NLP工具,和之前的工具库一样,我们可以直接使用pip进行安装:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pip3 install nltk

这里强烈建议使用Python3,因为Python2已经不再维护了。这步结束之后,只是装好了nltk库,nltk当中还有很多其他的资源文件需要我们下载。我们可以直接通过python进行下载:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import nltk

nltk.download()

调用这个代码之后会弹出一个下载窗口:

我们全选然后点击下载即可,不过这个数据源在国外,在国内直接下载可能会很慢。除了访问外国网站之外,另一种方法是可以直接在github里下载对应的资源数据:https://github.com/nltk/nltk_data

需要注意的是,必须要把数据放在指定的位置,具体的安装位置可以调用一下download方法之后查看红框中的路径。或者也可以使用清华大学的镜像源,使用命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple/nltk

下载好了之后,我们在Python当中执行:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
fron nltk.book import *

如果出现以下结果,就说明已经安装完毕:

去除停用词

装好了nltk之后,我们要做的第一个预处理是去除停用词。

停用词英文是stop words,指的是文本当中对语义无关紧要的词汇。包含了常见的虚词、助词、介词等等。这些词语大部分只是修饰作用,对文本的语义内容起不到决定作用。因此在NLP领域当中,可以将其过滤,从而减少计算量提升模型精度。

Nltk当中为常见的主流语言提供了停用词表(不包括中文),我们传入指定的语言,将会返回一个停用词的list。我们在分词之后根据停用词表进行过滤即可。

我们可以打印出所有英文的停用词看一下,大部分都是一些虚词和助词,可能出现在所有语境当中,对我们对文本进行分类几乎没有帮助。

词性归一化

众所周知,英文当中的单词有很多形态。比如名词有单复数形式,有些特殊的名词复数形式还很不一样。动词有过去、现在以及未来三种时态,再加上完成时和第三人称一般时等,又有很多变化。

举例来说,do这个动词在文本当中会衍生出许多小词来。比如does, did, done, doing等,这些单词虽然各不相同,但是表示的意思完全一样。因此,在做英文NLP模型的时候,需要将这些时态的单词都还原成最基本的时态,这被称为是词性归一化。

原本这是一项非常复杂的工作,但我们有了nltk之后,这个工作变得简单了很多。要做单词归一化,我们需要用到nltk当中的两个工具。

第一个方法叫做pos_tag, 它接收一个单词的list作为入参。返回也是一个tuple的list,每个tuple当中包含两个值,一个是单词本身,第二个参数就是我们想要的词性。

举个例子:

我们传入只有一个单词apple的list,在返回的结果当中除了apple之外,还多了一个NN,它表示apple是一个名词nouns。

关于返回的词性解释,感兴趣的可以自行查看官方文档的说明。

我们这里并不需要区分那么细,只需要区分最常用的动词、名词、形容词、副词就基本上够了。

我们可以直接根据返回结果的首字母做个简单的映射:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from nltk import word_tokenize, pos_tag
from nltk.corpus import wordnet
from nltk.stem import WordNetLemmatizer

# 获取单词的词性
def get_wordnet_pos(tag):    
    if tag.startswith('J'):        
        return wordnet.ADJ    
    elif tag.startswith('V'):        
        return wordnet.VERB    
    elif tag.startswith('N'):        
        return wordnet.NOUN    
    elif tag.startswith('R'):        
        return wordnet.ADV    
    else:        
        return None

通过pos_tag方法我们很容易就可以拿到单词的词性,但是这还不够,我们还需要将它还原成最基础的形态。这个时候需要用到另一个工具:WordNetLemmatizer

它的用途是根据单词以及单词的词性返回单词最一般的形态,也就是归一化的操作。

举个例子:

我们传入了box的复数形式:boxes,以及box对应的名词,它返回的结果正是我们想要的box。

我们结合刚刚实现的查询单词词性的方法,就可以完成单词的归一化了。

到这里为止,关于文本的初始化就算是差不多结束了。除了刚刚提到的内容之外,nltk还包含许多其他非常方便好用的工具库。由于篇幅的限制,我们不能一一穷尽,感兴趣的读者可以自行钻研,相信一定会很有收获。

下面,我们把刚才介绍的几种文本预处理的方法一起用上,对所有的短信进行预处理:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
for i in range(len(data)):    
    data[i] = re.sub("[^a-zA-Z ]", '', data[i].lower())    
    tokens = data[i].split(' ')  # 分词    
    tagged_sent = pos_tag([i for i in tokens if i and not i in stopwords.words('english')])     # 获取单词词性    
    wnl = WordNetLemmatizer()    
    lemmas_sent = []    
    for tag in tagged_sent:        
        wordnet_pos = get_wordnet_pos(tag[1]) or wordnet.NOUN        
        lemmas_sent.append(wnl.lemmatize(tag[0], pos=wordnet_pos))        
        data[i] = lemmas_sent

通过nltk的工具库,我们只需要几行代码,就可以完成文本的分词、停用词的过滤以及词性的归一化等工作。

接下来,我们就可以进行朴素贝叶斯的模型的训练与预测了。

首先,我们需要求出背景概率。所谓的背景概率,也就是指在不考虑任何特征的情况下,这份样本中信息当中天然的垃圾短信的概率。

这个其实很简单,我们只需要分别其实正常的邮件与垃圾邮件的数量然后分别除以总数即可:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def base_prob(labels):    
    pos, neg = 0.0, 0.0    
    for i in labels:        
        if i == 'ham':            
            neg += 1        
        else:            
            pos += 1    
    return pos / (pos + neg), neg / (pos + neg)

我们run一下测试一下结果:

可以看到垃圾短信的概率只占13%,大部分短信都是正常的。这也符合我们的生活经验,毕竟垃圾短信是少数。

接下来我们需要求出每个单词属于各个类别的概率,也就是要求一个单词的概率表。这段代码稍微复杂一些,但是也不麻烦:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def word_prob(data, labels):    
    n = len(data)    
    # 创建词表    
    word_dict = {}    
    for i in range(n):        
        lab = labels[i]        
        # 先转set再转list,去除重复的常规操作        
        dat = list(set(data[i]))   
                     
        for word in dat:            
            # 单词不在dict中的时候创建dict,默认从1开始计数,为了防止除0            
            if word not in word_dict:                
                word_dict[word] = {'ham' : 1, 'spam': 1} # 拉普帕斯平滑避免除0           
            word_dict[word][lab] += 1    
    # 将数量转化成概率    
    for i in word_dict:        
        dt = word_dict[i]        
        ham = dt['ham']        
        spam = dt['spam']        
        word_dict[i]['ham'] = ham / float(ham + spam)        
        word_dict[i]['spam'] = spam / float(ham + spam)    
    return word_dict

同样,我们运行一下测试一下结果:

这些都有了之后,就是预测的重头戏了。这里有一点需要注意,根据我们上文当中的公式,我们在预测文本的概率的时候,会用到多个概率的连乘。由于浮点数有精度限制,所以我们不能直接计算乘积,而是要将它转化成对数,这样我们就可以通过加法来代替乘法,就可以避免连乘带来的精度问题了。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import math

def predict(samples, word_prob, base_p, base_n):    
    ret = []    
    for sam in samples:        
        neg = math.log(base_n)        
        pos = math.log(base_p)        
        for word in sam:            
            if word not in word_prob:                
                continue            
            neg += math.log(word_prob[word]['spam'])            
            pos += math.log(word_prob[word]['ham'])        
        ret.append('ham' if pos > neg else 'spam')    
    return ret

预测的方法也非常简单,我们分别计算出一个文本属于spam以及ham的概率,然后选择概率较大的那个作为最终的结果即可。

我们将原始数据分隔成训练集以及预测集,调用我们刚刚编写的算法获取预测的结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from sklearn.model_selection import train_test_split

x_train, x_test, y_train, y_test = train_test_split(data, labels, test_size=0.25)
base_p, base_n = base_prob(y_train)
word_dt = word_prob(x_train, y_train)
ret = predict(x_test, word_dt, base_p, base_n)

最后,我们调用一下sklearn当中的classification_report方法来获取贝叶斯模型的预测效果:

从上图当中看,贝叶斯模型的预测效果还是不错的。对于垃圾文本识别的准确率有90%,可惜的是召回率低了一点,说明有一些比较模糊的垃圾文本没有识别出来。这也是目前这个场景下问题的难点之一,但总的来说,贝叶斯模型的原理虽然简单,但是效果不错,也正因此,时至今日,它依旧还在发挥着用处。

NLP是当今机器学习领域非常复杂和困难的应用场景之一,关于文本的预处理以及模型的选择和优化都存在着大量的操作。本文当中列举的只是其中最简单也是最常用的部分。

到这里,关于朴素贝叶斯的实践就结束了。我想亲手从零开始写出一个可以用的模型,一定是一件非常让人兴奋的事情。但关于朴素贝叶斯模型其实还没有结束,它仍然有许多细节等待着大家去思考,也有很多引申的知识。模型虽然简单,但仍然值得我们用心地体会。

今天的文章就到这里,如果觉得有所收获,请顺手点个在看或者转发吧,你们的支持是我最大的动力。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-01-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Coder梁 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【机器学习 | 朴素贝叶斯】朴素贝叶斯算法:概率统计方法之王,简单有效的数据分类利器
贝叶斯算法是一种常用的概率统计方法,它利用贝叶斯定理来进行分类和预测。其在计算机还没有出现前几十年就存在了,那个时候科学家们都是用手算的,是最早的机器学习形式之一,该算法基于统计学原理,通过已知的先验概率和观测到的数据,更新对事件发生概率的估计。因为有着一个很强的假设,每个数据特征都是独立的,这也是条件独立的前提条件,也叫"朴素的"的假设,故叫朴素贝叶斯算法。
计算机魔术师
2023/10/15
7530
【机器学习 | 朴素贝叶斯】朴素贝叶斯算法:概率统计方法之王,简单有效的数据分类利器
【NLP实战系列】朴素贝叶斯文本分类实战
实战是学习一门技术最好的方式,也是深入了解一门技术唯一的方式。因此,NLP专栏计划推出一个实战专栏,让有兴趣的同学在看文章之余也可以自己动手试一试。
用户1508658
2019/10/22
1.1K0
【NLP实战系列】朴素贝叶斯文本分类实战
【机器学习-监督学习】朴素贝叶斯
  贝叶斯分类是一类分类算法的总称,这类算法均以贝叶斯定理为基础,所以统称为贝叶斯分类。朴素贝叶斯是一种贝叶斯分类算法,在许多场合可以与决策树和神经网络分类算法相媲美。图1展示了贝叶斯原理、贝叶斯分类和朴素贝叶斯三者之间的关系。
Francek Chen
2025/01/22
1800
【机器学习-监督学习】朴素贝叶斯
筑墙:基于朴素贝叶斯的垃圾邮件分类实践
使用sklearn包下的朴素贝叶斯算法,它包含三种模型——高斯模型、多项式模型和伯努利模型, 本文将使用贝叶斯多项式模型类来解决英文邮件分类的问题。
herain
2024/11/23
1970
筑墙:基于朴素贝叶斯的垃圾邮件分类实践
【机器学习】算法原理详细推导与实现(三):朴素贝叶斯
在上一篇算法中,逻辑回归作为一种二分类的分类器,一般的回归模型也是是判别模型,也就根据特征值来求结果概率。形式化表示为 \(p(y|x;\theta)\),在参数 \(\theta\) 确定的情况下,求解条件概率 \(p(y|x)\) 。通俗的解释为:在给定特定特征后预测结果出现的概率。逻辑回归的 \(y\) 是离散型,取值为 \(\{0,1\}\) 。这里将要介绍另一个分类算法 朴素贝叶斯,用以解决 \(x\) 是离散型的数据,这是判别模型,也是一个生成学习算法。
机器学习和大数据挖掘
2019/07/09
6080
【机器学习】算法原理详细推导与实现(三):朴素贝叶斯
python实现朴素贝叶斯模型:文本分类+垃圾邮件分类
学习了那么多机器学习模型,一切都是为了实践,动手自己写写这些模型的实现对自己很有帮助的,坚持,共勉。本文主要致力于总结贝叶斯实战中程序代码的实现(python)及朴素贝叶斯模型原理的总结。python的numpy包简化了很多计算,另外本人推荐使用pandas做数据统计。 一 引言   让你猜测一个身高2.16的人的职业,你一般会猜测他是篮球运动员。这个原理就是朴素贝叶斯原理,因为篮球运动员大多身高很高,所以这个人具有篮球运动员的条件,则猜测他是篮球运动员。   同理,另一个升高1.58的人,你应该不会猜他是
机器学习AI算法工程
2018/03/14
2.5K0
【干货】用朴素贝叶斯进行文本分类
本文由作者授权转载 作者|龙心尘 & 寒小阳 1.引言 贝叶斯方法是一个历史悠久,有着坚实的理论基础的方法,同时处理很多问题时直接而又高效,很多高级自然语言处理模型也可以从它演化而来。因此,学习贝叶斯
大数据文摘
2018/05/22
4K0
基于朴素贝叶斯的文本分类算法「建议收藏」
摘要:常用的文本分类方法有支持向量机、K-近邻算法和朴素贝叶斯。其中朴素贝叶斯具有容易实现,运行速度快的特点,被广泛使用。本文详细介绍了朴素贝叶斯的基本原理,讨论多项式模型(MM),实现了可运行的代码,并进行了一些数据测试。
全栈程序员站长
2022/08/30
8070
基于朴素贝叶斯的文本分类算法「建议收藏」
AI -朴素贝叶斯
朴素贝叶斯是一种基于概率论和统计学的分类算法,它的核心是贝叶斯定理和特征条件独立假设。
@小森
2024/03/24
1250
R语言与机器学习(分类算法)朴素贝叶斯算法
前两个算法都被要求做出一个艰难的决定,给出数据所属分类的明确答案,但往往因为分类特征统计不足,或者分类特征选择有误导致了错误的分类结果,哪怕是训练集也有可能出现不能正确分类的情形。这时,前两种方法都如同现实生活一样是用“少数服从多数”的办法来做出决策。正如帕斯卡指出的:“少数服从多数未必是因为多数人更正义,而是多数人更加强力”,所以为了保证“少数人的权利”,我们要求分类器给出一个最优的猜测结果,同时给出猜测的概率估计值。 贝叶斯统计基础 在说朴素贝叶斯算法之前,还是要说说贝叶斯统计,关于贝叶斯统计,
机器学习AI算法工程
2018/03/12
2.1K0
R语言与机器学习(分类算法)朴素贝叶斯算法
Python3《机器学习实战》学习笔记(五):朴素贝叶斯实战篇之新浪新闻分类
本文通过分析代码数据集,总结了一种基于机器学习的新闻分类方法,该方法通过提取文本特征,使用朴素贝叶斯分类器进行分类,并针对数据集不平衡问题,采用过采样和欠采样策略,提升分类效果。同时,针对提取的特征词,采用词袋模型和TF-IDF方法进行特征表示,最终将特征向量输入到分类器中进行分类。实验结果表明,该方法在新闻分类任务上具有较好的效果。
Jack_Cui
2018/01/08
2.2K0
Python3《机器学习实战》学习笔记(五):朴素贝叶斯实战篇之新浪新闻分类
【机器学习实战】第4章 基于概率论的分类方法:朴素贝叶斯
文章主要介绍了如何利用机器学习算法对RSS源进行分类和过滤。首先介绍了RSS源的分类和过滤的必要性,然后详细介绍了基于机器学习算法的RSS源过滤方法,包括特征提取、模型训练和过滤策略等。最后,介绍了一个基于机器学习算法的RSS源过滤系统的设计与实现。
片刻
2018/01/05
1.9K0
【机器学习实战】第4章 基于概率论的分类方法:朴素贝叶斯
【机器学习】--机器学习之朴素贝叶斯从初始到应用
机器学习算法中,有种依据概率原则进行分类的朴素贝叶斯算法,正如气象学家预测天气一样,朴素贝叶斯算法就是应用先前事件的有关数据来估计未来事件发生的概率。
LhWorld哥陪你聊算法
2018/09/13
4420
【机器学习】--机器学习之朴素贝叶斯从初始到应用
【机器学习】朴素贝叶斯
本文介绍了朴素贝叶斯模型,朴素贝叶斯(几乎所有的概率模型)的核心假设:特征之间的条件概率相互独立。以垃圾邮件分类问题为例,分析了朴素贝叶斯模型的两种应用场景:1)先验分布和条件概率分布都为一元伯努利分布,2)先验分布为一元伯努利分布,条件概率分布为多元伯努利分布。分别对应词袋子表示中两种常用的方法: one-hot表示,编号表示(词频表示)。
zenRRan
2019/12/17
7730
机器学习-将多项式朴素贝叶斯应用于NLP问题
朴素贝叶斯分类器算法是一系列概率算法,基于贝叶斯定理和每对特征之间条件独立的“朴素”假设而应用。 贝叶斯定理计算概率P(c | x),其中c是可能结果的类别,x是必须分类的给定实例,表示某些特定特征。
XXXX-user
2019/09/25
8800
机器学习-将多项式朴素贝叶斯应用于NLP问题
机器学习教程:朴素贝叶斯文本分类器
在本教程中,我们将讨论朴素贝叶斯文本分类器。朴素贝叶斯是最简单的分类器之一,只涉及简单的数学表达,并且可以使用PHP,C#,JAVA等语言进行编程。
花落花飞去
2018/02/01
1.7K0
机器学习教程:朴素贝叶斯文本分类器
11. HanLP实现朴素贝叶斯/SVM--文本分类
笔记转载于GitHub项目:https://github.com/NLP-LOVE/Introduction-NLP
mantch
2020/02/21
1.6K0
11. HanLP实现朴素贝叶斯/SVM--文本分类
机器学习笔记(六)——朴素贝叶斯构建一个简易情感分类器
其中公式推导这一部分较为重要,利用条件概率解决问题也是朴素贝叶斯的基本思想,所以理解贝叶斯准则如何得到,以及如何应用十分重要,也是后期构建算法的基础。
奶糖猫
2020/07/12
2.5K3
机器学习笔记(六)——朴素贝叶斯构建一个简易情感分类器
朴素贝叶斯实战篇之新浪新闻分类
Python版本: Python3.x 作者:崔家华 运行平台: Windows 编辑:黄俊嘉 IDE: Sublime text3 一、前言 上篇文章Python3《机器学习实战》学习笔记(四):朴素贝叶斯基础篇之言论过滤器讲解了朴素贝叶斯的基础知识。本篇文章将在此基础上进行扩展,你将看到以下内容: 1.拉普拉斯平滑 2.垃圾邮件过滤(Python3) 3.新浪新闻分类(sklearn) 二、朴素贝叶斯改进之拉普拉斯平滑 上篇文章提到过,
机器学习算法工程师
2018/03/06
1.9K0
朴素贝叶斯实战篇之新浪新闻分类
数据分析入门系列教程-贝叶斯实战
上一节我们学习了朴素贝叶斯的原理,并且手动推导了计算方法,今天我们通过两个真实案例,来看看如何在工作中应用朴素贝叶斯。
周萝卜
2020/10/30
4470
数据分析入门系列教程-贝叶斯实战
推荐阅读
相关推荐
【机器学习 | 朴素贝叶斯】朴素贝叶斯算法:概率统计方法之王,简单有效的数据分类利器
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验