先附代码pca回归

close all
clear
clc;                           %素质3连
format short
pzz = xlsread('7000sgfb','A1:DZ5549');  %读取文件
data = pzz';
n=randperm(130);%随机130个样本
%%%——————%%%
y_test = data(n(98:130),1);   %随机选取33个测试样本
x_test = data(n(98:130),2:end);
y_train = data(n(1:97),1);
x_train = data(n(1:97),2:end);
%%%——————%%%
%主成分分析Pca,降成m维变量,提取95%以上的有效信息swum =0;m=0;[coeff,score,latent,tsquared,explained]= princomp(data(1:97,2:end));for ii = 1 : length(latent)swum = latent(ii) + swum;if swum/sum(latent) >= 0.95m = ii;break;endend%————%降成m维后的回归分析x = [ones(97,1) score(:,1:m)];[b,brint,r] =regress(y_train,x);x_test=(x_test - mean(x_train))*coeff(:,1:m);y_fit = [ones(33,1),x_test]*b;A(:,1) = y_test;A(:,2) =y_fit;A(:,3) =  abs(y_fit - y_test);pp = corr(A);  %计算出相关系数sss=pp(2,1)

小白在学习,今天对PCA(主成分分析法)回归学习了一下,

分为两步:

0:pca实现

1:回归分析

第零部分:

背景介绍

PCA原理·:书上和网上介绍PCA的方法多了去了,因此,本篇博文不再赘述,一句话:PCA算法主用于降维,将样本数据从高维空间投影到低维空间中,在低维空间中表示数据。

PCA实现:为了便于理解,本文先用手动的方法实现一遍matlab,再说下matlab里面自带的函数pca

而我们自己实现PCA算法的过程:用一句话来说就是 将所有样本X减去样本均值m,再乘以样本的协方差矩阵C的特征向量V,即为PCA主成分分析

其计算过程如下:
    [1].将原始数据按行组成m行n列样本矩阵X(每行一个样本,每列为一维特征)
    [2].求出样本X的协方差矩阵C和样本均值m;(Matlab可使用cov()函数求样本的协方差矩阵C,均值用mean函数)
    [3].求出协方差矩阵的特征值D及对应的特征向量V;(Matlab可使用eigs()函数求矩阵的特征值D和特征向量V)
    [4].将特征向量按对应特征值大小从上到下按行排列成矩阵,取前k行组成矩阵P;(eigs()返回特征值构成的向量本身就是从大到小排序的)
    [5].Y=(X-m)×P即为降维到k维后的数据;
    PS:关于协方差矩阵,有些教程用协方差矩阵,而有些资料是用散步矩阵计算,其实协方差矩阵和散步矩阵就是一个倍数关系:协方差矩阵C×(n-1)=散步矩阵S。我们可以使用Matlab工具箱的cov函数求协方差矩阵C。

 %% 自己实现PCA的方法
[Row Col]=size(X);
covX=cov(X);                                    %求样本的协方差矩阵(散步矩阵(就是X'X)除以(n-1)即为协方差矩阵)
[V D]=eigs(covX);                               %求协方差矩阵的特征值D和特征向量V
meanX=mean(X);                                  %样本均值m
%所有样本X减去样本均值m,再乘以协方差矩阵(散步矩阵)的特征向量V,即为样本的主成份SCORE
tempX= repmat(meanX,Row,1);                     %rempat函数是复制函数
SCORE2=(X-tempX)*V                              %主成份:SCORE
pcaData2=SCORE2(:,1:k)

[coeff score latent ] = pca(X)

1)COEFF = PCA(X) returns the principal component coefficients for the N
    %   by P data matrix X. Rows of X correspond to observations and columns to
    %   variables. Each column of COEFF contains coefficients for one principal
    %   component. The columns are in descending order in terms of component
    %   variance (LATENT).

翻译过来就是 COEFF 是主成分分量,即样本协方差矩阵的特征向量;每列是特征向量,每行是观测值,根据特征值依次递减

2)score主成分,样本X在coeff上面的投影,=X×coeff   ,若需K维,则取前K列即可

3)laten:即协方差矩阵的特征值组成的向量,一般来说,从大到小排列。

三.

快速PCA及其实现

PCA计算的最主要的工作量是计算样本协方差矩阵的特征值和特征向量,若样本矩阵X的维度太大,则计算复杂度会很高,当维数为10000时,那么协方差矩阵便为10000*10000, 若再采用pca进行计算,那么计算会很慢,内存耗尽。

此时我们有一个很好的pca技巧可以用来加速:即考虑 X'X的特征值和XX'的特征值相等,所以,我们就可以计算XX'的特征值,然后再求特征向量,具体可参见《精通matlab数字图像处理与识别》张铮编著,第十二章。

以下为源代码:

%% 使用快速PCA算法实现的方法
[pcaData3 COEFF3] = fastPCA(X, k )其中fastPCA函数的代码实现如下:
function [pcaA V] = fastPCA( A, k )
% 快速PCA
% 输入:A --- 样本矩阵,每行为一个样本
%      k --- 降维至 k 维
% 输出:pcaA --- 降维后的 k 维样本特征向量组成的矩阵,每行一个样本,列数 k 为降维后的样本特征维数
%      V --- 主成分向量
[r c] = size(A);
% 样本均值
meanVec = mean(A);
% 计算协方差矩阵的转置 covMatT
Z = (A-repmat(meanVec, r, 1));
covMatT = Z * Z';
% 计算 covMatT 的前 k 个本征值和本征向量
[V D] = eigs(covMatT, k);
% 得到协方差矩阵 (covMatT)' 的本征向量
V = Z' * V;
% 本征向量归一化为单位本征向量
for i=1:kV(:,i)=V(:,i)/norm(V(:,i));
end
% 线性变换(投影)降维至 k 维
pcaA = Z * V;
% 保存变换矩阵 V 和变换原点 meanVec

