当前位置: 首页 > news >正文

机器学习-朴素贝叶斯

分类是机器学习最常见的任务。

定义:给定一个对象 X,将其划分到预定义好的某一个类别 yi中

–输入 X

–输出Y (取值于有限集 {y1,y 2,…yn }) 

应用:

–人群,新闻分类,Query分类,商品分类,网页分类,垃圾邮件过滤,网页排序 

不同类型的分类

类别数量:

  1. 二値分类:Y 的取值只有两种,如:email 是否垃圾邮件

  2. 多值分类:Y 的取值大于两种,如:网页分类{政治,经济,体育}

类别关系

  1. 水平分类:类别之间无包含关系

  2. 层级分类:类别形成等级关系

分类器的分类:

  1. 概率分类器:Naive Bayes(NB,朴素贝叶斯) ,EM(Expectation–Maximization)最大化期望

    1. 计算待分类对象属于每个类别的概率,选择概率最大的类别作为最终输出

  2. 空间:Perceptron(感知机), SVM( Support Vector Machine 支持向量机)

  3. 其他:KNN

以新闻分类为例子说明机器学习的流程。

  1. 特征表示:x={昨日,是,国内,投资,市场...}

  2. 特征选择:x={国内,投资,市场...}

  3. 模型选择:朴素贝叶斯分类器

  4. 训练数据:(x,y)1,(x,y)2,(x,y)3,...

  5. 模型训练:learn.exe trainingDataFile model

  6. 测试(分类):classify.exe model newDataFile

  7. 评测:Accuracy:90%

其中选择朴素贝叶斯分类器的原因:

  1. 数据量大

  2. 需要快速,高效

  3. 可以分布式

朴素贝叶斯分类(Naive Bayes,NB)

基于贝叶斯原理

  1. P(X):待分类对象自身的概率,可忽略(我们主要是比较同一个对象分别属于不同分类的概率大小关系,没必要求出概率的具体值)

  2. :每个类别的先验概率,如P(军事)

  3. :每个类别产生该对象的概率

  4. :每个类别产生该特征的概率,如P(苹果|科技)

注意 X 属于yi概率,我将其表示表示每个单词的联合概率,单词联合概率不好求,所以我们假设文档中每个词是独立,由联合概率的独立性推出第三个式子。

  随机变量X,Y是相互独立。

注意:

     由于每个单词的乘积,如果某个词在某个类型出现零次,那么就会造成概率为0的情况,这样造成文章属于该分类的概率为0.我们要进行平滑处理(打土豪分田地),这里就用加一平滑(拉普拉斯平滑),就是给每一个单词加一个默认个数:可以是0.1或者其他数据,这要需要给单词总数添加一个词表的个数。这个平滑是加在训练阶段,在分类时,如果新数据出现整个训练词表中都没有出现的词,我目前做法是丢弃。

     数据稀疏:是机器学习中很大的问题,比拉普拉斯平滑更好的解决数据稀疏的方法是:通过聚类将未出现的词找出系统相关词,根据相关词的概率求一个平均值。如果:系统有“苹果”,“葡萄”等词,但是没有“榴莲”,我们可以根据“苹果”,“葡萄”等平均值作为“榴莲”的概率,这样跟合理。

     在计算机中运算,概率为(0,1)之间的小数,连续乘积容易造成溢出。又因为我们是比较文章与分类概率大小,所以我们可以log(xy)=log(x)+log(y) 将连乘改成连加。log 函数单调递增。如果 x>y 则 log(x)>log(y)

参数估计

也就如何求各个概率。

策略:最大似然估计(maximum likelihoodestimation,MLE)

先验概率:

Count(yi):类别为yi 的对象在训练数据中出现的次数。

:所有文档数

Count(xj,yi):特征 xj 和类别 yi 在训练数据中同时出现的次数

Count(yi):类别 yi 总词数。

预测

给定 x,计算所有的p(yi|x),选择概率值最大的yi 作为输出。

评测

  1. 准确度 Accuracy:(C11+C22)/(C11+C12+C21+C22)

  2. 精确率Precision(y1):C11/(C11+C21)

  3. 召回率Recall(y1):C11/(C11+C12)

准确度只能从整体上评测分类器。

如果想知道某个分别上的分类精准情况,可以用精准率。

