权重确定方法四:主成分分析法确定权重(PCA)

权重确定方法四:主成分分析法确定权重(PCA)_第1张图片

 我想在列车里和你相爱

阳光流淌

都漫过我们的灵魂尽头

然后看着人间

安静的盛开在一扇窗里

目录

1.原理介绍

2.步骤详解

2.1 确定指标在各主成分线性组合中的系数

2.2 利用主成分的方差贡献率确定综合得分模型系数

2.3 指标权重归一化

3. 案例分析

3.1 数据获取

3.2 确定指标在各主成分线性组合中的系数

3.3 利用主成分的方差贡献率确定综合得分模型系数

3.4 指标权重归一化

 4. 完整代码(Java)


1.原理介绍

        在阅读本文前建议先阅读上一篇文章 “数据降维:主成分分析法(PCA)”,因为在本文中需要用到部分数据降维中的数据。

        用主成分分析确定权重有:指标权重等于以主成分的方差贡献率为权重,对该指标在各主成分线性组合中的系数的加权平均的归一化。

        因此,要确定指标权重需要知道三点:

        A.指标在各主成分线性组合中的系数

        B.主成分的方差贡献率

        C.指标权重的归一化

        通过前文利用主成分分析对数据降维我们可以得到以下数据:

        A.前p个主成分的特征值以及对应的特征向量

        B.前p个主成分特征值各自的方差贡献率

2.步骤详解

2.1 确定指标在各主成分线性组合中的系数

假设现有一组数据,有n个指标,m条待评价对象。

用主成分分析法可以的到前p个主成分以及其对应的特征值 \alpha 和特征向量 \beta

则每个主成分中对应指标的系数为:

权重确定方法四:主成分分析法确定权重(PCA)_第2张图片 权重确定方法四:主成分分析法确定权重(PCA)_第3张图片

 每个主成分都可以用如下的线性组合表示:

2.2 利用主成分的方差贡献率确定综合得分模型系数

        记前p个主成分特征值的方差贡献率为\varphi,综合得分模型系数为\gamma\gamma对应每个指标的综合系数),则:

则,得到综合得分模型为:

2.3 指标权重归一化

3. 案例分析

3.1 数据获取

本文所用数据均为上文数据降维:主成分分析法(PCA)所计算结果:

p1 p2 p3 p4 p5 p6 p7
特征值 2045.737 1273.595 950.6142 821.2534 361.4991 260.859 175.7022
贡献率 34.43% 21.44% 16.00% 13.82% 6.08% 4.39% 2.96%
特征向量 0.414 -0.13 0.041 0.193 -0.125 0.768 0.077
-0.282 -0.483 0.07 -0.009 -0.733 -0.082 -0.328
-0.357 0.296 0.454 0.245 -0.109 0.406 -0.181
-0.264 -0.08 -0.466 0.657 0.303 0.006 -0.404
-0.539 -0.189 0.259 -0.046 0.22 -0.019 0.373
0.096 -0.012 -0.455 0.219 -0.402 -0.082 0.46
0.066 -0.571 0.27 0.396 0.187 -0.058 0.402
-0.166 0.539 0.07 0.369 -0.312 -0.131 0.355
0.468 0.059 0.467 0.358 -0.044 -0.459 -0.228

3.2 确定指标在各主成分线性组合中的系数

	//计算每个指标在不同主成分线性组合中的系数
	public double[][] coefficient(double[][] comp){
		double[][] coeff = new double[comp.length-1][comp[0].length];//每列存储每个主成分对应的系数
		var = new double[comp[0].length];
		
		for(int j=0;j

 输出:

权重确定方法四:主成分分析法确定权重(PCA)_第4张图片

3.3 利用主成分的方差贡献率确定综合得分模型系数

	public double[] var_cont(double[][] coefficient) {
		double[] cont = new double[var.length];//每个特征值对应的贡献率
		double[] var_cont = new double[coefficient.length];
		double total = 0;
		double sum = 0;
		System.out.println("请按以下特征值顺序依次输入对应的贡献率!");
		for(int i=0;i

输出:

3.4 指标权重归一化

        在此模块做了一点变动,由于在计算过程中存在负数,导致最后求得的权重也存在负数,所以在此我们找出负数中最小的值,让每一个数都加上该值得绝对值,在进行运算。

	/*归一化权重
	 * varcont:综合得分模型系数
	 */
	
	public double[] unifor(double[] varcont) {
		double sum=0;
		double min=varcont[0];
		for(int i=0;i= 0) {
			min = 0;
		}
		for(int i=0;i

 输出:

权重确定方法四:主成分分析法确定权重(PCA)_第5张图片

 4. 完整代码(Java)

package pca_weight;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Scanner;

import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;
import jxl.write.WriteException;

/*
 * 输入为成分矩阵,即前m个特征值及其对应的特征向量组成的矩阵
 * 其中第一行为特征值,每列除第一行外其余为该特征值对应的特征向量
 */

public class PCA_weight {
	int rows,cols;
	double[] var;//存储特征值
	
	Scanner input = new Scanner(System.in);
	
	//输出一维矩阵
	public void matrixoutput1(double[] x) {
		for(int i=0;i= 0) {
			min = 0;
		}
		for(int i=0;i

你可能感兴趣的:(数学建模,java,美国大学生数学建模竞赛,数学建模,数据分析)