PCA 回归算法matlab实现
先附代码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实现相关推荐
- MVO-SVM 多元宇宙算法优化支持向量机回归算法
MVO-SVM 多元宇宙算法优化支持向量机回归算法 多元宇宙优化算法 Multi-Verse Optimizer Support vector machine Support vector regre ...
- 入门级对数几率回归算法
入门级对数几率回归算法(matlab实现) 对数几率回归模型是处理分类问题的算法,常用于垃圾邮件分类,天气预测等,很多文献也将其称为"逻辑回归".这里我采用西瓜书的西瓜数据集3.0 ...
- ML之LiRLassoR:利用boston房价数据集(PCA处理)采用线性回归和Lasso套索回归算法实现房价预测模型评估
ML之LiR&LassoR:利用boston房价数据集(PCA处理)采用线性回归和Lasso套索回归算法实现房价预测模型评估 目录 利用boston房价数据集(PCA处理)采用线性回归和Las ...
- 基于PCA 人脸识别/人脸识别算法/人脸检测程序源码MATLAB ELM+PCA人脸识别 PCA人脸识别matlab代码 基于PCA算法的人脸识别
1.基于PCA的人脸识别代码 2.MATLAB ELM+PCA人脸识别 2.基于PCA的人脸识别(matlab)(采用PCA算法进行人脸识别,通过抽取人脸的主要成 分,构成特征脸空间,识别时将测试图像 ...
- 【回归分析】MATLAB实现Lasso回归算法
Lasso回归算法 Lasso(Least Absolute Shrinkage and Selection Operator) 回归是一种线性回归方法,它可以在保持预测准确性的同时,通过稀疏性约束( ...
- PCA降维算法总结以及matlab实现PCA(个人的一点理解)
转载请声明出处.by watkins song 鉴于本文比较混乱, 所以写了一个新的PCA的详细介绍, 请参见: http://blog.csdn.net/watkinsong/article/det ...
- dijkstra算法matlab代码_头脑风暴优化(BSO)算法(附MATLAB代码)
BSO讲解https://www.zhihu.com/video/1252605855767736320 B站搜索:随心390,同步观看视频 各位小伙伴可在闲鱼搜索 优化算法交流地,即可搜索到官方闲鱼 ...
- “降维算法”面试知识点总结-PCA+LDA算法-百面机器学习系列4
提示:在准备机器学习算法工程师面试的过程中,我主要参考<百面机器学习>去巩固自己的基础知识.本系列博客将以该书为主题,并以八股文的方式去概述整本书的内容,以尽量减少读者们的阅读作量,并方便 ...
- 机器学习算法 03 —— 逻辑回归算法(精确率和召回率、ROC曲线和AUC指标、过采样和欠采样)
文章目录 系列文章 逻辑回归 1 逻辑回归介绍 1.1 逻辑回归原理 输入 激活函数 1.2 损失以及优化 2 逻辑回归API介绍 3 案例:肿瘤良性恶性预测 4 分类模型的评估 4.1 分类评估方法 ...
最新文章
- EJB究竟是什么,真的那么神奇吗??
- java struts2 漏洞复现合集
- python常用内置函数总结-python 几个常用的内置函数
- CMSIS对异常和中断标识符、中断处理函数名以及中断向量异常号都有严格的要求。
- python程序的基本框架_Python PyQt学习随笔:PyQt主程序的基本框架
- SAP UI5 Web Component React应用如何在Component之间跳转
- 使用SAP C4C rule editor动态控制UI上某个按钮是否显示 - SAP Cloud for Customer UI 规则编辑器的使用一例
- python写入数据的一种措施_Python 文件数据读写的具体实现
- inflate简介,LayoutInflater和inflate()方法的用法
- mysql数据传输完整性_Mysql——数据库完整性
- java spring hiberate_Spring+SpringMVC+Hibernate整合实例讲解
- python xpath循环_Python爬虫 爬取北京二手房数据
- 使用Rufus制作安装U盘报错,使用UltraISO成功
- Codeigniter处理用户登录验证后URL跳转
- 树莓派触摸屏校准以及QT触摸屏相关问题解决
- 30天Python基础(正则表达式)
- mysql的user表被清空_用delete命令来个不小心删除了user表
- python调用谷歌地图api_python显示地图与谷歌地图
- vue日历连月展示dom
- 一个段子来解释数据挖掘