参考文献:

--------------------

1)https://blog.csdn.net/guyuealian/article/details/68487833

2)《精通matlab数字图像处理与识别》张铮

最后附一篇网上下载经典的PCA的总结  可自取  作者不详

链接:https://pan.baidu.com/s/1xO0CAGP8LlyLx1mYuH37RA 
提取码:vl4d

PCA 回归算法matlab实现相关推荐

  1. MVO-SVM 多元宇宙算法优化支持向量机回归算法

    MVO-SVM 多元宇宙算法优化支持向量机回归算法 多元宇宙优化算法 Multi-Verse Optimizer Support vector machine Support vector regre ...

  2. 入门级对数几率回归算法

    入门级对数几率回归算法(matlab实现) 对数几率回归模型是处理分类问题的算法,常用于垃圾邮件分类,天气预测等,很多文献也将其称为"逻辑回归".这里我采用西瓜书的西瓜数据集3.0 ...

  3. ML之LiRLassoR:利用boston房价数据集(PCA处理)采用线性回归和Lasso套索回归算法实现房价预测模型评估

    ML之LiR&LassoR:利用boston房价数据集(PCA处理)采用线性回归和Lasso套索回归算法实现房价预测模型评估 目录 利用boston房价数据集(PCA处理)采用线性回归和Las ...

  4. 基于PCA 人脸识别/人脸识别算法/人脸检测程序源码MATLAB ELM+PCA人脸识别 PCA人脸识别matlab代码 基于PCA算法的人脸识别

    1.基于PCA的人脸识别代码 2.MATLAB ELM+PCA人脸识别 2.基于PCA的人脸识别(matlab)(采用PCA算法进行人脸识别,通过抽取人脸的主要成 分,构成特征脸空间,识别时将测试图像 ...

  5. 【回归分析】MATLAB实现Lasso回归算法

    Lasso回归算法 Lasso(Least Absolute Shrinkage and Selection Operator) 回归是一种线性回归方法,它可以在保持预测准确性的同时,通过稀疏性约束( ...

  6. PCA降维算法总结以及matlab实现PCA(个人的一点理解)

    转载请声明出处.by watkins song 鉴于本文比较混乱, 所以写了一个新的PCA的详细介绍, 请参见: http://blog.csdn.net/watkinsong/article/det ...

  7. dijkstra算法matlab代码_头脑风暴优化(BSO)算法(附MATLAB代码)

    BSO讲解https://www.zhihu.com/video/1252605855767736320 B站搜索:随心390,同步观看视频 各位小伙伴可在闲鱼搜索 优化算法交流地,即可搜索到官方闲鱼 ...

  8. “降维算法”面试知识点总结-PCA+LDA算法-百面机器学习系列4

    提示:在准备机器学习算法工程师面试的过程中,我主要参考<百面机器学习>去巩固自己的基础知识.本系列博客将以该书为主题,并以八股文的方式去概述整本书的内容,以尽量减少读者们的阅读作量,并方便 ...

  9. 机器学习算法 03 —— 逻辑回归算法(精确率和召回率、ROC曲线和AUC指标、过采样和欠采样)

    文章目录 系列文章 逻辑回归 1 逻辑回归介绍 1.1 逻辑回归原理 输入 激活函数 1.2 损失以及优化 2 逻辑回归API介绍 3 案例:肿瘤良性恶性预测 4 分类模型的评估 4.1 分类评估方法 ...

最新文章

  1. EJB究竟是什么,真的那么神奇吗??
  2. java struts2 漏洞复现合集
  3. python常用内置函数总结-python 几个常用的内置函数
  4. CMSIS对异常和中断标识符、中断处理函数名以及中断向量异常号都有严格的要求。
  5. python程序的基本框架_Python PyQt学习随笔:PyQt主程序的基本框架
  6. SAP UI5 Web Component React应用如何在Component之间跳转
  7. 使用SAP C4C rule editor动态控制UI上某个按钮是否显示 - SAP Cloud for Customer UI 规则编辑器的使用一例
  8. python写入数据的一种措施_Python 文件数据读写的具体实现
  9. inflate简介,LayoutInflater和inflate()方法的用法
  10. mysql数据传输完整性_Mysql——数据库完整性
  11. java spring hiberate_Spring+SpringMVC+Hibernate整合实例讲解
  12. python xpath循环_Python爬虫 爬取北京二手房数据
  13. 使用Rufus制作安装U盘报错,使用UltraISO成功
  14. Codeigniter处理用户登录验证后URL跳转
  15. 树莓派触摸屏校准以及QT触摸屏相关问题解决
  16. 30天Python基础(正则表达式)
  17. mysql的user表被清空_用delete命令来个不小心删除了user表
  18. python调用谷歌地图api_python显示地图与谷歌地图
  19. vue日历连月展示dom
  20. 一个段子来解释数据挖掘

热门文章

  1. python+字符动画+粒子碰撞动画+手写画板
  2. eclipse教程,初学者的好东东,奉献给大家
  3. 一款基于星座的app(项目已开源)
  4. Java8 Optional高级玩法
  5. 【知识图谱论文】使用强化学习对时间知识图中的路径进行多跳推理
  6. Python的第三周学习总结
  7. MacOS下搜狗输入法部分场景卡顿解决方案
  8. linux系统怎么装搜狗输入法_搜狗拼音输入法 For Linux安装方法全程图解
  9. 非Root环境下安卓实现全屏,屏蔽下方虚拟按键:左键、右键。较新安卓系统无法屏蔽Home键。源代码例子
  10. 驶向伟大的IT之路--我的演说辞