配置

配置请看我的其他文章 点击跳转

spark官方文档

点击跳转官方文档

其它文章

推荐一个在蚂蚁做算法的人写的文章,不过他的文章偏专业化,有很多数学学公式。我是看的比较懵。点击跳转

数据

训练数据

预测数据


实体类

用了swagger和lombok 不需要的可以删掉

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotEmpty;/*** 分类算法传参* 比如决策树 随机森林 朴素贝叶斯** @author teler* @date 2020-10-09*/@Data
@ApiModel("朴素贝叶斯")
public class ClassifyEntity {/*** 测试数据*/@ApiModelProperty("测试数据")@NotEmpty(message = "参数不能为空")String trainFilePath;/*** 数据路径*/@ApiModelProperty("数据路径")@NotEmpty(message = "参数不能为空")String dataFilePath;/*** 测试模型的数据比例*/@ApiModelProperty("测试模型的数据比例")@Min(value = 0, message = "最小比例为0")@Max(value = 1, message = "最大比例为1")double testDataPct;/*** 测试模型准确率阈值*/@ApiModelProperty("测试模型准确率阈值")@Min(value = 0, message = "最小比例为0")@Max(value = 1, message = "最大比例为1")double testThreshold;}

算法实现

里面有些方法是为了保留小数 不需要的自己改


@Resource
private transient SparkSession sparkSession;@Override
public Map<String, Object> naiveBayes(ClassifyEntity record) {System.out.println("========== 朴素贝叶斯算法开始 ==========");Map<String, Object> map = new HashMap<>();Dataset<Row> source = getDataSetByHdfs(record.getTrainFilePath());//训练数据map.put("training", toList(source));//根据比例从数据源中随机抽取数据 训练数据和测试数据比例 建议设为0.8Dataset<Row>[] splits = source.randomSplit(new double[]{record.getTestDataPct(), 1 - record.getTestDataPct()},1234L);//训练和测试数据Dataset<Row> trainingData = splits[0].cache();Dataset<Row> testData = splits[1].cache();NaiveBayes nb = new NaiveBayes();NaiveBayesModel model = nb.fit(trainingData);//准确率Dataset<Row> testResult = model.transform(testData);Dataset<Row> predictionAndLabels = testResult.select("prediction", "label");MulticlassClassificationEvaluator evaluator = new MulticlassClassificationEvaluator().setLabelCol("label").setPredictionCol("prediction").setMetricName("accuracy");//准确率map.put("accuracy", NumberUtil.roundDown(evaluator.evaluate(predictionAndLabels), 3));//计算结果Dataset<Row> dataSource = getDataSetByHdfs(record.getDataFilePath());Dataset<Row> datasetRow = model.transform(dataSource).select("features", "label", "prediction");//平滑指数map.put("smoothing", NumberUtil.roundDown(model.getSmoothing(), 3));//数据map.put("data", toList(datasetRow));return map;
}

getDataSetByHdfs方法

这个方法我与上面的方法放在一个类中,所以sparkSession没重复写

