朴素贝叶斯算法是基于贝叶斯定理与特征条件独立假设的分类方法。分类是 将一个未知样本分到几个预先已知类的过程。解决数据分类问题有两步:第一步, 建立一个模型,描述预先的数据集或概念集,通过分析由属性描述的样本(或实 例,对象等)来构造模型;第二步,假定每一个样本都有一个预先定义的类,由 一个被称为类标签的属性确定,为建立模型而被分析的数据元组形成训练数据 集,该步也称作有指导的学习。

接下来我们在Ubuntu系统使用 Mahout 进行朴素贝叶斯模型的训练和测试。

(一)训练模型

  • root用户
su root 

  • 启动hadoop
start-all.sh 

查看 ls /zhenghe-out/ 数据文件是否存在

  • 将文本数据转换成 SequenceFile
mahout seqdirectory -i file:///home/sys-01/zhenghe-out/ -o
file:///home/sys-01/zhenghe-out-seq/ -c UTF-8 -chunk 64 -xm sequential  --keyPrefix7 

内置的seqdirectory命令可以完成 文本目录到SequenceFile的转换过程。 上述命令蕴含了2个大坑,在官方文档中均没有仔细说明:

(1) -xm sequential,表示在本地执行,而不是用MapReduce执行。如果是后者, 我们势必要将这些小文件上传到HDFS上,那样的话,还要就不需要SequenceFile(序列文件)。

(2) 然而seqdirectory在执行的时候,并不因为十本地模式,就在本地文件系统上找。而是根据-i -o的文件系统前缀来判断文件位置。也就是说,默认情况,依 然是在HDFS上查找的……所以,这个file://的前缀是非常有必要的。

其他2个参数: -c UTF8:编码格式。

-chunk 64:64MB一个Chunk,应该和HDFS的BLOCK保持一致或者倍数关系。

  • (4)在HDFS上创建目录user/coder5
hadoop fs -rm -r -skipTrash /user
hadoop fs -mkdir -p /user/coder5/train
hadoop fs -mkdir -p /user/coder5/test 

  • 上传序列文件(SequenceFile)到HDFS系统
hdfs dfs -put /home/sys-01/zhenghe-out-seq /user/coder5 

查看结果

hdfs dfs -ls /user/coder5 

  • 开始SequenceFile->Vector的转换:
mahout seq2sparse -i /user/coder5/zhenghe-out-seq/chunk-0 -o
/user/coder5/zhenghe-vectors -lnorm -nv -wt tfidf8 

参数说明如下:

-ow( 或 --overwrite):即使输出目录存在,依然覆盖。

--weight(或 -wt) tf:权重公式。(当LDA时建议使用tf )。

--maxDFPercent(或 -x) 85:过滤高频词,当DF大于85%时,将不在作为词特征输

出到向量中。

--namedVector (或-nv):向量会输出附加信息。

其他可能有用的选项:

--analyzerName(或-a):指定其他分词器。

–minDF:最小DF阈值。

–minSupport:最小的支持度阈值,默认为2。

–maxNGramSize(或-ng):是否创建ngram,默认为1。建议一般设定到2就够了。

–minLLR(或 -ml):The minimum Log Likelihood Ratio。默认为1.0。当设定了-ng >

1后,建议设置为较大的值,只过滤有意义的N-Gram。

–logNormalize(或 -lnorm):是否对输出向量做Log变换。

–norm(或 -n):是否对输出向量做p-norm变换,默认不变换。

  • 拆分数据(如果想拆分数据就执行1,不想拆分数据就执行2。可以两种实验 都做一下,然后使用正确率较高的model)

①想拆分数据就执行此步骤,将60%的数据用于训练,40%用于测试。

mahout split -i /user/coder5/zhenghe-vectors/tfidf-vectors --trainingOutput
/user/coder5/train --testOutput /user/coder5/test --randomSelectionPct 40 --overwrite
--sequenceFiles -xm sequential9 

②不想拆分数据就执行此步骤。

hadoop fs -mkdir /user/coder5/trainW
hadoop fs -mkdir /user/coder5/testW
hdfs dfs -cp /user/coder5/zhenghe-vectors/tfidf-vectors /user/coder5/trainW
hdfs dfs -cp /user/coder5/zhenghe-vectors/tfidf-vectors /user/coder5/testW 

  • 训练:

