加入收藏 | 设为首页 | 会员中心 | 我要投稿 源码门户网 (https://www.92codes.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

使用机器学习和大数据预测心脏病

发布时间:2020-12-24 13:48:54 所属栏目:大数据 来源:网络整理
导读:副标题#e# 编者按: 现在公众号有置顶功能了,大家把微信更新到最新版本,点开“大数据实验室”公众号。点“ 置顶公众号”键,就可以置顶了,这样。不管我们什么时候更新,您都能容易找到。 大数据和机器学习的组合是一项革命性的技术,如果以恰当的方式使

咨询电话/微信:13061694649


  • Apache Spark: Apache Spark是大数据栈的其中一个工具集,它是老技术map reduce的老大哥。相比于mapreduce,它在性能上要快得多,而且也更容易撰写代码。很多开发者常用的?RDD(弹性分布式数据集)是整个Apache Spark 块的缺陷所在,但在幕后,它很好的处理了所有的分布式计算工作。Spark配备了其他像Spark streaming、 Spark sql(在这篇文章中我用它来分析数据集)、spark mllib (我用它来应用机器学习片)这样很强大的组件包。从Spark官网能获取到的Spark的文档都非常出色,你可以在这里找到它们。

  • Spark SQL: Spark的类SQL?API,支持数据帧 (和Python的Pandas library几乎相同,但它运行在一个完整的分布式数据集,因此并不所有功能类似)。

  • Parquet:?Parquet是列式文件格式。原始数据文件用parquet格式被解析和存储。这大大加快了聚合查询的速度。一个列式存储格式在只获取需要的列的数据时大有帮助,也因此大大减少磁盘I / O消耗。

  • Spark MLLib: Spark的机器学习库。该库中的算法都是被优化过,能够分布式数据集上运行的算法。这是这个库和像SciKit那样在单进程上运行的其他流行的库的主要区别。

  • HDFS?: 用于存储原始文件,存储生成的模型并存储结果。


设计


模型生成和存储层

使用机器学习和大数据预测心脏病

如上图所示,原始文件要么被HDFS获取,要么被程序导入到HDFS。该文件或数据也可以通过Kafka的topics接收和使用spark streaming读取。对于本文和在GitHub上的示例代码的例子,我假设原文件驻留在HDFS。


这些文件通过用Java(也可以是python或scala )编写的Spark程序读取。

这些文件包含必须被转换为模型所需要的格式的数据。该模型需要的全是数字。?一些为空或没有值的数据点会被一个大的值,如“99”,取代。这种取代没有特定的意义,它只帮助我们通过数据的非空校验。同样的,最后的“num”参数基于用户是否有心脏病转换为数字“1”或“0”。因此在最后的“num”字段中,大于“1”的任何值会被转换为“1”,这意味着心脏病的存在。


数据文件现在被读到RDD去了。

对于这个数据集,我使用了朴素贝叶斯算法(这个算法在垃圾邮件过滤器中被使用)。利用机器学习库Spark (mllib),算法现在在被数据集中的数据训练。请注意:决策树算法在这个例子中可能也能给出很好的结果。

算法训练后,模型被存储到了hdfs额外的存储空间,用于在将来对测试数据进行预测。

下面是上面描述的行为的一段代码的截取:


SparkConfAndCtxBuilder ctxBuilder = new SparkConfAndCtxBuilder();
JavaSparkContext jctx = ctxBuilder.loadSimpleSparkContext("Heart Disease Detection App","local");//读取数据到RDD,数据是逐行分割的字符串格式JavaRDD<String> dsLines = jctx.textFile(trainDataLoc); ? ? ? ?// 使用适配器类解析每个文本行
 ? ? ? ?// 现在数据已经被转换成模型需要的格式了JavaRDD<LabeledPoint> _modelTrainData = dsLines.map(new DataToModelAdapterMapper()); ? ?//我们需要的模型在被数据训练
 ? ? ? ?//你可以替代下面的代码,来尝试使用决策树模型,并比较返回数据的精度NaiveBayesModel _model = NaiveBayes.train(_modelTrainData.rdd());
_model.save(jctx.sc(),modelStorageLoc);

ctxBuilder.closeCtx();


(编辑:源码门户网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读