我想在列车里和你相爱

阳光流淌

都漫过我们的灵魂尽头

然后看着人间

安静的盛开在一扇窗里

目录

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个主成分以及其对应的特征值  和特征向量 

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

 

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

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

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

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

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<coeff[0].length ;j++) {var[j] = comp[0][j];for(int i=1;i<coeff.length ;i++) {coeff[i-1][j] = comp[i][j]/Math.sqrt(comp[0][j]);}}return coeff;}

输出:

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<var.length ;i++) {System.out.print(var[i]+"     ");}System.out.println();for(int i=0;i<var.length ;i++) {cont[i] = input.nextDouble();}for(int i=0;i<coefficient.length ;i++) {for(int j=0;j<coefficient[0].length ;j++) {sum += coefficient[i][j]*cont[j];total += cont[j];}var_cont[i] = sum/total;}return var_cont;}

输出:

3.4 指标权重归一化

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

 /*归一化权重* varcont:综合得分模型系数*/public double[] unifor(double[] varcont) {double sum=0;double min=varcont[0];for(int i=0;i<varcont.length ;i++) {if(varcont[i] < min) {min =varcont[i];}}//若果没有负数则不做变动if(min >= 0) {min = 0;}for(int i=0;i<varcont.length ;i++) {sum += varcont[i]+Math.abs(min);}for(int i=0;i<varcont.length ;i++) {varcont[i] = (varcont[i]+Math.abs(min))/sum;}return varcont;}

输出:

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<x.length;i++) {System.out.print(String.format("%.3f\t", x[i]));}System.out.println();}//输出二维矩阵public void matrixoutput(double[][] x) {for(int i=0;i<x.length;i++) {for(int j=0;j<x[0].length;j++) {System.out.print(String.format("%.3f\t", x[i][j]));}System.out.println();}}//读取数据public double[][] read(String filepath) throws IOException, BiffException,WriteException {//创建输入流InputStream stream = new FileInputStream(filepath);//获取Excel文件对象Workbook  rwb = Workbook.getWorkbook(stream);//获取文件的指定工作表 默认的第一个Sheet sheet = rwb.getSheet("Sheet1");rows = sheet.getRows();cols = sheet.getColumns();double[][] componentMartix = new double[rows][cols];//成分矩阵//row为行for(int i=0;i<sheet.getRows();i++) {for(int j=0;j<sheet.getColumns();j++) {String[] str = new String[sheet.getColumns()];Cell cell = null;cell = sheet.getCell(j,i);    str[j] = cell.getContents();componentMartix[i][j] = Double.valueOf(str[j]);}}return componentMartix;//返回原始矩阵}//计算每个指标在不同主成分线性组合中的系数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<coeff[0].length ;j++) {var[j] = comp[0][j];for(int i=1;i<coeff.length ;i++) {coeff[i-1][j] = comp[i][j]/Math.sqrt(comp[0][j]);}}return coeff;}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<var.length ;i++) {System.out.print(var[i]+"     ");}System.out.println();for(int i=0;i<var.length ;i++) {cont[i] = input.nextDouble();}for(int i=0;i<coefficient.length ;i++) {for(int j=0;j<coefficient[0].length ;j++) {sum += coefficient[i][j]*cont[j];total += cont[j];}var_cont[i] = sum/total;}return var_cont;}/*归一化权重* varcont:综合得分模型系数*/public double[] unifor(double[] varcont) {double sum=0;double min=varcont[0];for(int i=0;i<varcont.length ;i++) {if(varcont[i] < min) {min =varcont[i];}}//若果没有负数则不做变动if(min >= 0) {min = 0;}for(int i=0;i<varcont.length ;i++) {sum += varcont[i]+Math.abs(min);}for(int i=0;i<varcont.length ;i++) {varcont[i] = (varcont[i]+Math.abs(min))/sum;}return varcont;}public static void main(String[] args) throws IOException, BiffException, WriteException {PCA_weight pw = new PCA_weight();System.out.println("原始数据为:");double[][] comp = pw.read("pca_weight.xls");pw.matrixoutput(comp);System.out.println("指标在不同主成分线性组合中的系数:");double[][] coefficient = pw.coefficient(comp);pw.matrixoutput(coefficient);double[] var_cont = pw.var_cont(coefficient);System.out.println("综合得分模型系数:");pw.matrixoutput1(var_cont);System.out.println("每个指标的权重依次为:");for(int i=0;i<var_cont.length;i++) {System.out.println(pw.unifor(var_cont)[i]);}}}

权重确定方法四:主成分分析法确定权重(PCA)相关推荐

  1. 权重确定方法之主成分分析法

    转载自:http://www.itongji.cn/article/042620032013.html 什么是权重呢?所谓权重,是指某指标在整体评价中的相对重要程度.权重越大则该指标的重要性越高,对整 ...

  2. Python:多指标权重确定方法—熵值法

    Python:多指标权重确定方法-熵值法 一.需准备的资料 1.一份excel的数据表格,列为指标(评价指标),行为城市(研究对象,也可以是年份,) city GDP:亿元x.1 人口(万)x.2 城 ...

  3. 熵值法计算权重有异常值_指标权重确定方法 1-熵值法

    在信息论中,熵是对不确定性或随机性的一种度量,不确定性越大,熵值就越大,不确定性越小,熵值就越小.不确定性越大,表明随机性越大,数据越离散,则包含的信息就越大,在确定权重的时候往往就越小. 熵值法确定 ...

  4. excel熵值法计算权重_指标权重确定方法 1-熵值法

    在信息论中,熵是对不确定性或随机性的一种度量,不确定性越大,熵值就越大,不确定性越小,熵值就越小.不确定性越大,表明随机性越大,数据越离散,则包含的信息就越大,在确定权重的时候往往就越小. 熵值法确定 ...

  5. python 求离差_指标权重确定方法之标准离差法(均方差法)

    标准差(Standard Deviation) ,也称均方差(mean square error),是各数据偏离平均数的距离的平均数,它是离均差平方和平均后的方根,用σ表示.标准差是方差的算术平方根. ...

  6. 数学建模方法——SPSS主成分分析法

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家,(ノ´▽`)ノ♪->点击这里->一个宝藏级人工智能教程网站. 文章目录 Ⅰ.主成分分析: 主成分与原始变量 ...

  7. 【地理建模】现代地理学中的数学方法:主成分分析法案例详解

  8. excel熵值法计算权重_SPSS主成分分析 | 权重计算amp;极差法标准化超详细教程!(下)...

    权重计算 1. 上节回顾 爱数据-橙子:SPSS主成分分析 | 指标权重值计算真的不难!(上)​zhuanlan.zhihu.com 在昨日中(点击复习),我们利用SPSS中的数据标准化方法及主成分分 ...

  9. 机器学习:(PCA)主成分分析法及应用(spss)

    目录 1.1.主成分分析法简介 1.2.主成分分析法的意义 1.3.主成分分析法的思想 1.4.主成分分析法的步骤 2.1.导入数据 2.2.生成图表 3.1.PCA算法梯度求解 3.1.1. 梯度上 ...

  10. 数据降维1:主成分分析法思想及原理(配图版)

    0x01 什么是主成分分析法 PCA(Principal Component Analysis),即主成分分析方法,是一种使用最广泛的数据降维算法(非监督的机器学习方法). 其最主要的用途在于&quo ...

最新文章

  1. ValueError: invalid literal for int() with base 10
  2. AOP 中必须明白的概念-目标对象(Target Object)
  3. Spring的@Configuration配置类-Full和Lite模式
  4. React之初始化state
  5. 【转】使用EBNF相对于BNF表示的优越性
  6. PHP 的 Git 服务器被黑客入侵,源码库将永久迁移至 GitHub!
  7. LeetCode 590. N叉树的后序遍历(N-ary Tree Postorder Traversal)
  8. python 截图 minicap_【Python】使用minicap对安卓手机快速截屏
  9. java 29期淘淘商城_JavaEE大型分布式电商项目 淘淘商城 29期
  10. CuteFTP下载大文件时报错
  11. SMT阻容件封装尺寸
  12. 用Python摘抄《大道争锋》中的诗句
  13. Tomcat传url地址中的特殊字符无法识别问题
  14. 手机浏览器HTML5测试:三星Tizen居冠、Mango垫底
  15. 用osworkflow写一个请假例子
  16. python 滤波_[开发技巧]·Python极简实现滑动平均滤波(基于Numpy.convolve)
  17. 学生时代应如何做好程序员
  18. 数字化时代,聚合支付分账系统如何进行账务管理?
  19. 基于c++和 opengl 鞋子定制系统
  20. C语言16x16点阵显示汉字程序,单片机+16x16点阵,汉字滚动显示程序(带仿真)

热门文章

  1. 如何利用Python程序读取Excel创建折线图
  2. 常用媒体查询以及手机横竖屏监听
  3. python,音乐,视频生成二维码
  4. 正则表达式匹配非负数字
  5. 北京邮电大学计算机院专业录取分数线,2017年北京邮电大学计算机科学与技术专业在北京录取分数线...
  6. 人工智能测试-爬百度成语-测成语接龙
  7. python除法取商_python 除法
  8. kali制作钓鱼网站
  9. Linux清理磁盘空间常用命令
  10. ubuntu磁盘空间清理