博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【零基础学习机器学习】朴素贝叶斯算法
阅读量:3935 次
发布时间:2019-05-23

本文共 1845 字,大约阅读时间需要 6 分钟。

目录


  分类算法 - 朴素贝叶斯算法

1、概率基础

2、朴素贝叶斯介绍

概率基础

朴素贝叶斯介绍

朴素贝叶斯算法使用前提:特征独立(“朴素”,就是特征独立的意思)

公式解释:(通过一个例子进行解释)

问题:

求某一篇文章是什么类型的?(科技、娱乐、...)

那么我们可以先求这篇文章是各个类型的概率,哪个类型的概率大,那么文章就是什么类型的。

求解:

ps:m为训练文档中统计出的特征词的种类的个数

实现API

sklearn.naive_bayes.MultiomialNB

MultiomialNB

sklearn.naive_bayes.MultiomialNB(alpha = 1.0)

这里的alpha:拉普拉斯平滑系数。目的是防止分类时某一类别的概率为0

默认alpha = 1.0,不用改。

朴素贝叶斯算法案例

20个新闻组数据集包含20个主题的18000个新闻组帖子,给测试集的新闻进行分类。

案例流程

1、加载20类新闻数据,并进行分割

2、生成文章特征词

3、朴素贝叶斯estimator流程进行预估

案例实现

from sklearn.model_selection import train_test_splitfrom sklearn.neighbors import KNeighborsClassifierfrom sklearn.preprocessing import StandardScalerfrom sklearn.datasets import load_iris, fetch_20newsgroupsfrom sklearn.feature_extraction.text import TfidfVectorizerfrom sklearn.naive_bayes import MultinomialNBfrom sklearn.metrics import classification_reportimport pandas as pdimport numpy as npdef naviebayes():    """    朴素贝叶斯进行文本分类    :return: None    """    # TODO 获取数据集    news = fetch_20newsgroups(subset='all')    # print(news.target_names)  # 文章的类别    # TODO 进行数据分割    x_train, x_test, y_train, y_test = train_test_split(news.data, news.target, test_size=0.25)    # TODO 对数据集进行特征抽取    tf = TfidfVectorizer()    # 以训练集当中的词的列表进行每篇文章的词的重要性统计['a','b','c']    x_train = tf.fit_transform(x_train)    print(tf.get_feature_names())    x_test = tf.transform(x_test)    # TODO 进行朴素贝叶斯算法预测    mlt = MultinomialNB(alpha=1.0)    # print(x_train)  # sparse矩阵    print(x_train.toarray())    mlt.fit(x_train, y_train)    y_predict = mlt.predict(x_test)    print("预测的文章类别为:", y_predict)    # 得出准确率    print("准确率为:", mlt.score(x_test, y_test))    # 得出精确率和召回率    print("每个类别的精确率和召回率:", classification_report(y_test, y_predict, target_names=news.target_names))if __name__ == '__main__':    naviebayes()

support表示预测时,划分为某个类别的个数。

优缺点

算法不需要调参

缺点:当训练集误差大,结果误差也大。当文章的某些词不是重要的,反应文章主题类别的词,就会影响结果。

转载地址:http://fdrgn.baihongyu.com/

你可能感兴趣的文章
process.waitFor() 返回值含义
查看>>
调用Process.waitfor导致的进程挂起(较详细)
查看>>
springmvc支持json和jsonp类型数据
查看>>
获取 request 中用POST方式"Content-type"是"application/json"发送的 json 数据
查看>>
Nginx反向代理,负载均衡,redis session共享,keepalived高可用
查看>>
web项目部署补丁包
查看>>
python的json.dumps输出中文
查看>>
webSocket与html区别,以及服务端与客户端消息通讯利用webSocket
查看>>
mysql在java中处理update语句使用了表别名,不起作用
查看>>
[Google Guava] 3-缓存介绍(转)
查看>>
java中静态变量hashmap赋值给非静态变量,非静值改变,静态值也改变
查看>>
spring cloud java.lang.NoClassDefFoundError: javax/servlet/http/HttpServletRequest
查看>>
MySQL一段时间内取一条数据的办法
查看>>
MySQL查询字段不区分大小写,如要区分大小写需要处理
查看>>
mysql,命令导入\导出表结构或数据
查看>>
MySQL使用Navicat导出数据,数据会被减少
查看>>
java中NIO对文件的读取操作
查看>>
idea中@Data标签getset不起作用
查看>>
git使用
查看>>
spring boot jpa多表查询展示实体的方法
查看>>