①拆分过数据执行此步骤。

mahout trainnb -i /user/coder5/train -o /user/coder5/train/model -li labelindex -ow -c 

②未拆分数据执行此步骤。

mahout trainnb -i /user/coder5/trainW/tfidf-vectors -o /user/coder5/trainW/model -li
labelindex -ow -c10 

  • 测试训练好的贝叶斯分类器:

①拆分过数据就执行此步骤。

mahout testnb -i /user/coder5/test -m /user/coder5/train/model -l labelindex -ow -o
test-result 

②未拆分数据就执行此步骤。

mahout testnb -i /user/coder5/testW/tfidf-vectors -m /user/coder5/trainW/model -l
labelindex -ow -o test-result11 

二、数据分类

  • 将数据库导出的所有 txt 直接放在/home/sys-01/data 文件夹下面(此步骤跳过,数据已存在)
  • 将文本数据转换成 SequenceFile
mahout seqdirectory -i file:///home/sys-01/data/ -o file:///home/sys-01/data-seq/ -c
UTF-8 -chunk 64 -xm sequential --keyPrefix 

  • 在 HDFS 上创建目录
hadoop fs -mkdir -p /user/coder/train 

  • 上传序列文件(SequenceFile)到 HDFS 系统
hdfs dfs -put /home/sys-01/data-seq /user/coder 

查看结果

hdfs dfs -ls /user/coder12 

  • 开始 SequenceFile->Vector 的转换:
mahout seq2sparse -i /user/coder/data-seq/chunk-0 -o /user/coder/data-vectors -lnorm
-nv -wt tfidf 

  • 复制数据到/user/coder/train 目录下
hdfs dfs -cp /user/coder/data-vectors/tfidf-vectors /user/coder/train 

  • /home/sys-01下新建文件夹 classify (提示文件已存在,我们删除了它,在新

建)

rm -rf /home/sys-01/classify
mkdir /home/sys-01/classify 

  • 将 hdfs 中的 coder 文件导出到本地
hdfs dfs -get /user/coder /home/sys-01/classify  

  • 将 hdfs 的 coder5/train/model 文件导出到本地/home/sys01/classify/coder/train

目录下

hdfs dfs -get /user/coder5/train/model /home/sys-01/classify/coder/train  

  • 运行/home/sys-01/下的 jar 包生成路径名/文件名->索引的 csv 文件
output.csv。 

①拆分数据运行 bayesF.jar 包

java -jar bayesF.jar  

②未拆分数据运行 bayesW.jar 包

java -jar bayesW.jar

