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

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

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



应用到上面每个数据行的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);
}



(编辑:源码门户网)

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

热点阅读