为什么要对数据矩阵的平均值进行均值化

机器学习与模式识别(10)
数据白化预处理
&&&&随机向量的“零均值化”和“空间解相关”是最常用的两个预处理过程,其中“零均值化”比较简单,而“空间解相关”涉及一些矩阵的知识。
&&& 设有均值为零的随机信号向量
,其自相关矩阵为
是对称矩阵,且是非负定的(所有特征值都大于或等于0)。
&&& 现在,寻找一个线性变换
进行变换,即
上式的含义是:y的各分量是不相关的,即
。通常将这个过程称为“空间解相关”、“空间白化”或“球化”。
称为空间解相关矩阵(空间白化矩阵、球化矩阵)。
的性质可知,其存在特征值分解:
是正交矩阵,
是对角矩阵,其对角元素是
特征值。
\begin{equation}\label{eq:B}B=\Sigma^{-1/2} Q^T\end{equation}
因此,通过矩阵
线性变换后,
的各个分量变得不相关了。
来说,特征值分解和奇异值分解是等价的,而奇异值分解的数值算法比特征值分解的数值算法具有更好的稳定性,因此一般都用奇异值分解来构造空间解相关矩阵
&&& 应该注意到,“空间解相关”不能保证各分量信号之间的“独立性”,但它能够简化盲分离算法或改善分离算法的性能。
注:以上来自戴老师《盲信号处理》的课件。
&&& 最为熟知的例子是白噪声。元素
可以是一个时间序列在相继时间点
的值,且在噪声序列中没有时间上得相关性。术语“白”来自于白噪声的能谱在所有频率上是一个常数这一事实,就像含有各种颜色的白光谱一样。白化的本质就是去相关加缩放。
&&& 式\eqref{eq:B}的解相关矩阵
肯定不是唯一的白化矩阵。容易看到,任何矩阵
为正交矩阵)也是白化矩阵。这是因为对
,下式成立:
&&& 一个重要的例子是矩阵
。这也是一个白化矩阵,因为它是用正交矩阵
左乘式\eqref{eq:B}的
得到的。这个矩阵称为
的逆均方根,并用
表示,因为它来自于均方根概念向矩阵的标准推广。
注:以上来自《Independent Component Analysis》
&&& 关于白化代码的实现,其实很简单,下面给一个
function&[z_w&varargout]&=&myWhiten(z)
%--------------------------------------------------------------------------
%&语法:z_w&=&myWhiten(z);
%&&&&&[z_w&T]&=&myWhiten(z);
%&输入:z是一个mxn的矩阵,包含m维随机变量的各n个采样点。
%&输出:z_w是白化版本的z。T是mxm的白化变换矩阵。
%--------------------------------------------------------------------------
%%&计算样本协方差
R&=&cov(z');&%&1表示除以N来计算协方差
[U&D&~]&=&svd(R,&'econ');&%&用eig也行,[U,&D]&=&eig(R);
%%&下面求白化矩阵
T&=&U&*&inv&(sqrt(D))&*&U';&%&称为协方差矩阵的逆均方根,inv计算不会太耗时间,因为D为对角阵。inv(sqrt(D))*U'也是一个可行白化矩阵
%%&乘以白化矩阵实现白化
z_w&=&T&*&z;
if&(nargout&==&2)
&&&&varargout{1}&=&T;
&&&&另外可以直接利用FastICA的白化函数whitenv,它要配合其提供的PCA函数pcamat.m完成白化,其提供的例子中有提示如下
%&&&&&&&[E,&D]&=&pcamat(vectors);
%&&&&&&&[nv,&wm,&dwm]&=&whitenv(vectors,&E,&D);
&&&&之前写过关于FastICA工具箱的使用,再把使用白化的例子给出来吧:
%&测试whitenv函数
%&加载matlab自带的数据
load&cities
stdr&=&std(ratings);
sr&=&ratings./repmat(stdr,329,1);
boxplot(sr','orientation','horizontal','labels',categories)
firstEig&=&1;
lastEig&=&9;
s_interactive&=&'off';
sr&=&remmean(sr);&%&下面的pcamat和whitenv都没有去均值,这里先做取均值处理
[E,&D]&=&pcamat(sr,&firstEig,&lastEig,&s_interactive);
[nv,&wm,&dwm]&=&whitenv(sr,&E,&D);
boxplot(nv','orientation','horizontal','labels',categories)
PCA: & &PCA的具有2个功能,一是维数约简(可以加快算法的训练速度,减小内存消耗等),一是数据的可视化。 & &PCA并不是线性回归,因为线性回归是保证得到的函数是y值方面误差最小,而PCA是保证得到的函数到所降的维度上的误差最小。另外线性回归是通过x值来预测y值,而PCA中是将所有的x样本都同等对待。 & &在使用PCA前需要对数据进行预处理,首先是均值化,即对每个特征维,都减掉该维的平均值,然后就是将不同维的数据范围归一化到同一范围,方法一般都是除以最大值。但是比较奇怪的是,在对自然图像进行均值处理时并不是不是减去该维的平均值,而是减去这张图片本身的平均值。因为PCA的预处理是按照不同应用场合来定的。
& &自然图像指的是人眼经常看见的图像,其符合某些统计特征。一般实际过程中,只要是拿正常相机拍的,没有加入很多人工创作进去的图片都可以叫做是自然图片,因为很多算法对这些图片的输入类型还是比较鲁棒的。在对自然图像进行学习时,其实不需要太关注对图像做方差归一化,因为自然图像每一部分的统计特征都相似,只需做均值为0化就ok了。不过对其它的图片进行训练时,比如首先字识别等,就需要进行方差归一化了。 & &PCA的计算过程主要是要求2个东西,一个是降维后的各个向量的方向,另一个是原先的样本在新的方向上投影后的值。 &
&首先需求出训练样本的协方差矩阵,如公式所示(输入数据已经均值化过): & & & &求出训练样本的协方差矩阵后,将其进行SVD分解,得出的U向量中的每一列就是这些数据样本的新的方向向量了,排在前面的向量代表的是主方向,依次类推。用U’*X得到的就是降维后的样本值z了,即: & & & &(其实这个z值的几何意义是原先点到该方向上的距离值,但是这个距离有正负之分),这样PCA的2个主要计算任务已经完成了。用U*z就可以将原先的数据样本x给还原出来。 & 在使用有监督学习时,如果要采用PCA降维,那么只需将训练样本的x值抽取出来,计算出主成分矩阵U以及降维后的值z,然后让z和原先样本的y值组合构成新的训练样本来训练分类器。在测试过程中,同样可以用原先的U来对新的测试样本降维,然后输入到训练好的分类器中即可。
有一个观点需要注意,那就是PCA并不能阻止过拟合现象。表明上看PCA是降维了,因为在同样多的训练样本数据下,其特征数变少了,应该是更不容易产生过拟合现象。但是在实际操作过程中,这个方法阻止过拟合现象效果很小,主要还是通过规则项来进行阻止过拟合的。 & 并不是所有ML算法场合都需要使用PCA来降维,因为只有当原始的训练样本不能满足我们所需要的情况下才使用,比如说模型的训练速度,内存大小,希望可视化等。如果不需要考虑那些情况,则也不一定需要使用PCA算法了。 & &Whitening: & &Whitening的目的是去掉数据之间的相关联度,是很多算法进行预处理的步骤。比如说当训练图片数据时,由于图片中相邻像素值有一定的关联,所以很多信息是冗余的。这时候去相关的操作就可以采用白化操作。数据的whitening必须满足两个条件:一是不同特征间相关性最小,接近0;二是所有特征的方差相等(不一定为1)。常见的白化操作有PCA
whitening和ZCA whitening。 & &PCA whitening是指将数据x经过PCA降维为z后,可以看出z中每一维是独立的,满足whitening白化的第一个条件,这是只需要将z中的每一维都除以标准差就得到了每一维的方差为1,也就是说方差相等。公式为: & & & &ZCA whitening是指数据x先经过PCA变换为z,但是并不降维,因为这里是把所有的成分都选进去了。这是也同样满足whtienning的第一个条件,特征间相互独立。然后同样进行方差为1的操作,最后将得到的矩阵左乘一个特征向量矩阵U即可。
& ZCA whitening公式为
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:5625次
排名:千里之外
原创:22篇
转载:29篇
(2)(3)(5)(5)(7)(4)(12)(4)(2)(3)(1)(1)(3)苹果/安卓/wp
积分 469, 距离下一级还需 331 积分
权限: 自定义头衔, 签名中使用图片
道具: 彩虹炫, 雷达卡, 热点灯, 雷鸣之声, 涂鸦板, 金钱卡, 显身卡, 匿名卡, 抢沙发下一级可获得
权限: 隐身
购买后可立即获得
权限: 隐身
道具: 金钱卡, 雷鸣之声, 彩虹炫, 雷达卡, 涂鸦板, 热点灯
开心签到天数: 2 天连续签到: 1 天[LV.1]初来乍到
多指标时间序列数据,由于指标单位不同,需要进行无量纲化处理
比较常用的标准化处理方法似乎不适用于多指标数据?
不知道是什么意思
推荐的是均值化处理方法,求问在SPSS中如何对数据进行均值化处理呢?
支持楼主:、
购买后,论坛将把您花费的资金全部奖励给楼主,以表示您对TA发好贴的支持
载入中......
是对各项目求均值吗?
到底是标准化还是说均值检验
伏彩 发表于
到底是标准化还是说均值检验目前常见的无量纲化处理方法主要有极值化、标准化、均值化以及标准差化方法,而最常使用的是标准化方法。但标准化方法处理后的各指标均值都为0,标准差都为1,它只反映了各指标之间的相互影响,在无量纲化的同时也抹杀了各指标之间变异程度上的差异,因此,标准化方法并不适用于多指标的综合评价中。而经过均值化方法处理的各指标数据构成的协方差矩阵既可以反映原始数据中各指标变异程度上的差异,也包含各指标相互影响程度差异的信息。
想问这里的均值化无量纲处理怎么用软件实现?
caixia_nju 发表于
目前常见的无量纲化处理方法主要有极值化、标准化、均值化以及标准差化方法,而最常使用的是标准化方法。但 ...同求,我也是看到了这篇论文,没搞懂里面所谓的均值处理是什么意思。
飘渺的幸福 发表于
同求,我也是看到了这篇论文,没搞懂里面所谓的均值处理是什么意思。/link?url=1aNMqsA9b78_ytf3yhy2NfTINUxwYKCSiZoBmoeTluVhEBgNrnpC6VF1zE0SwMSTA-ZCvXgXRmGzoUSFCNNmgH-fcMlx40Pq9apr3btVQS_
不知道能不能帮助理解。
论坛好贴推荐
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
如有投资本站或合作意向,请联系(010-);
邮箱:service@pinggu.org
投诉或不良信息处理:(010-)
京ICP证090565号
京公网安备号
论坛法律顾问:王进律师主成份分析,简写为PCA(Principle Component Analysis)。用于提取矩阵中的最主要成分,剔除冗余数据,同时降低数据纬度。现实世界中的数据可能是多种因数叠加的结果,如果这些因数是线性叠加,PCA就可以通过线性转化,还原这种叠加,找到最原始的数据源。
P.S: 下面的内容需要一定线性代数基础,如果只想了解如何在R中使用,可以跳过此节
本质上来讲,PCA主要是找到一个线性转换矩阵P,作用在矩阵X(X的列向量是一条记录,行向量是一个feature)上,使其转换(或称之为投影,投影可以使用矩阵形式表示)到一个新的空间中,得到矩阵Y。目的是使得Y的协方差矩阵具有如下特点:
1) 对角线元素重左上角到右下角降序排列
2) 非对角线元素全部为0
为什么要这样达到这个目的呢?
对角线上的元素是Y的行向量的方差,非对角线上的元素是协方差。方差越大,表示保留的信息越多越重要;协方差越小,表示相关性越低,冗余性越小。这个也是PCA的主要目的。
下面形式的描述PCA的原理
矩阵X,纬度为m*n,m是变量个数,n是数据数量,处理之前需要对X的行向量做均值化,也就是每一个元素减去行均值,为了简化方差和协方差的计算。令Y=PX,使得是对角矩阵,且对角线上的值从大到小排列。
展开S,如下所示:
令A=,很容易证明A是对称矩阵,那么实对称均值的对角化在线性代数中是很成熟的技术,则有A=,其中E是标准正交矩阵,带入上面公式
可以知道D中的每个元素其实就是A的特征值,而E中的向量就是特征向量经过正交化后的得到的标准正交基。让后根据A的特征值的大小降序排列。并对应排列E中向量的顺序。
R中内置两种PCA的实现,prcomp和princomp。前者采用SVD实现,后者采用上面的实对称矩阵对角化方式实现,两种的接口类似,只是前者的参数稍微多一些,下面的列子采用prcomp。
示例1:如何使用PCA
# 传感器坐标
recorders = data.frame("X" = c(0,0,1,1), "Y" = c(0,1,1,0) , row.names=c("A","B","C","D"))
# 光源坐标
locs = data.frame("X" = c(.3, .5), "Y" = c(.2, .8))
# 光源的发光强度时间序列
intensities = data.frame("sine" = sin(0:99*(pi/10))+1.2,
"cosine" = .7*cos(0:99*(pi/15))+.9)
# 传感器与光源的距离
dists = matrix(nrow = dim(locs)[1], ncol = dim(recorders)[1],
dimnames = list(NULL, row.names(recorders)))
for (i in 1:dim(dists)[2]) {
dists[, i] = sqrt((locs$X-recorders$X[i])^2+(locs$Y-recorders$Y[i])^2)
# 传感器记录的光源强度数据
set.seed(500)
recorded.data = data.frame(jitter(as.matrix(intensities)%*%as.matrix(exp(-2*dists)), amount = 0))
# 直观的感受一下传感器数据
plot(recorded.data)
round(cor(recorded.data), 2)
plot.ts(recorded.data)
# PCA原理1: 高相关性可能具有高度重复
# PCA原理2: 最重要的因数是那些具有最大方差的数据
# 手动执行PCA
Xoriginal = t(as.matrix(recorded.data))
# 中心化每个变量数据,以便每一行的均值为0
rm = rowMeans(Xoriginal)
X = Xoriginal - matrix(rep(rm, dim(Xoriginal)[2]), nrow = dim(Xoriginal)[1])
# 计算转换矩阵P
A = X %*% t(X)
E = eigen(A, symmetric = TRUE)
P = t(E$vectors)
newdata = P %*% X
sdev = sqrt(diag((P %*% A %*% t(P))/(dim(X)[2]-1)))
# 使用R内置PCA函数princomp
pr = princomp(recorded.data)
# 使用R内置PCA函数prcomp,采用SVD算法
pr = prcomp(recorded.data)
barplot(pr$sdev/pr$sdev[1])
pr2 = prcomp(recorded.data, tol = .1)
plot.ts(pr2$x)
par(mfrow = c(3,1))
windows(); plot.ts(intensities)
windows(); plot.ts(recorded.data)
windows(); plot.ts(cbind(-1*pr2$x[,1], pr2$x[,2]))
par(mfrow = c(1,1))
# 重构原始数据
od = pr$x %*% t(pr$rotation)
od2 = pr2$x %*% t(pr2$rotation)
windows(); plot.ts(recorded.data)
windows(); plot.ts(od)
此例子够着了两个光源数据,然后采用手动PCA算法和R内置PCA算法演示PCA,最后使用PCA的结果还原数据,演示PCA压缩数据。更具体的说明,可以参考这篇文章
示例2:PCA简化数据
library("DMwR") # install.packages("DMwR")
cv.demo &- function(form, train, test, ...) {
require(tree)
model &- tree(form, train, ...)
preds &- predict(model, test, type = 'class')
class.eval(resp(form, test), preds)
# PCA建模1
pr &- prcomp(iris[-5])
new.data &- cbind(pr$x,iris[5])
eval.res &- crossValidation(learner('cv.demo',pars=list()),
dataset(Species ~ ., new.data),
cvSettings(1,10,1234))
summary(eval.res)
# PCA建模2
plot(pr) # 保留前3主成分
new.data2 &- cbind(pr$x[,1:3], iris[5])
eval.res &- crossValidation(learner('cv.demo',pars=list()),
dataset(Species ~ ., new.data2),
cvSettings(1,10,1234))
summary(eval.res)
# 直接建模
eval.res &- crossValidation(learner('cv.demo',pars=list()),
dataset(Species ~ ., iris),
cvSettings(1,10,1234))
summary(eval.res)
执行上面代码,可以发现在使用iris数据处理PCA时,第一个主成份占比达到92.46%,前三个主成份的权重达到99.48%。后面使用前三个主成份预测的平均错误率为4.7%,比采用原始数据预测的错误率6%低。
1. 变量符合高斯分布(正太分布)
2. 变量之间的影响是线性的,也就是可以通过线性变化将数据还原成主要因数
3. 协方差最大的元素对应的转换向量越重要
4. 转换矩阵是正交的
PCA的整个推导过程都是遵循上面的四条假设,如果违反了这些假设,PCA可能作用不大,甚至有反作用,所以使用PCA时需要谨慎。
PCA最佳实践
压缩数据,主成份一般在90%,95%和99%几档,根据实际需要选取
加速模型建模,缩短时间(PCA处理后,建模,需要保留转换向量P,并用P处理预测数据)
可视化,如果前两个或三个数据可以表示90%以上的成分,那么可以进行可视化
PCA处理数据之前需要去报每个列的均值为0(mean normalization),同时需要确保量纲相同(scaling),否则数值较大的几个变量会占据主要成分。
不要将PCA作为解决过拟合的方法,虽然使用PCA后,确实可以减少过拟合,但是原因可能是feature减少了。采用regulations缓解过拟合。
设计ML系统时,不要一开始就期望使用PCA,提高模型性能。只有当所有非PCA方法无法达到效果时,在使用PCA。PCA处理数据时没有考虑到y,会损失部分有价值信息
[2]&&&&&& (英文)
[5]&&&&&& (英文)
阅读(...) 评论()R语言期末知识点汇总_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
R语言期末知识点汇总
上传于||文档简介
&&R​语​言​知​识​点​汇​总
阅读已结束,如果下载本文需要使用1下载券
想免费下载本文?
你可能喜欢在学习岭回归,Lasso等相关文章时,总是上来就对所得数据进行中心化和规范化,即将Y向量减去其平均值,将X矩阵的列向量分别减去平均值并使其方差归一。我想知道这样进行数据处理的具体原因和它之所以合理的理论依据。此外,一个很具体的问题是,当用中心化规范化的数据得到回归系数beta后,对于一个新的x = (x1,x2,...,xp)数据,要对它进行怎样的处理才能和beta向量进行内积,得到y值呢?
因为无论ridge regression和lasso,它们的cost function求解,不中心化求出来的beta都不一样,普通的线性回归就没有任何问题
先说标准化的问题。因为岭回归就是为了解决多重共线性的问题,必然存在多个变量,而多个变量一般都存在量纲不同的问题,所以对X一般都是要做标准化的。但是y可以标准化也可以不标准化,如果标准化了就是标准化的岭回归估计,不标准化问题也不大。但是一般处理上都会统一进行标准化的。&br&然后至于你说对y进行中心化,我见到的情况还比较少,一般都是标准化。而如果进行中心化的话主要是为了消掉常数项Beta0。一般在回归检验的时候都会发现很多时候常数项Beta0很容易通不过参数的t检验,所以有时候为了消掉常数项可能会使用中心化。但是比较一般的做法还是对X和y都进行标准化。&br&至于最后这个问题,不是很简单吗,就是对X标准化之后代入你拟合出来的回归方程啊,不过这时候因为是多维向量了,实际上已经是矩阵的运算了。
先说标准化的问题。因为岭回归就是为了解决多重共线性的问题,必然存在多个变量,而多个变量一般都存在量纲不同的问题,所以对X一般都是要做标准化的。但是y可以标准化也可以不标准化,如果标准化了就是标准化的岭回归估计,不标准化问题也不大。但是一般处…
已有帐号?
无法登录?
社交帐号登录
quant analyst}

我要回帖

更多关于 matlab求矩阵的平均值 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信