java spark 主成分分析算法(pca)
配置
配置请看我的其他文章 点击跳转
spark官方文档
点击跳转官方文档
数据
训练数据
代码
PCA算法的应用场景不是太明确,没做太多验证
实体类
用了swagger和lombok 不需要的可以删掉
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;import javax.validation.constraints.Min;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;/*** 主成分分析算法** @author teler*/@Data
@ApiModel("主成分分析算法")
public class PcaEntity {/*** 数据集路径*/@ApiModelProperty("数据源路径")@NotEmpty(message = "数据源路径不能为空")private String dataFilePath;/*** 迭代次数*/@ApiModelProperty("维度")@NotNull(message = "k不能为空")@Min(value = 1, message = "k最小值为1")private Integer k;
}
算法实现
里面有些方法是为了保留小数 不需要的自己改
@Resource
private transient SparkSession sparkSession;
@Overridepublic Map<String, Object> pca(PcaEntity record) {System.out.println("================== 主成分分析算法开始===========");Map<String, Object> map = new HashMap<>(ConstantIntEnum.HASH_MAP_INITIAL_CAPACITY.getCode());Dataset<Row> source = getDataSetByHdfs(record.getDataFilePath());//训练数据;map.put("training", toList(source));//设置算法参数PCA pca = new PCA().setInputCol("features").setOutputCol("pcaFeatures").setK(record.getK());//训练模型PCAModel pcaModel = pca.fit(source);pcaModel.pc();//转化数据Dataset<Row> predictions = pcaModel.transform(source).select("pcaFeatures");predictions.show();map.put("data", toList(predictions));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 主成分分析算法(pca)相关推荐
- java spark k-means算法
配置 配置请看我的其他文章 点击跳转 spark官方文档 点击跳转官方文档 数据 训练数据 实体类 用了swagger和lombok 不需要的可以删掉 import io.swagger.annota ...
- 机器学习 - 主成分分析法 (PCA)
文章目录 1. 主成分分析问题 2. 主成分分析算法 3. 重建的压缩表示 4. 选择主成分的数量 1. 主成分分析问题 主成分分析(PCA)是最常见的降维算法. 在PCA中,要做的是找到一个方向向量 ...
- 主成分分析(PCA)算法,K-L变换 角度
主成分分析(PCA)是多元统计分析中用来分析数据的一种方法,它是用一种较少数 量的特征对样本进行描述以达到降低特征空间维数的方法,它的本质实际上是K-L变换.PCA方法最著名的应用应该是在人脸识别中特 ...
- 机器学习降维算法一:PCA(主成分分析算法)
引言: 机器学习领域中所谓的降维就是指采用某种映射方法,将原高维空间中的数据点映射到低维度的空间中.降维的本质是学习一个映射函数 f : x->y,其中x是原始数据点的表达,目前最多使用向量表达 ...
- 【进阶版】 机器学习之主成分分析(PCA)、MDS算法、核化线性降维 (16)
目录 欢迎订阅本专栏,持续更新中~ 本专栏前期文章介绍! 机器学习配套资源推送 进阶版机器学习文章更新~ 点击下方下载高清版学习知识图册 降维与度量学习 K近邻学习 MDS算法 主成分分析(PCA) ...
- PCA主成分分析算法专题【Python机器学习系列(十五)】
PCA主成分分析算法专题[Python机器学习系列(十五)] 文章目录 1. PCA简介 2. python 实现 鸢尾花数据集PCA降维 3. sklearn库实现 鸢尾花数据集PCA降维案例 ...
- 主成分分析(PCA)特征选择算法详解
1. 问题 真实的训练数据总是存在各种各样的问题: 1. 比如拿到一个汽车的样本,里面既有以"千米/每小时"度量的最大速度特征,也有"英里/小时"的最大速度特征 ...
- 主成分分析(PCA算法)
这两天一直在学习主成分分析算法(PCA),通过查阅相关的资料,对PCA算法的原理和实施过程有了一定程度的理解,话不多说,直接步入正题. 一.PCA算法原理 官方定义:PCA是一种常用的数学分析的方法. ...
- 数据降维--------主成分分析(PCA)算法原理和实现学习笔记
1 主成分分析背景 '''PCA计算步骤(思想是把数据投影到方向向量使数据集的特征向量到方向向量的垂线长度最短) 1.去平均 2.计算协方差矩阵 3.计算协方差矩阵的特征向量和特征值 4.将特征值从小 ...
最新文章
- intellij gradle java_Java 使用 IntelliJ IDEA Gradle创建新项目报错问题解决方法
- Zabbix使用JMX监控tomcat
- ROS知识:ros和硬件的连接点---ROS-Control
- 用Node-Inspector调试NodeJs程序
- github博客安装jekyll的RUBY更换源
- RecyclerView设置空视图
- redis 学习笔记(6)-cluster集群搭建
- 架构师重构代码的12条军规
- jsp include参数传送接收与应用
- HDFS原理(超详解)
- iapp如何导入本地源码,iapp导入源码使用教程
- 【JMedia】诺贝尔奖得主:东亚教育浪费了太多生命
- Encountered unexpected token:XXXXX
- 正弦余弦怎么用计算机计算公式,关于正弦函数和余弦函数的计算公式
- Python项目实战:抓取全网王者荣耀皮肤,收藏最好看的
- sap委外退料流程图_生产部领退料流程图
- Eclipse中出现-访问限制由于对必需的库XX具有一定限制,因此无法访问类型
- 电子合同管理有这些细节更需要注意!
- 相机标定(基础)20221204
- Jquery监听radio的变化以及获取radio选中值