使用说明 vector_Paddlepaddle学习|Ubuntu环境使用 Mahout 进行朴素贝叶斯模型的训练和测试...相关推荐

  1. c语言程序朴素贝叶斯分类器,生成式学习算法(四)之----朴素贝叶斯分类器

    朴素贝叶斯分类器(算法)与朴素贝叶斯假设 在高斯判别分析模型(GDA)中,特征向量$ x$ 是连续实值向量.现在我们来讨论分量$ x_j$ 取离散值的贝叶斯朴素贝叶斯模型. 在文本分类问题中,有一个问 ...

  2. 机器学习理论《统计学习方法》学习笔记:第四章 朴素贝叶斯法

    机器学习理论<统计学习方法>学习笔记:第四章 朴素贝叶斯法 4 朴素贝叶斯法 4.1 朴素贝叶斯法的学习与分类 4.1.1 基本方法 4.1.2 后验概率最大化的含义 4.2 朴素贝叶斯法 ...

  3. [CS229学习笔记] 5.判别学习算法与生成学习算法,高斯判别分析,朴素贝叶斯,垃圾邮件分类,拉普拉斯平滑

    本文对应的是吴恩达老师的CS229机器学习的第五课.这节课介绍了判别学习算法和生成学习算法,并给出了生成学习算法的一个实例:利用朴素贝叶斯进行垃圾邮件分类. 判别学习(Discriminative L ...

  4. Python3《机器学习实战》学习笔记(五):朴素贝叶斯实战篇之新浪新闻分类

    转载请注明作者和出处:http://blog.csdn.net/c406495762 Github代码获取:https://github.com/Jack-Cherish/Machine-Learni ...

  5. Python3《机器学习实战》学习笔记(三):朴素贝叶斯基础篇之言论过滤器

    文章目录 一.简介 二.朴素贝叶斯理论 2.1 贝叶斯决策论 2.2 条件概率 2.3 全概率公式 2.4 贝叶斯推断 2.5 朴素贝叶斯推断 三.代码实现 3.1创建实验样本 3.2创建词汇表 3. ...

  6. Python3《机器学习实战》学习笔记(四):朴素贝叶斯基础篇之言论过滤器

    转载请注明作者和出处: http://blog.csdn.net/c406495762 运行平台: Windows Python版本: Python3.x IDE: Sublime text3 文章目 ...

  7. 【朴素贝叶斯学习记录】西瓜书数据集朴素贝叶斯实现

    朴素贝叶斯学习记录2 本文主要根据西瓜书的朴素贝叶斯公式推导以及例题解答为基础进行学习. 该全过程主要解决了以下几个问题: 朴素贝叶斯的数学表达式是如何求得 朴素贝叶斯与贝叶斯的差别在哪里 朴素贝叶斯 ...

  8. 《机器学习实战》学习笔记之第四章朴素贝叶斯进行文档分类

    朴素贝叶斯有两个假设: 1."朴素":特征之间相互独立,单词出现的概率相同,当然这个假设不合理 2."权重相同":每个特征等同重要,这个假设也不太合理 尽管如此 ...

  9. 《机器学习实战》学习笔记(四) : 朴素贝叶斯的基本原理

    在看了书.CSDN上的博客.B站上的视频后整理而成,超级感谢前辈提供的宝贵知识- Table of Contents 1  基础数学知识 1.1  条件概率公式 1.2  贝叶斯公式 1.3  全概率 ...

最新文章

  1. 字节跳动19春招研发第一次笔试-A卷第一题
  2. pmp每日三题(2022年3月14日)
  3. primefaces_轻量级Web应用程序框架:PrimeFaces(JSF)+ Guice + MyBatis(第2部分)
  4. 前端学习(3288):react hook state-hook
  5. node mysql 增删改查_Nodejs操作MySQL - 增删改查
  6. [设计模式] ------ 原型模式(浅拷贝和深拷贝)
  7. 【java基础知识】linux运行或停止jar包程序
  8. 2017.9.21 道路修建(noi2011) 思考记录
  9. k8s核心技术-Pod(两种实现机制)_Pod底层实现机制_共享网络_共享存储_Pause根容器_Pod数据卷---K8S_Google工作笔记0021
  10. sql活动监视器 死锁_使用system_health扩展事件监视SQL Server死锁
  11. 高通HAL层之Sensor HAL
  12. podman—网络设置、开机自启及加速器配置
  13. 计算机快捷键任务管理器,任务管理器快捷键,小编教你电脑如何打开任务管理器...
  14. Spring框架RCE 0day漏洞,官方解决方案
  15. 我对计算机基础的认识,我对计算机的认识
  16. 大一计算机专业学生自我月小结,大学生学习过程月度总结
  17. Real Digital德国站real.de怎么样?Payoneer绿色入驻通道!
  18. 华为手机怎么连接电脑传输
  19. 在移动硬盘里移动视频文件到移动硬盘 另外一个文件夹 显示正在计算_移动硬盘也支持AES-256位硬件加密,希捷锦系列入手体验...
  20. 互联网日报 | 贾跃亭乐视网股票流拍;东航组建“三亚国际航空”;苹果线上WWDC大会22日举办...

热门文章

  1. .git文件夹_将Git存储库中的文件夹转换为全新的存储库
  2. tftp刷路由器 linux,TP-Link无线路由器HTTP/TFTP后门漏洞
  3. 计算机科学与技术属于教育技术学么,计算机教育-计算机教育与教育技术学有什么不同吗?我学的专业是计算机教育,我想 爱问知识人...
  4. go uint64 转 字符_Go的基本数据类型入门看这一篇就差不多了
  5. android studio table居中代码_五个方法实例代码详解教你在CSS中实现垂直居中
  6. php pdo 更新sql语句,增删改查sql语句及PDO数据库连接操作流程实例-2019年7月24日...
  7. 【Mybatis】resultMap继承
  8. activiti 流程图乱码
  9. vuex中的getters
  10. pip更新失败_最全Tensorflow2.0 入门教程持续更新