从零开始学习主成分分析
前言
前段时间一个偶然的机会,在一个虫友的问题下留了自己的微信号,从那开始私信我的人络绎不绝,我翻看了网上许多大咖的博文,大家都各有侧重,有的偏向基础概念和实例应用,如:【机器学习】主成分分析详解(https://blog.csdn.net/lyl771857509/article/details/79435402);有的偏向于软件的操作(http://www.360doc.com/content/17/1210/16/37437963_711826540.shtml);还有的内容是错误的。同几位提问者的交流中,我发现往往来问问题的大都是没有什么计算机编程和数理统计基础的人。我想不妨自己做一个从软件安装到数据分析,再到最终结果展示的傻瓜式帖子,希望能对大家有所帮助。
准备工作
软件准备
1、matlab 2013a
下载地址:magnet:?xt=urn:btih:8264042A3852F48EFCF836B364A576062ADA5552;
安装方式:https://jingyan.baidu.com/article/dca1fa6fa26202f1a44052e8.html
按照上文安装步骤操作完毕后,还需要根据技术贴(https://blog.csdn.net/wangpengfei666/article/details/78584083?locationNum=1&fps=1)完成对licence文件的修改。
破解完成后,到C:\Program Files\MATLAB\R2013\bin(默认)或者你的自定义目录下找到matlab.exe,右键发送快捷方式到桌面,双击打开,倘若你能看见下图的界面,那么祝贺你,你已经成功安装了matalb。
数据准备
matlab 2013a 自带一个名为hald数据集,软件对于这个数据集的描述如下:
== Portland Cement Data ==
Multiple regression data
ingredients (%):
column1: 3CaO.Al2O3 (tricalcium aluminate)
column2: 3CaO.SiO2 (tricalcium silicate)
column3: 4CaO.Al2O3.Fe2O3 (tetracalcium aluminoferrite)
column4: 2CaO.SiO2 (beta-dicalcium silicate)
heat (cal/gm):
heat of hardening after 180 days
Source:
Woods,H., H. Steinour, H. Starke,
"Effect of Composition of Portland Cement on Heat Evolved
during Hardening," Industrial and Engineering Chemistry,
v.24 no.11 (1932), pp.1207-1214.
Reference:
Hald,A., Statistical Theory with Engineering Applications,
Wiley, 1960.
上文大概意思是包括五列数据,它们分别是3CaO.Al2O3,3CaO.SiO2,4CaO.Al2O3.Fe2O3,2CaO.SiO2 在材料中占有的成分(前四列)和180天后的淬火热量(第五列)。
数据内容也非常简单,只有13行5列:
7.00 | 26.00 | 6.00 | 60.00 | 78.50 |
1.00 | 29.00 | 15.00 | 52.00 | 74.30 |
11.00 | 56.00 | 8.00 | 20.00 | 104.30 |
11.00 | 31.00 | 8.00 | 47.00 | 87.60 |
7.00 | 52.00 | 6.00 | 33.00 | 95.90 |
11.00 | 55.00 | 9.00 | 22.00 | 109.20 |
3.00 | 71.00 | 17.00 | 6.00 | 102.70 |
1.00 | 31.00 | 22.00 | 44.00 | 72.50 |
2.00 | 54.00 | 18.00 | 22.00 | 93.10 |
21.00 | 47.00 | 4.00 | 26.00 | 115.90 |
1.00 | 40.00 | 23.00 | 34.00 | 83.80 |
11.00 | 66.00 | 9.00 | 12.00 | 113.30 |
10.00 | 68.00 | 8.00 | 12.00 | 109.40 |
主成分分析
使用matlab自带的数据集进行主成分分析是非常容易的,在命令窗口中输入以下三行代码就可以解决战斗(如果你不知道什么是命令窗口,参考一下Jurbo的帖子: https://blog.csdn.net/Jurbo/article/details/78166990):
load hald
covx = cov(ingredients);
[COEFF,latent,explained] = pcacov(covx)
只是,我们在实际操作中,可能要自己导入数据,在这里我举一个简单的例子,比如我需要做主成分分析的数据储存在一个excel文件中,叫做new.xls,该文件存放在 D:\pca_analysis 目录下:
首先,我们要导入数据到matlab, 将其命名为DATA。在matlab中,DATA此时可以被看做是一个m行n列的自变量矩阵,m代表样本数量,n代表数据的维数:
DATA=xlsread('D:\pca_analysis\new.xls')
然后,求协方差矩阵
covx = cov(DATA)
最后,调用pcacov命令作出主成分分析:
[COEFF,latent,explained] = pcacov(covx)
运行完这一步之后,我们可以在命令窗口看到以下几个结果:
COEFF =
-0.0678 -0.6460 0.5673 0.5062
-0.6785 -0.0200 -0.5440 0.4933
0.0290 0.7553 0.4036 0.5156
0.7309 -0.1085 -0.4684 0.4844
latent =
517.7969
67.4964
12.4054
0.2372
explained =
86.5974
11.2882
2.0747
0.0397
第一项COEFF是主成分系数矩阵(principal component coefficients),是主成分分析最重要的结果,起到将自变量矩阵转换成主成分矩阵的作用;第二项是主成分方差(principal component variances),方差越大,代表这一个主成分的信息约多,越重要;第三项是解释量,其实就是第二项结果中每一个数字除以总和得到的省略百分号的百分比而已。本质上和第二项没有什么区别。
进一步分析
系统自带的命令运行完了,但仅仅把以文得到的结果提交给老板恐怕免不了一顿责骂。
1、主成分矩阵
我们还要根据 主成分矩阵=自变量矩阵×主成分系数矩阵 求出主成分矩阵,matlab命令如下:
new_Pca_Matrix=DATA*COEFF
new_Pca_Matrix 是 由原始自变量矩阵×一个方阵得到的,所以说new_Pca_matrix的行和列与DATA的行和列是一致的。我们主成分分析的目的是降维,所以我们还要对new_Pca_Matrix 进行一次筛选,留下解释量高的向量,去掉解释量低的向量。
2、过滤掉主成分矩阵中解释量低的向量
如何判断哪些应该留下呢?看特征值的大小,如果特征值大于1,保留,如果小于1,说明这一向量的信息还不如原来自变量数据中的一列,应该去掉。
(1)计算特征值:
a=eig(covx)
(2)看看有多少个特征值大于1
num=sum(a>1);
(3)保留解释量高的向量,并重新赋值给new_Pca_Matrix_final
new_Pca_Matrix_final=new_Pca_Matrix(:,1:num);
new_Pca_Matrix_final 是你想要的主成分分析输出结果。
主成分分析还包括其他很多方面,比如:碎石图的绘制和解析,将主成分分析结果用于后续的机器学习分类器构建等等。有问题请在下方留言。本人并非数学科班出身,本帖子可能存在一些技术层面的纰漏,如有发现,还请各位指正。
by Doc Z
2018.6.7
从零开始学习主成分分析相关推荐
- 从零开始学习 webservice第一集,java webservice简单实例入门教程
现在从零开始学习webservice 概念自己百度搜,总之,webservice就相当于一个接口,就像你走进了一家售货店,你不需要知道这家店怎么卖给你东西,你拿着钱去,说我要一包玉溪,人家就会给你返回 ...
- python新手教程 从零开始-Python零基础从零开始学习Python十分钟快速入门
原标题:Python零基础从零开始学习Python十分钟快速入门 学习Python的,都知道Python 是一个高层次的结合了解释性.编译性.互动性和面向对象的脚本语言.Python是一种动态解释型的 ...
- python零基础难学吗-如何从零开始学习Python,零基础学python难吗
Python并不难学,它诞生至今已经过25个年头,但相对于其他语言,它更加易学.易读,非常适合快速开发,Python编程简单直接,更适合初学编程者. 那么,如何从零开始学习python呢? 可以分为这 ...
- python自学多久可以找到工作-25岁从零开始学习python还能找到工作吗?
相信近期大家经常可以看到培训机构推出python相关的课程,随着人工智能技术逐渐进入大众的生活,这种编程语言以简单.应用广泛的优势,成为了进入人工智能领域的条件之一.对于精通python开发的人,在职 ...
- python语言怎么学-如何从零开始学习Python,python语言编程入门
Python并不难学,它诞生至今已经过25个年头,但相对于其他语言,它更加易学.易读,非常适合快速开发,Python编程简单直接,更适合初学编程者. 那么,如何从零开始学习python呢? 可以分为这 ...
- 从零开始学习hadoop之发行版选择
从零开始学习hadoop之发行版选择 经常会看到这样的问题:零基础学习hadoop难不难?有的人回答说:零基础学习hadoop,没有想象的那么难,也没有想象的那么容易.看到这样的答案不免觉得有些尴尬, ...
- 从零开始学习OpenGL ES之五 – 材质
从零开始学习OpenGL ES之五 – 材质 作者: iPhoneGeek 爱疯极客 09-Jan-10 iPhone Development 浏览次数: 411 | 评论 ↓ Tweet Shar ...
- 从零开始学习jQuery (十一) 实战表单验证与自动完成提示插件
本系列文章导航 从零开始学习jQuery (一) 开天辟地入门篇 从零开始学习jQuery (二) 万能的选择器 从零开始学习jQuery (三) 管理jQuery包装集 从零开始学习jQuery ( ...
- 从零开始学习jQuery (十) jQueryUI常用功能实战
本系列文章导航 从零开始学习jQuery (一) 开天辟地入门篇 从零开始学习jQuery (二) 万能的选择器 从零开始学习jQuery (三) 管理jQuery包装集 从零开始学习jQuery ( ...
最新文章
- 如何在TensorFlow中用深度学习修复图像
- 黑马lavarel教程---12、lavarel验证码
- linux终端默认密码是多少,linux基础懂多少?两个小问题考考你
- matlab builder for java下载,Matlab Builder JA - Compile Matlab into a Java jar - Free Version?
- ❤️万字总结八大排序:冒泡排序,选择排序,插入排序,堆排序,希尔排序,归并排序,计数排序❤️
- [转载]在ASP.NET MVC中,使用Bundle来打包压缩js和css
- Anagram Groups(字符串)
- mac XCode 快捷键
- Python 获取父级文件夹的名字
- group + max函数_了解C ++中max()函数的工作方式
- jic标准_JIC螺纹技术资料.doc
- 关于腾讯云服务器备案全流程 内容
- Hardhat以太坊智能合约开发框架基础教程
- xml 硕正报表_主要指标及功能清单
- 一款APP从设计稿到切图过程全方位揭秘(IOS版)
- 转:彼得·德鲁克:如何发挥人的长处?
- 轨道交通通信施工学习总结(三)区间光电缆敷设
- WPF打开摄像头拍照
- 这年头,能坐上火箭的东西不多啊 Java版本号算一个
- 初识V4l2(二)-------浅析video_register_device
热门文章
- 计算机网络基础选择题
- golang优雅的使用context
- c语言解引用运算符,C++ 解引用(*)和箭头(-)运算符的重载
- 日常记录,vue-table表格背景透明
- Java中如何使用“点”分割字符串呢?
- 大专毕业,0基础转行C++程序员一个月后,我后悔了
- 多维向量的均值、协方差
- 设计模式(Design Pattern)详细整理(含思维导图)
- 【Mysql数据库】数据库添加索引方式
- WebRequest 类