一、数据降维

对于现在维数比较多的数据,我们首先需要做的就是对其进行降维操作。降维,简单来说就是说在尽量保证数据本质的前提下将数据中的维数降低。降维的操作可以理解为一种映射关系,例如函数 ,即由原来的二维转换成了一维。处理降维的技术有很多种,如前面的 SVD奇异值分解,主成分分析(PCA),因子分析(FA),独立成分分析(ICA)等等。

二、PCA的概念

PCA是一种较为常用的降维技术,PCA的思想是将 维特征映射到 维上,这 维是全新的正交特征。这 维特征称为主元,是重新构造出来的 维特征。在PCA中,数据从原来的坐标系转换到新的坐标系下,新的坐标系的选择与数据本身是密切相关的。其中,第一个新坐标轴选择的是原始数据中方差最大的方向,第二个新坐标轴选取的是与第一个坐标轴正交且具有最大方差的方向,依次类推,我们可以取到这样的 个坐标轴。

三、PCA的操作过程

1、PCA的操作流程大致如下:

  • 去平均值,即每一位特征减去各自的平均值
  • 计算协方差矩阵
  • 计算协方差矩阵的特征值与特征向量
  • 对特征值从大到小排序
  • 保留最大的个特征向量
  • 将数据转换到个特征向量构建的新空间中

2、具体的例子

假设二维数据为
  • 取平均值

我们计算每一维特征的平均值,并去除平均值,我们计算出均值

去除均值后的矩阵为
  • 计算的协方差矩阵

  • 计算的特征值与特征向量

其中,特征值为

特征向量为
  • 对特征值进行排序,显然就两个特征值
  • 选择最大的那个特征值对应的特征向量

  • 转换到新的空间

四、实验的仿真

我们队一个数据集进行了测试:
MATLAB实验代码如下:
主程序
[plain]  view plain copy
  1. %% pca
  2. dataSet = load('testSet.txt');%导入数据
  3. % pca
  4. [FinalData, reconData] = PCA(dataSet, 1);
  5. %% 作图
  6. hold on
  7. plot(dataSet(:,1), dataSet(:,2), '.');
  8. plot(reconData(:,1), reconData(:,2), '.r');
  9. hold off

PCA函数段

[plain]  view plain copy
  1. function [ FinalData,reconData ] = PCA( dataSet, k )
  2. [m,n] = size(dataSet);
  3. %% 去除平均值
  4. %取平均值
  5. dataSetMean = mean(dataSet);
  6. %减去平均值
  7. dataSetAdjust = zeros(m,n);
  8. for i = 1 : m
  9. dataSetAdjust(i , :) = dataSet(i , :) - dataSetMean;
  10. end
  11. %% 计算协方差矩阵
  12. dataCov = cov(dataSetAdjust);
  13. %% 计算协方差矩阵的特征值与特征向量
  14. [V, D] = eig(dataCov);
  15. % 将特征值矩阵转换成向量
  16. d = zeros(1, n);
  17. for i = 1:n
  18. d(1,i) = D(i,i);
  19. end
  20. %% 对特征值排序
  21. [maxD, index] = sort(d);
  22. %% 选取前k个最大的特征值
  23. % maxD_k = maxD(1, (n-k+1):n);
  24. index_k = index(1, (n-k+1):n);
  25. % 对应的特征向量
  26. V_k = zeros(n,k);
  27. for i = 1:k
  28. V_k(:,i) = V(:,index_k(1,i));
  29. end
  30. %% 转换到新的空间
  31. FinalData = dataSetAdjust*V_k;
  32. % 在原图中找到这些点
  33. reconData = FinalData * V_k';
  34. for i = 1 : m
  35. reconData(i , :) = reconData(i , :) + dataSetMean;
  36. end
  37. end
原文链接是:http://blog.csdn.net/google19890102/article/details/27969459

转载于:https://www.cnblogs.com/khunwang/articles/3809689.html