精准率:是分类器认为某一类中,实际是这一类的比例。

          召回率对于某些情况很重要。像垃圾邮件分类器。如果我们将一份正常邮件分成垃圾邮件,和将垃圾邮件分成正常邮件,哪个危害大?当然是将正常邮件分成垃圾邮件,因为一旦误分成垃圾邮件,客户就丢失这封邮件的信息,但是将垃圾邮件误分成正常邮件,只不过浪费客服几秒种,删除就行了。所以这是正常召回率就相当重要,我们要看有多少正常邮件被召回,我们尽量要让正常邮件的召回率为100%。

朴素贝叶斯分类特点

优点

  1. 简单有效

  2. 结果是概率(软性分类),对二值和多值同样适用。

  3. 数据量大、

  4. 需要快速,高效

  5. 可以分布式

缺点

  1. 独立性假设有时不合理。(如果需要不假设独立性,可以用最大熵分类)

相关文章:

  • 【git lfs 问题记录】
  • 【Linux探索学习】第一弹——Linux的基本指令(上)——开启Linux学习第一篇
  • 预计2030年全球GO电工钢市场规模将达到120.6亿美元
  • uniapp view增加删除线
  • WMware安装WMware Tools(Linux~Ubuntu)
  • java提升-常见的java调试工具介绍
  • 【SpringCloud】环境和工程搭建
  • 处理execl表格的库----openpyxl
  • 基于Qt的多功能串口通信工具分享:实时数据收发与波形绘制
  • 网络协议一般分为几类?如何划分
  • 从基础到进阶:Docker 实践与应用的全方位解析
  • 从零开始搭建UVM平台(二)-加入factory机制
  • Junit 5 - 理解Mockito,提高UT 覆盖率
  • element plus 重写drawer\dialog样式不生效
  • 【Python快速学习笔记01】下载解释器/环境变量配置/PyCharm下载/第一个代码
  • Cumulo 的 ClojureScript 模块已经成型
  • js继承的实现方法
  • miaov-React 最佳入门
  • node-glob通配符
  • windows下使用nginx调试简介
  • 短视频宝贝=慢?阿里巴巴工程师这样秒开短视频
  • 翻译--Thinking in React
  • 机器人定位导航技术 激光SLAM与视觉SLAM谁更胜一筹?
  • 利用jquery编写加法运算验证码
  • 删除表内多余的重复数据
  • 使用 Docker 部署 Spring Boot项目
  • 使用 QuickBI 搭建酷炫可视化分析
  • 微服务核心架构梳理
  • 小程序、APP Store 需要的 SSL 证书是个什么东西?
  • 完善智慧办公建设,小熊U租获京东数千万元A+轮融资 ...
  • (C++17) optional的使用
  • (c语言)strcpy函数用法
  • (TipsTricks)用客户端模板精简JavaScript代码
  • (二)linux使用docker容器运行mysql
  • (二)什么是Vite——Vite 和 Webpack 区别(冷启动)
  • (附源码)springboot 个人网页的网站 毕业设计031623
  • (附源码)ssm捐赠救助系统 毕业设计 060945
  • (理论篇)httpmoudle和httphandler一览
  • (欧拉)openEuler系统添加网卡文件配置流程、(欧拉)openEuler系统手动配置ipv6地址流程、(欧拉)openEuler系统网络管理说明
  • (四)c52学习之旅-流水LED灯
  • . ./ bash dash source 这五种执行shell脚本方式 区别
  • .cn根服务器被攻击之后
  • .equal()和==的区别 怎样判断字符串为空问题: Illegal invoke-super to void nio.file.AccessDeniedException
  • .net core 6 集成和使用 mongodb
  • .NET Framework杂记
  • .Net 中Partitioner static与dynamic的性能对比
  • .NET命令行(CLI)常用命令
  • .NET文档生成工具ADB使用图文教程
  • .NET性能优化(文摘)
  • .NET值类型变量“活”在哪?
  • .Net转Java自学之路—SpringMVC框架篇六(异常处理)
  • .vollhavhelp-V-XXXXXXXX勒索病毒的最新威胁:如何恢复您的数据?
  • [ A*实现 ] C++,矩阵地图
  • [ C++ ] 类和对象( 下 )
  • [AI]文心一言出圈的同时,NLP处理下的ChatGPT-4.5最新资讯