使用机器学习和大数据预测心脏病
发布时间:2020-12-24 20:20:06 所属栏目:大数据 来源:网络整理
导读:编者按: 现在公众号有置顶功能了,大家把微信更新到最新版本,点开“大数据实验室”公众号。点“ 置顶公众号 ”键,就可以置顶了,这样。不管我们什么时候更新,您都能容易找到。 大数据和机器学习的组合是一项革命性的技术,如果以恰当的方式使用它,它可
应用到上面每个数据行的mapper类的截取代码如下: public LabeledPoint call(String dataRow) throws Exception { ? ?//用一个很大的值替代空的数据点,来避免不必要的空数据点 ? ?String newLine = dataRow.replaceAll("?",0); word-wrap: break-word !important;">"99.0"); ? ?String[] tokens = newLine.split(","); ? ?System.out.println("tokens count : " + tokens.length); ? ?// 上一个token有被训练模型使用的实际预测值 ? ?Integer lastToken = Integer.parseInt(tokens[13]); ? ?double[] featuresDblArr = new double[13]; ? ?for(int i = 0; i < 13; i++) { ? ? ? ?featuresDblArr[i] = Double.parseDouble(tokens[i]); ? ?} ? ?// 构建特征向量 ? ?Vector featuresVector = new DenseVector(featuresDblArr); ? ?Double classValue = 0.0; ? ?if(lastToken.intValue() > 0 ) classValue = 1.0; ? ?LabeledPoint _lp = new LabeledPoint(classValue,featuresVector); ? ?return _lp; } 数据分析层 此层用于训练数据的分析,这些分析数据可以用于查询像患者的最小年龄、所有患病女性和患病男性的总数对比的情况。这些查询的参数几乎总是在疾病出现的,或虽然没有病但出现了症状的人的情况下出现。 要在训练数据上运行数据分析,首先,要加载完整的数据(被清除了空值的数据)到rdd使用的一个文本文件。 然后用parquet格式保存这个rdd文本文件到额外存储空间。 从另一个程序加载数据到这个parquet存储空间的数据帧。 点击这里你可以看到下面这段截取代码的完整源码。 String schemaString = "age sex cp trestbps chol fbs restecg thalach exang oldpeak slope ca thal num"; List<StructField> fields = new ArrayList<>();for (String fieldName : schemaString.split(" ")) { ? ?fields.add(DataTypes.createStructField(fieldName,DataTypes.StringType,true)); } StructType schema = DataTypes.createStructType(fields); JavaRDD<Row> rowRdd = rows.map(Function<String,Row>() { ? ?@Override ? ?public Row call(String record) throws Exception { ? ? ? ?String[] fields = record.split(); ? ? ? ?return RowFactory.create(fields[0],fields[1],fields[2],fields[3],fields[4],fields[5],fields[6],fields[7],fields[8],fields[9],fields[10],fields[11],fields[12],fields[13]); ? ?} }); DataFrame df = sqlCtx.createDataFrame(rowRdd,schema); df.registerTempTable("heartDisData"); DataFrame results = sqlCtx.sql("select min(age) from heartDisData"); JavaRDD<String> jrdd = results.javaRDD().map(Function<Row,String>() { ? ?@Override ? ?public String call(Row arg0) throws Exception { ? ? ? ?return arg0.toString(); ? ?} }); List<String> rstList = jrdd.collect();for (String rStr : rstList) { ? ?System.out.println(" Minimum Age : " + rStr); } (编辑:晋中站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |