为什么要对数据进行降维?
在机器学习或者数据挖掘中,我们往往会get到大量的数据源,这些数据源往往有很多维度来表示它的属性,但是我们在实际处理中只需要其中的几个主要的属性,而其他的属性或被当成噪声处理掉。比如,13*11的源数据经过将为后变成了13*4的优化数据,那么,中间就减去了7个不必要的属性,选取了4个主要属性成分,简化了计算。
常用的数据降维方法有:主成分分析、因子分析、独立成分分析。本文仅介绍主成分分析方法。
主成分分析(PCA,Principal Component Analysis),其中的数学原理可参考360图书馆http://www.360doc.com/content/13/1124/02/9482_331688889.shtml
优点:
降低数据的复杂性,识别最重要的多个特征。
缺点:
不一定需要,且可能损失有用的信息。
适用类型:
数值型数据。
木羊根据自己的学习与理解总结出的PCA步骤:
- 获取n行m列原始数据,写成n*m的矩阵形式;
- 数据中心化。即把每个属性的均值处理设为0(下面木羊将给出自己编写的源代码,木羊的数据用列代表属性,在该步骤中,就把每列的均值都设置为0)。
- 根据中心化后的矩阵求协方差矩阵。协方差有三种值,0表示属性之间相互独立,没有影响;正值表示属性是正相关的关系,若属性A和属性B是正相关关系,则A增加B也增加,A减小B也减小;负值表示属性是负相关的关系,若属性C和属性D是负相关关系,则C增加D减小,C减小D增加。所以,协方差矩阵也可以理解为相关系数矩阵,表示属性间的相关程度。
- 根据协方差矩阵求特征值矩阵。特征值矩阵只有对角线上的元素有值,上三角和下三角元素都为0.
- 根据特征值矩阵求对应的特征向量。
- 对特征值矩阵进行排序,并设定一个阈值,若前i个特征矩阵的和>=设定的阈值,则就有i个主成分,取其对应的特征向量,定为主成分向量矩阵。
- 原始矩阵乘以转置后的主成分向量即得降维后的矩阵。比如,原始数据是150*4的矩阵,在步骤6中取得了2个主成分,那么主成分矩阵就是2*4的矩阵。150*4的矩阵乘以4*2的矩阵,即得150*2的矩阵,体现了降维效果。(选取这个属性较少的数据集是为了方便初学者的理解,在实际工程中,我们的属性值往往不止4个,但降维方法都一样的。)
- DBConnection.java和SelectData.java 实现了从数据库中读取数据存到二维数组中,详细操作可参照上一篇博文http://blog.csdn.net/u013159040/article/details/45605637。
- PCA.java是具体实现的PCA降维算法。其中用到的第三方的矩阵包jama.jar,下载链接及API参考文档请移步http://download.csdn.net/detail/u013159040/8691187。用到的数据结构有:二维数组、HashMap、TreeMap等,HashMap的key存特征值,value存对应的特征向量,方便索引。TreeMap是排好序的map,方便找主成分。详情请参照木羊的工程代码http://download.csdn.net/detail/u013159040/8691503,如有疑问,欢迎留言互相探讨。下面给出该程序的运行结果:
-------------------------------------------- 原始数据: 150行,4列 5.1 3.5 1.4 0.2 4.9 3.0 1.4 0.2 4.7 3.2 1.3 0.2 4.6 3.1 1.5 0.2 5.0 3.6 1.4 0.2 5.4 3.9 1.7 0.4 4.6 3.4 1.4 0.3 5.0 3.4 1.5 0.2 4.4 2.9 1.4 0.2 4.9 3.1 1.5 0.1 5.4 3.7 1.5 0.2 4.8 3.4 1.6 0.2 4.8 3.0 1.4 0.1 4.3 3.0 1.1 0.1 5.8 4.0 1.2 0.2 5.7 4.4 1.5 0.4 5.4 3.9 1.3 0.4 5.1 3.5 1.4 0.3 5.7 3.8 1.7 0.3 5.1 3.8 1.5 0.3 5.4 3.4 1.7 0.2 5.1 3.7 1.5 0.4 4.6 3.6 1.0 0.2 5.1 3.3 1.7 0.5 4.8 3.4 1.9 0.2 5.0 3.0 1.6 0.2 5.0 3.4 1.6 0.4 5.2 3.5 1.5 0.2 5.2 3.4 1.4 0.2 4.7 3.2 1.6 0.2 4.8 3.1 1.6 0.2 5.4 3.4 1.5 0.4 5.2 4.1 1.5 0.1 5.5 4.2 1.4 0.2 4.9 3.1 1.5 0.1 5.0 3.2 1.2 0.2 5.5 3.5 1.3 0.2 4.9 3.1 1.5 0.1 4.4 3.0 1.3 0.2 5.1 3.4 1.5 0.2 5.0 3.5 1.3 0.3 4.5 2.3 1.3 0.3 4.4 3.2 1.3 0.2 5.0 3.5 1.6 0.6 5.1 3.8 1.9 0.4 4.8 3.0 1.4 0.3 5.1 3.8 1.6 0.2 4.6 3.2 1.4 0.2 5.3 3.7 1.5 0.2 5.0 3.3 1.4 0.2 7.0 3.2 4.7 1.4 6.4 3.2 4.5 1.5 6.9 3.1 4.9 1.5 5.5 2.3 4.0 1.3 6.5 2.8 4.6 1.5 5.7 2.8 4.5 1.3 6.3 3.3 4.7 1.6 4.9 2.4 3.3 1.0 6.6 2.9 4.6 1.3 5.2 2.7 3.9 1.4 5.0 2.0 3.5 1.0 5.9 3.0 4.2 1.5 6.0 2.2 4.0 1.0 6.1 2.9 4.7 1.4 5.6 2.9 3.6 1.3 6.7 3.1 4.4 1.4 5.6 3.0 4.5 1.5 5.8 2.7 4.1 1.0 6.2 2.2 4.5 1.5 5.6 2.5 3.9 1.1 5.9 3.2 4.8 1.8 6.1 2.8 4.0 1.3 6.3 2.5 4.9 1.5 6.1 2.8 4.7 1.2 6.4 2.9 4.3 1.3 6.6 3.0 4.4 1.4 6.8 2.8 4.8 1.4 6.7 3.0 5.0 1.7 6.0 2.9 4.5 1.5 5.7 2.6 3.5 1.0 5.5 2.4 3.8 1.1 5.5 2.4 3.7 1.0 5.8 2.7 3.9 1.2 6.0 2.7 5.1 1.6 5.4 3.0 4.5 1.5 6.0 3.4 4.5 1.6 6.7 3.1 4.7 1.5 6.3 2.3 4.4 1.3 5.6 3.0 4.1 1.3 5.5 2.5 4.0 1.3 5.5 2.6 4.4 1.2 6.1 3.0 4.6 1.4 5.8 2.6 4.0 1.2 5.0 2.3 3.3 1.0 5.6 2.7 4.2 1.3 5.7 3.0 4.2 1.2 5.7 2.9 4.2 1.3 6.2 2.9 4.3 1.3 5.1 2.5 3.0 1.1 5.7 2.8 4.1 1.3 6.3 3.3 6.0 2.5 5.8 2.7 5.1 1.9 7.1 3.0 5.9 2.1 6.3 2.9 5.6 1.8 6.5 3.0 5.8 2.2 7.6 3.0 6.6 2.1 4.9 2.5 4.5 1.7 7.3 2.9 6.3 1.8 6.7 2.5 5.8 1.8 7.2 3.6 6.1 2.5 6.5 3.2 5.1 2.0 6.4 2.7 5.3 1.9 6.8 3.0 5.5 2.1 5.7 2.5 5.0 2.0 5.8 2.8 5.1 2.4 6.4 3.2 5.3 2.3 6.5 3.0 5.5 1.8 7.7 3.8 6.7 2.2 7.7 2.6 6.9 2.3 6.0 2.2 5.0 1.5 6.9 3.2 5.7 2.3 5.6 2.8 4.9 2.0 7.7 2.8 6.7 2.0 6.3 2.7 4.9 1.8 6.7 3.3 5.7 2.1 7.2 3.2 6.0 1.8 6.2 2.8 4.8 1.8 6.1 3.0 4.9 1.8 6.4 2.8 5.6 2.1 7.2 3.0 5.8 1.6 7.4 2.8 6.1 1.9 7.9 3.8 6.4 2.0 6.4 2.8 5.6 2.2 6.3 2.8 5.1 1.5 6.1 2.6 5.6 1.4 7.7 3.0 6.1 2.3 6.3 3.4 5.6 2.4 6.4 3.1 5.5 1.8 6.0 3.0 4.8 1.8 6.9 3.1 5.4 2.1 6.7 3.1 5.6 2.4 6.9 3.1 5.1 2.3 5.8 2.7 5.1 1.9 6.8 3.2 5.9 2.3 6.7 3.3 5.7 2.5 6.7 3.0 5.2 2.3 6.3 2.5 5.0 1.9 6.5 3.0 5.2 2.0 6.2 3.4 5.4 2.3 5.9 3.0 5.1 1.8 -------------------------------------------- 均值0化后的数据: 150行,4列 -0.74333334 0.446 -2.3586667 -0.99866664 -0.9433333 -0.054 -2.3586667 -0.99866664 -1.1433333 0.146 -2.4586666 -0.99866664 -1.2433333 0.046 -2.2586668 -0.99866664 -0.8433333 0.546 -2.3586667 -0.99866664 -0.44333333 0.846 -2.0586667 -0.79866666 -1.2433333 0.346 -2.3586667 -0.8986667 -0.8433333 0.346 -2.2586668 -0.99866664 -1.4433334 -0.154 -2.3586667 -0.99866664 -0.9433333 0.046 -2.2586668 -1.0986667 -0.44333333 0.646 -2.2586668 -0.99866664 -1.0433333 0.346 -2.1586666 -0.99866664 -1.0433333 -0.054 -2.3586667 -1.0986667 -1.5433333 -0.054 -2.6586666 -1.0986667 -0.043333333 0.946 -2.5586667 -0.99866664 -0.14333333 1.346 -2.2586668 -0.79866666 -0.44333333 0.846 -2.4586666 -0.79866666 -0.74333334 0.446 -2.3586667 -0.8986667 -0.14333333 0.746 -2.0586667 -0.8986667 -0.74333334 0.746 -2.2586668 -0.8986667 -0.44333333 0.346 -2.0586667 -0.99866664 -0.74333334 0.646 -2.2586668 -0.79866666 -1.2433333 0.546 -2.7586668 -0.99866664 -0.74333334 0.246 -2.0586667 -0.6986667 -1.0433333 0.346 -1.8586667 -0.99866664 -0.8433333 -0.054 -2.1586666 -0.99866664 -0.8433333 0.346 -2.1586666 -0.79866666 -0.6433333 0.446 -2.2586668 -0.99866664 -0.6433333 0.346 -2.3586667 -0.99866664 -1.1433333 0.146 -2.1586666 -0.99866664 -1.0433333 0.046 -2.1586666 -0.99866664 -0.44333333 0.346 -2.2586668 -0.79866666 -0.6433333 1.046 -2.2586668 -1.0986667 -0.34333333 1.146 -2.3586667 -0.99866664 -0.9433333 0.046 -2.2586668 -1.0986667 -0.8433333 0.146 -2.5586667 -0.99866664 -0.34333333 0.446 -2.4586666 -0.99866664 -0.9433333 0.046 -2.2586668 -1.0986667 -1.4433334 -0.054 -2.4586666 -0.99866664 -0.74333334 0.346 -2.2586668 -0.99866664 -0.8433333 0.446 -2.4586666 -0.8986667 -1.3433334 -0.754 -2.4586666 -0.8986667 -1.4433334 0.146 -2.4586666 -0.99866664 -0.8433333 0.446 -2.1586666 -0.59866667 -0.74333334 0.746 -1.8586667 -0.79866666 -1.0433333 -0.054 -2.3586667 -0.8986667 -0.74333334 0.746 -2.1586666 -0.99866664 -1.2433333 0.146 -2.3586667 -0.99866664 -0.54333335 0.646 -2.2586668 -0.99866664 -0.8433333 0.246 -2.3586667 -0.99866664 1.1566666 0.146 0.94133335 0.20133333 0.5566667 0.146 0.7413333 0.30133334 1.0566666 0.046 1.1413333 0.30133334 -0.34333333 -0.754 0.24133334 0.101333335 0.6566667 -0.254 0.8413333 0.30133334 -0.14333333 -0.254 0.7413333 0.101333335 0.45666668 0.246 0.94133335 0.40133333 -0.9433333 -0.654 -0.45866665 -0.19866666 0.75666666 -0.154 0.8413333 0.101333335 -0.6433333 -0.354 0.14133333 0.20133333 -0.8433333 -1.054 -0.25866666 -0.19866666 0.05666667 -0.054 0.44133332 0.30133334 0.15666667 -0.854 0.24133334 -0.19866666 0.25666666 -0.154 0.94133335 0.20133333 -0.24333334 -0.154 -0.15866667 0.101333335 0.8566667 0.046 0.64133334 0.20133333 -0.24333334 -0.054 0.7413333 0.30133334 -0.043333333 -0.354 0.34133333 -0.19866666 0.35666665 -0.854 0.7413333 0.30133334 -0.24333334 -0.554 0.14133333 -0.09866667 0.05666667 0.146 1.0413333 0.6013333 0.25666666 -0.254 0.24133334 0.101333335 0.45666668 -0.554 1.1413333 0.30133334 0.25666666 -0.254 0.94133335 0.0013333333 0.5566667 -0.154 0.5413333 0.101333335 0.75666666 -0.054 0.64133334 0.20133333 0.95666665 -0.254 1.0413333 0.20133333 0.8566667 -0.054 1.2413334 0.50133336 0.15666667 -0.154 0.7413333 0.30133334 -0.14333333 -0.454 -0.25866666 -0.19866666 -0.34333333 -0.654 0.041333333 -0.09866667 -0.34333333 -0.654 -0.058666665 -0.19866666 -0.043333333 -0.354 0.14133333 0.0013333333 0.15666667 -0.354 1.3413334 0.40133333 -0.44333333 -0.054 0.7413333 0.30133334 0.15666667 0.346 0.7413333 0.40133333 0.8566667 0.046 0.94133335 0.30133334 0.45666668 -0.754 0.64133334 0.101333335 -0.24333334 -0.054 0.34133333 0.101333335 -0.34333333 -0.554 0.24133334 0.101333335 -0.34333333 -0.454 0.64133334 0.0013333333 0.25666666 -0.054 0.8413333 0.20133333 -0.043333333 -0.454 0.24133334 0.0013333333 -0.8433333 -0.754 -0.45866665 -0.19866666 -0.24333334 -0.354 0.44133332 0.101333335 -0.14333333 -0.054 0.44133332 0.0013333333 -0.14333333 -0.154 0.44133332 0.101333335 0.35666665 -0.154 0.5413333 0.101333335 -0.74333334 -0.554 -0.7586667 -0.09866667 -0.14333333 -0.254 0.34133333 0.101333335 0.45666668 0.246 2.2413332 1.3013333 -0.043333333 -0.354 1.3413334 0.70133334 1.2566667 -0.054 2.1413333 0.90133333 0.45666668 -0.154 1.8413334 0.6013333 0.6566667 -0.054 2.0413334 1.0013334 1.7566667 -0.054 2.8413334 0.90133333 -0.9433333 -0.554 0.7413333 0.50133336 1.4566667 -0.154 2.5413334 0.6013333 0.8566667 -0.554 2.0413334 0.6013333 1.3566667 0.546 2.3413334 1.3013333 0.6566667 0.146 1.3413334 0.8013333 0.5566667 -0.354 1.5413333 0.70133334 0.95666665 -0.054 1.7413334 0.90133333 -0.14333333 -0.554 1.2413334 0.8013333 -0.043333333 -0.254 1.3413334 1.2013333 0.5566667 0.146 1.5413333 1.1013334 0.6566667 -0.054 1.7413334 0.6013333 1.8566667 0.746 2.9413333 1.0013334 1.8566667 -0.454 3.1413333 1.1013334 0.15666667 -0.854 1.2413334 0.30133334 1.0566666 0.146 1.9413333 1.1013334 -0.24333334 -0.254 1.1413333 0.8013333 1.8566667 -0.254 2.9413333 0.8013333 0.45666668 -0.354 1.1413333 0.6013333 0.8566667 0.246 1.9413333 0.90133333 1.3566667 0.146 2.2413332 0.6013333 0.35666665 -0.254 1.0413333 0.6013333 0.25666666 -0.054 1.1413333 0.6013333 0.5566667 -0.254 1.8413334 0.90133333 1.3566667 -0.054 2.0413334 0.40133333 1.5566666 -0.254 2.3413334 0.70133334 2.0566666 0.746 2.6413333 0.8013333 0.5566667 -0.254 1.8413334 1.0013334 0.45666668 -0.254 1.3413334 0.30133334 0.25666666 -0.454 1.8413334 0.20133333 1.8566667 -0.054 2.3413334 1.1013334 0.45666668 0.346 1.8413334 1.2013333 0.5566667 0.046 1.7413334 0.6013333 0.15666667 -0.054 1.0413333 0.6013333 1.0566666 0.046 1.6413333 0.90133333 0.8566667 0.046 1.8413334 1.2013333 1.0566666 0.046 1.3413334 1.1013334 -0.043333333 -0.354 1.3413334 0.70133334 0.95666665 0.146 2.1413333 1.1013334 0.8566667 0.246 1.9413333 1.3013333 0.8566667 -0.054 1.4413333 1.1013334 0.45666668 -0.554 1.2413334 0.70133334 0.6566667 -0.054 1.4413333 0.8013333 0.35666665 0.346 1.6413333 1.1013334 0.05666667 -0.054 1.3413334 0.6013333 --------------------------------------------- 协方差矩阵: 0.6856935 -0.039268456 1.2736824 0.5169038 -0.039268456 0.18800403 -0.32171276 -0.11798121 1.2736824 -0.32171276 3.1131794 1.2963874 0.5169038 -0.11798121 1.2963874 0.5824143 -------------------------------------------- 特征值矩阵: 0.023683 0.000000 0.000000 0.0000000.000000 0.078524 0.000000 0.0000000.000000 0.000000 0.242244 0.0000000.000000 0.000000 0.000000 4.224841-------------------------------------------- 特征向量矩阵: -0.32 -0.58 -0.66 0.360.32 0.60 -0.73 -0.080.48 0.07 0.18 0.86-0.75 0.55 0.07 0.36--------------------------------------------当前阈值: 0.95 取得的主成分数: 2主成分矩阵: 0.362 -0.082 0.857 0.359-0.657 -0.730 0.176 0.075-------------------------------------------- 降维后的矩阵: 2.827 -5.6412.796 -5.1452.622 -5.1772.765 -5.0042.783 -5.6493.231 -6.0632.690 -5.2332.885 -5.4852.623 -4.7442.837 -5.2083.005 -5.9672.898 -5.3362.724 -5.0872.286 -4.8112.868 -6.5013.127 -6.6592.889 -6.1332.863 -5.6343.312 -6.1942.924 -5.8353.201 -5.7132.968 -5.7552.295 -5.4563.208 -5.4203.155 -5.2843.003 -5.1763.042 -5.4532.949 -5.6892.872 -5.6342.878 -5.1252.923 -5.1173.101 -5.7332.864 -6.1352.914 -6.4152.837 -5.2082.644 -5.3922.886 -5.9222.837 -5.2082.530 -4.8342.921 -5.5512.741 -5.5862.659 -4.3822.513 -4.9803.106 -5.5113.303 -5.7572.796 -5.0722.974 -5.8252.671 -5.0942.969 -5.9012.807 -5.4306.796 -6.0006.444 -5.6346.975 -5.8195.692 -4.4896.598 -5.3906.152 -4.8976.607 -5.5994.760 -4.3146.555 -5.5445.501 -4.5945.000 -4.0526.022 -5.2125.774 -4.7676.495 -5.1905.336 -5.0636.439 -5.7836.171 -4.9635.746 -4.9836.454 -4.7735.555 -4.7336.628 -5.2315.868 -5.2486.808 -4.9876.432 -5.1326.225 -5.4656.411 -5.6446.842 -5.5597.069 -5.5826.324 -5.1525.204 -4.9505.441 -4.6125.319 -4.6375.646 -5.0036.890 -4.8946.099 -4.8316.319 -5.5106.732 -5.7236.324 -4.9445.757 -5.0485.676 -4.6355.974 -4.6456.402 -5.2815.740 -4.9124.804 -4.3065.867 -4.8125.842 -5.1045.887 -5.0236.153 -5.3344.603 -4.5635.809 -4.9688.043 -5.3036.925 -4.7408.128 -5.6577.482 -5.1347.861 -5.2738.908 -5.8626.031 -4.1238.443 -5.6677.831 -5.0698.429 -6.0957.173 -5.5577.314 -5.0997.677 -5.5306.856 -4.5387.097 -4.7757.416 -5.4347.461 -5.3559.000 -6.4869.306 -5.5686.810 -4.5547.940 -5.6926.709 -4.7099.011 -5.7716.899 -5.1117.787 -5.6488.126 -5.8736.769 -5.1366.802 -5.1987.634 -5.1047.899 -5.7778.352 -5.6878.744 -6.6857.670 -5.0966.954 -5.1717.291 -4.8138.588 -6.0007.656 -5.4547.416 -5.3636.680 -5.1507.619 -5.6867.826 -5.4977.434 -5.7246.925 -4.7408.075 -5.5917.931 -5.6187.455 -5.5027.037 -4.9407.275 -5.3937.413 -5.4316.901 -5.032
————————————————————————————————————————————————————————
写博经验尚浅,请各位多多指教。转载请注明出处。