需求来源
前段时间有个需求要对矩阵数据做归一化处理,之后在对数据做一致性校验,并获取数据对应的权重。
需求分析
1、了解归一化算法
2、通过数据构建矩阵信息
3、数据处理
4、获取权重
实现方案
1、简单说一下概念:
归一化是一种数据处理方式,能将数据经过处理后限制在某个固定范围内。当前的需求是将数据处理为[0,1]之间的小数。
2、计算方法
2.1、归一化算法公式:
2.2、权重算法公式:
2.3、一致性校验公式:
2.4、一致性比例计算:
注:当CR<0.1时,具有一致性;否则不具有一致性。
代码实现
代码如下,做个记录:
package com.***.***.**;
import com.alibaba.fastjson.JSON;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.math.NumberUtils;
import java.text.DecimalFormat;
import java.util.HashMap;
public class MatrixSet {
/**
* 矩阵横向编码
*/
private static final String MATRIX_X = "X";
/**
* 矩阵纵向编码
*/
private static final String MATRIX_Y = "Y";
/**
* 对应的平均随机一致性指标 RI,目前存放15阶
*/
private static final HashMap<Integer, Double> RI_MAP = new HashMap<>();
private static final DecimalFormat DF = new DecimalFormat("######0.00");
static {
RI_MAP.put(1, 0d);
RI_MAP.put(2, 0d);
RI_MAP.put(3, 0.52d);
RI_MAP.put(4, 0.89d);
RI_MAP.put(5, 1.12d);
RI_MAP.put(6, 1.26d);
RI_MAP.put(7, 1.36d);
RI_MAP.put(8, 1.41d);
RI_MAP.put(9, 1.46d);
RI_MAP.put(10, 1.49d);
RI_MAP.put(11, 1.52d);
RI_MAP.put(12, 1.54d);
RI_MAP.put(13