[转载]简单易学的机器学习算法-主成分分析(PCA)相关推荐

  1. 简单易学的机器学习算法——梯度提升决策树GBDT

    梯度提升决策树(Gradient Boosting Decision Tree,GBDT)算法是近年来被提及比较多的一个算法,这主要得益于其算法的性能,以及该算法在各类数据挖掘以及机器学习比赛中的卓越 ...

  2. 简单易学的机器学习算法——Metropolis-Hastings算法

    在简单易学的机器学习算法--马尔可夫链蒙特卡罗方法MCMC中简单介绍了马尔可夫链蒙特卡罗MCMC方法的基本原理,介绍了Metropolis采样算法的基本过程,这一部分,主要介绍Metropolis-H ...

  3. 简单易学的机器学习算法——Latent Dirichlet Allocation(理论篇)

    引言 LDA(Latent Dirichlet Allocation)称为潜在狄利克雷分布,是文本语义分析中比较重要的一个模型,同时,LDA模型中使用到了贝叶斯思维的一些知识,这些知识是统计机器学习的 ...

  4. 简单易学的机器学习算法——受限玻尔兹曼机RBM

    受限玻尔兹曼机(Restricted Boltzmann Machine, RBM)是一种基于能量模型的神经网络模型,在Hinton提出针对其的训练算法(对比分歧算法)后,RBM得到了更多的关注,利用 ...

  5. 简单易学的机器学习算法——非线性支持向量机

    一.回顾     前面三篇博文主要介绍了支持向量机的基本概念,线性可分支持向量机的原理以及线性支持向量机的原理,线性可分支持向量机是线性支持向量机的基础.对于线性支持向量机,选择一个合适的惩罚参数,并 ...

  6. 简单易学的机器学习算法——K-Means++算法

    一.K-Means算法存在的问题 由于K-Means算法的简单且易于实现,因此K-Means算法得到了很多的应用,但是从K-Means算法的过程中发现,K-Means算法中的聚类中心的个数k需要事先指 ...

  7. 简单易学的机器学习算法——Gibbs采样

    一.Gibbs采样概述 前面介绍的Metropolis-Hastings采样为从指定分布中进行采样提供了一个统一的框架,但是采样的效率依赖于指定的分布的选择,若是选择的不好,会使得接受率比较低,大量的 ...

  8. 史上简单易学的机器学习算法——EM算法 缘木求鱼

    一.机器学习中的参数估计问题 二.EM算法简介 在上述存在隐变量的问题中,不能直接通过极大似然估计求出模型中的参数,EM算法是一种解决存在隐含变量优化问题的有效方法.EM算法是期望极大(Expecta ...

  9. 简单易学的机器学习算法——神经网络之BP神经网络

    一.BP神经网络的概念     BP神经网络是一种多层的前馈神经网络,其主要的特点是:信号是前向传播的,而误差是反向传播的.具体来说,对于如下的只含一个隐层的神经网络模型: (三层BP神经网络模型) ...

最新文章

  1. 【Vue】宝塔面板服务器配置Vue项目
  2. 声音信标规格说明 2020-5-25
  3. processing文本可视化_推荐7个数据可视化工具,让你的信息快速生成可视化
  4. 题目2:隐式图的搜索问题(A*算法解决八数码)
  5. python代码实现文件复制txt文件_工具类(1.1)
  6. 分布式系统原理_终于有架构大牛把分布式系统概念讲明白了,竟然用了足足800页...
  7. matlab重要性采样,Importance Sampling (重要性采样)介绍 | 文艺数学君
  8. 完整仿写鸿洋WanAndroid网站客户端
  9. 【渝粤教育】21秋期末考试宏微观经济学10545k1
  10. 湿淀粉 - 搜搜百科
  11. 产品经理 项目管理
  12. vue---图像上传/裁剪/预览/删除/查询
  13. 负载均衡器-Citrix
  14. 2022年江苏省职业院校技能大赛网络搭建与应用赛项中职样卷
  15. netlink实现驱动和应用层通信
  16. 通达信接口服务如何委托下单?
  17. light-4j真的比springboot快44倍吗?
  18. orcad capture 快速制作原理图库
  19. redis安装Windows
  20. Spotify 模型

热门文章

  1. 浙大PAT 乙级(题号1031~1035)自解全AC Java | C++实现
  2. 学习数据科学需要了解一些什么,什么是学习统计学最好的方法呢?
  3. 卸载Anaconda3
  4. 多点拟合求平面的RANSAC算法
  5. python怎么连接远程服务器没有按时响应_python通过paramiko执行ssh命令时设置超时时间 - Python - 服务器之家...
  6. 简易新浪微博客户端--Sweetheart
  7. The Foundry Nuke 14Mac软件安装包下载Nuke14Mac安装教程
  8. OA 办公系统详细的功能介绍
  9. 查券机器人微信公众号配置教程分享
  10. 大数据揭晓:复联4上映4天破20亿,万达影院2018年140.88亿居榜首