/*** 从hdfs中取数据** @param dataFilePath 数据路径* @return 数据集合*/private Dataset<Row> getDataSetByHdfs(String dataFilePath) {//屏蔽日志Logger.getLogger("org.apache.spark").setLevel(Level.WARN);Logger.getLogger("org.eclipse.jetty.server").setLevel(Level.OFF);Dataset<Row> dataset;try {//我这里的数据是libsvm格式的 如果是其他格式请自行更改dataset = sparkSession.read().format("libsvm").load(dataFilePath);log.info("获取数据结束 ");} catch (Exception e) {log.info("读取失败:{} ", e.getMessage());}return dataset;}

toList

/*** dataset数据转化为list数据** @param record 数据* @return 数据集合*/private List<Map<String, String>> toList(Dataset<Row> record) {log.info("格式化结果数据集===============================");List<Map<String, String>> list = new ArrayList<>();String[] columns = record.columns();List<Row> rows = record.collectAsList();for (Row row : rows) {Map<String, String> obj = new HashMap<>(16);for (int j = 0; j < columns.length; j++) {String col = columns[j];Object rowAs = row.getAs(col);String val = "";//如果是数组 //这一段不需要的可以只留下else的内容if (rowAs instanceof DenseVector) {if (((DenseVector) rowAs).values() instanceof double[]) {val = ArrayUtil.join(Arrays.stream(((DenseVector) rowAs).values()).map(rowVal -> NumberUtil.roundDown(rowVal, 3).doubleValue()).toArray(), ",");} else {val = rowAs.toString();}} else {val = rowAs.toString();}obj.put(col, val);log.info("列:{},名:{},值:{}", j, col, val);}list.add(obj);}return list;}

java spark 朴素贝叶斯算法(naive-bayes)相关推荐

  1. 复习04统计学习方法(朴素贝叶斯算法Naive Bayes)---图片版

  2. 朴素贝叶斯(naive bayes)原理小结

    朴素贝叶斯(naive bayes)原理小结 1. 朴素贝叶斯的学习 1.1 基本假设:条件独立性 1.2 朴素贝叶斯分类器 1.3 后验概率的含义 2. 参数估计 2.1 极大似然估计 2.2 贝叶 ...

  3. 朴素贝叶斯(Naive Bayes)分类和Gaussian naive Bayes

    朴素贝叶斯(Naive Bayes)   参考资料:https://www.cnblogs.com/pinard/p/6069267.html   朴素贝叶斯最关键的就是 (强制认为每种指标都是独立的 ...

  4. 【机器学习sklearn】高斯朴素贝叶斯 Gaussian naive bayes

    贝叶斯Bayes - Thomas Bayes 前言 一.贝叶斯决策论(Bayesian decision theory) 二.实例:高斯朴素贝叶斯 Gaussian Naive Bayes (Gau ...

  5. 朴素贝叶斯(Naive Bayes)(原理+Python实现)

    朴素贝叶斯(Naive Bayes)(原理+Python实现) 创作背景 算法分类 生成类算法 判别类算法 区别 知识补充 朴素贝叶斯算法 举个栗子 求解思路 求解过程(数学计算) 代码实现 自己实现 ...

  6. python机器学习-朴素贝叶斯(Naive Bayes)模型建立及评估(完整代码+实现效果)

    实现功能: python机器学习-朴素贝叶斯(Naive Bayes)模型建立及评估. 实现代码: # 导入需要的库 from warnings import simplefilter simplef ...

  7. 朴素贝叶斯(naive bayes)分类

    1. 概念回顾 1.1 条件概率公式 条件概率是指在事件B发生的条件下,事件A发生的概率.条件概率表示为P(A∣B)P(A|B)P(A∣B),读作"A在B发生的条件下发生的概率". ...

  8. 朴素贝叶斯(Naive Bayes):鸢尾花分类项目(不调库,手工推)

    一.数据来源 1.数据来源:kaggle 2.数据样式 通过对数据"萼片.花瓣的长度.宽度(sepal_length.sepal_width.petal_length.petal_width ...

  9. 【机器学习实战】第4章 朴素贝叶斯(Naive Bayes)

    第4章 基于概率论的分类方法:朴素贝叶斯 朴素贝叶斯 概述 贝叶斯分类是一类分类算法的总称,这类算法均以贝叶斯定理为基础,故统称为贝叶斯分类.本章首先介绍贝叶斯分类算法的基础--贝叶斯定理.最后,我们 ...

最新文章

  1. The Ultimate Guide To iPhone Resolutions
  2. 一,初次接触html+css需要注意的小问题
  3. 谷歌提出新型卷积网络EfficientNet:推理速度提升5.1倍,参数减少88%(附论文代码)...
  4. 如何添加交叉编译工具链(toolchain)到环境变量?(--sysroot路径)(新:ubuntu交叉编译工具链环境变量的配置)
  5. 服务器系统使用30金手指,seo专业培训拾首选金手指三:自动设置锚文本的
  6. Python 使用 itchat+pillow 实现微信消息自动回复
  7. 计算机机房t4,机房等级-T2-T3-T4-如何划分
  8. .net core EPPlus npoi_在.NET中隐藏带有只读Web路径的Web shell
  9. C++内存分配方式、内存错误及其对策
  10. Intellij IDEA 安装插件 报 ‘plugin xxxx is incompatible‘ 解决方案
  11. python闹钟界面程序_利用QT写一个极简单的图形化Python闹钟程序
  12. 易语言解析html实例,易语言总使用正则表达式实例解析
  13. vsto excel决跨表引用值不能更新的问题
  14. c语言循环接收按键,C语言中,如何用键盘输入来退出循环
  15. 【WPS】折线图数据点上添加标记(三角形、正方形、菱形等)
  16. 位运算与字母大小写转换
  17. 大陆高校毕业IEEE fellow榜单
  18. 老大难的 Java ClassLoader 再不理解就老了
  19. word段落每行首字怎么对齐_Word段落首行左右缩进及五种对齐方式
  20. 基于大数据的情报分析与服务系统架构设计

热门文章

  1. 关于海底光缆不为人知的“秘密”
  2. 基于法拉第电磁感应定律的永动机(假
  3. JR/T 0068-2020 《网上银行系统信息安全通用规范》对USBKEY提出更高要求
  4. Linxu服务器Git部署
  5. 什么是.NET框架?什么是ASP.NET?什么是.net framework?它们的关系是什么?
  6. linux raw图片处理软件,Kandao Raw+下载-Raw图片处理软件 v1.1.2.1 官方版 - 下载吧
  7. android爬取视频播放地址,Android 视频中抓取图像 - MediaMetadataRetriever
  8. java青蛙过河打字_怎么写出英语单词的游戏 类似金山打字通里的激流勇进(青蛙过河...
  9. 一文带你读懂什么是docker
  10. websocket以及nodejs联手打造的类qq群聊天室 教程 附 原代码