Questions tagged «pca»

主成分分析(PCA)是线性降维技术。它将多变量数据集简化为较小的构造变量集,以保留尽可能多的信息(尽可能多的方差)。这些变量称为主成分,是输入变量的线性组合。

1
为什么丹尼尔·威尔克斯(Daniel Wilks,2011)说主成分回归将“有偏见”?
在在大气科学的统计方法,丹尼尔·威尔克斯指出,多元线性回归可以,如果有该预测结果中很强的互关联(第3版,559-560页)导致的问题: 多重线性回归中可能出现的一种病理现象是,一组具有强互相关性的预测变量会导致计算不稳定的回归关系。 (...) 然后,他介绍了主成分回归: 解决此问题的方法是先将预测变量转换为其主成分,其相关系数为零。 到目前为止,一切都很好。但是接下来,他发表了一些他不解释的声明(或者至少没有足够详细的信息让我理解): 如果所有主成分都保留在主成分回归中,则与整个预测变量集的常规最小二乘拟合没有任何关系。 (..)和: 可以根据原始预测变量重新表达主成分回归,但是即使只使用了一个或几个主成分预测变量,结果通常也将包含所有原始预测变量。尽管通常方差要小得多,但这种重构的回归将是有偏差的,从而导致总体MSE较小。 我不明白这两点。 当然,如果保留了所有主要成分,我们将使用与在原始空间中使用预测变量时相同的信息。但是,通过在主成分空间中进行操作,可以消除互相关的问题。我们可能仍然过拟合,但这是唯一的问题吗?为什么什么都得不到? 其次,即使我们确实截断了主要成分(也许是为了降低噪声和/或防止过度拟合),为什么以及如何导致偏向的重构回归?偏向哪种方式? 本书出处:Daniel S. Wilks,《大气科学中的统计方法》,第三版,2011年。《国际地球物理学丛书》第100卷,学术出版社。
13 regression  pca  bias 


1
假设PCA始终旋转坐标轴,那么“旋转”和“未旋转”的主要成分是什么?
据我了解,主要成分是通过旋转坐标轴使其与最大方差方向对齐来获得的。 不过,我一直在阅读有关“未旋转的主成分”的信息,而我的统计软件(SAS)为我提供了varimax旋转的主成分以及未旋转的主成分。在这里,我很困惑:当我们计算主成分时,轴已经旋转了。那为什么还需要轮换呢?“未旋转的主要成分”是什么意思?


1
如何解释PCA负载?
在阅读有关PCA时,我遇到了以下解释: 假设我们有一个数据集,其中每个数据点代表一个学生在数学测验,物理测验,阅读理解测验和词汇测验中的分数。 我们找到前两个主要成分,它们捕获了数据中90%的可变性,并解释了它们的负载。我们得出的结论是,第一个主要成分代表总体学习能力,第二个代表定量能力和语言能力之间的对比。 该文指出,PC1和PC2负载量的PC1和为PC2,并提供以下解释:(0.5 ,0.5 ,- 0.5 ,- 0.5 )(0.5,0.5,0.5,0.5)(0.5,0.5,0.5,0.5)(0.5, 0.5, 0.5, 0.5)(0.5,0.5,−0.5,−0.5)(0.5,0.5,−0.5,−0.5)(0.5, 0.5, -0.5, -0.5) 第一个分量与平均分数成正比,第二个分量测量第一对分数和第二对分数之间的差。 我无法理解该解释的含义。
13 pca 

3
使用Lindsay Smith的教程逐步在R中实现PCA
我正在通过Lindsay I Smith撰写的出色PCA教程从事R的工作,并且陷入了最后阶段。下面的R脚本将带您进入阶段(第19页),该阶段是从(在此例中为单数)主成分重构原始数据的过程,这将产生沿PCA1轴的直线图(假设数据只有2个维度,其中第二个被有意删除)。 d = data.frame(x=c(2.5,0.5,2.2,1.9,3.1,2.3,2.0,1.0,1.5,1.1), y=c(2.4,0.7,2.9,2.2,3.0,2.7,1.6,1.1,1.6,0.9)) # mean-adjusted values d$x_adj = d$x - mean(d$x) d$y_adj = d$y - mean(d$y) # calculate covariance matrix and eigenvectors/values (cm = cov(d[,1:2])) #### outputs ############# # x y # x 0.6165556 0.6154444 # y 0.6154444 0.7165556 ########################## (e = eigen(cm)) ##### outputs ############## …
13 r  pca 

2
选择将组分开的PCA组件
我经常使用PCA诊断我的多元数据(具有数十万个变量和数十个或数百个样本的组学数据)。数据通常来自具有定义某些组的几个类别自变量的实验,在找到能够显示感兴趣的组之间分离的组件之前,我经常必须经过几个组件。我想出了一种相当原始的方式来找到这种可区分的组件,我想知道 在何种程度上是合理/合理的,并且 是否有更好的方法可以达到相同目的。 请注意,这是探索性的。在说服别人之前,我想说服自己。如果我发现有一些组件可以清楚地区分感兴趣的组(例如,控制组与治疗组),即使它们是响应方差的一小部分,则我更相信它,而不是受监督机器的结果学习。 这是我的方法。我将使用R中pca3d的“ metabo”示例数据集。 这个想法是评估独立变量可以解释每个分量有多少差异。为此,我为每个组件计算一个简单模型,并使用作为度量标准,以将组件从“最有趣”到“最不有趣”进行排序。R2R2R^2 require( pca3d ) # data on metabolic profiles of TB patients and controls data( metabo ) # first column is the independent variable pca <- prcomp( metabo[,-1], scale.= T ) # create a model for each component lm.m <- lm( pca$x ~ metabo[,1] …

3
如何计算R中的varimax旋转主成分?
我对25个变量运行PCA,并使用选择了前7台PC prcomp。 prc <- prcomp(pollutions, center=T, scale=T, retx=T) 然后,我对这些组件进行了varimax旋转。 varimax7 <- varimax(prc$rotation[,1:7]) 现在,我希望使用varimax旋转PCA旋转的数据(因为它不是varimax对象的一部分-仅包含加载矩阵和旋转矩阵)。我读到要做到这一点,您需要将旋转矩阵的转置乘以数据的转置,所以我会这样做: newData <- t(varimax7$rotmat) %*% t(prc$x[,1:7]) 但这没有意义,因为上面转置的矩阵的尺寸分别是和7 × 16933,所以我将只剩下7行矩阵,而不是16933行...有人知道吗?在这里做错了还是我的最后一行应该是什么?之后是否只需要移调回位?7 × 77×77\times 77 × 169337×169337 \times 16933777169331693316933
13 r  pca  factor-rotation 

2
对于随机矩阵,SVD不应完全不解释吗?我究竟做错了什么?
如果我构建一个完全由随机数据组成的二维矩阵,我希望PCA和SVD组件本质上什么也不能解释。 相反,第一个SVD列似乎可以解释75%的数据。怎么可能呢?我究竟做错了什么? 这是情节: 这是R代码: set.seed(1) rm(list=ls()) m <- matrix(runif(10000,min=0,max=25), nrow=100,ncol=100) svd1 <- svd(m, LINPACK=T) par(mfrow=c(1,4)) image(t(m)[,nrow(m):1]) plot(svd1$d,cex.lab=2, xlab="SVD Column",ylab="Singluar Value",pch=19) percentVarianceExplained = svd1$d^2/sum(svd1$d^2) * 100 plot(percentVarianceExplained,ylim=c(0,100),cex.lab=2, xlab="SVD Column",ylab="Percent of variance explained",pch=19) cumulativeVarianceExplained = cumsum(svd1$d^2/sum(svd1$d^2)) * 100 plot(cumulativeVarianceExplained,ylim=c(0,100),cex.lab=2, xlab="SVD column",ylab="Cumulative percent of variance explained",pch=19) 更新资料 谢谢@亚伦。如您所述,解决方法是在矩阵上增加比例,以便数字以0为中心(即平均值为0)。 m <- scale(m, scale=FALSE) 这是校正后的图像,显​​示了对于具有随机数据的矩阵,第一SVD列接近预期的0。
13 r  pca  svd 

3
PCA的成分真的代表方差百分比吗?它们的总和是否可以超过100%?
奥赖利(O'Reilly)的“黑客机器学习”说,每个主成分代表方差的百分比。我引用了以下页面的相关部分(第8章,第207页)。在与另一位专家交谈时,他们同意这是百分比。 但是,这24个组件的总和为133.2095%。这个怎么可能? 在说服自己可以使用PCA之后,我们如何在R中做到这一点?同样,这是R发挥作用的地方:整个PCA可以在一行代码中完成。我们使用princomp函数运行PCA: pca <- princomp(date.stock.matrix[,2:ncol(date.stock.matrix)]) 如果仅在R中键入pca,我们将看到主要组成部分的快速摘要: Call: princomp(x = date.stock.matrix[, 2:ncol(date.stock.matrix)]) Standard deviations: Comp.1 Comp.2 Comp.3 Comp.4 Comp.5 Comp.6 Comp.7 29.1001249 20.4403404 12.6726924 11.4636450 8.4963820 8.1969345 5.5438308 Comp.8 Comp.9 Comp.10 Comp.11 Comp.12 Comp.13 Comp.14 5.1300931 4.7786752 4.2575099 3.3050931 2.6197715 2.4986181 2.1746125 Comp.15 Comp.16 Comp.17 Comp.18 Comp.19 Comp.20 Comp.21 1.9469475 …
13 r  pca 

2
我可以对重复的数据缩减措施进行PCA吗?
我在2种情况下分别对87只动物进行了3次试验(一些缺失数据;无缺失数据= 64只动物)。在一个情况下,我有很多具体措施(时间进入,次返回住所号等),所以我想开发描述在这方面的行为2至3复合行为评分(打电话给他们C1,C2,C3)。我希望C1在所有3个试验和87个动物中都具有相同的含义,以便我可以进行回归分析以检验年龄,性别,血统和单个动物对行为的影响。然后,我想研究C1在特定年龄段内其他情况下的行为得分与它们之间的关系。(在1岁时,上下文1中的活动是否强烈预测了上下文2中的活动?) 如果不采取重复措施,则PCA会很好用–对上下文的多个度量进行PCA,然后使用PC1,PC2等检查一个上下文中的PC1与PC1(或2或2)之间的关系(Spearman相关性)。 3)在其他情况下。问题是重复的措施,属于伪复制。我曾经有一个审阅者断言“不行”,但是我找不到任何明确的参考资料来说明在进行数据缩减时是否存在问题。 我的推理是这样的:重复的措施不是问题,因为我在PCA中所做的只是相对于原始措施的描述。如果我通过命令宣布我正在花时间进入竞技场作为上下文1中的“大胆”度量,那么我将获得上下文1大胆性度量,该度量在所有年龄段的所有个人中都是可比的,没有人会大吃一惊。如果我按法令声明我将使用的进入时间的进入远端时间,则同样。因此,如果我纯粹是出于还原目的使用PCA,为什么不能将其设为PC1(输入完成+ 0.5 ⋅ 0.28 ⋅ + 0.63 ⋅ + 0.02 ⋅0.5 ⋅0.5⋅0.5\cdot+ 0.5 ⋅ + 0.5⋅+\ 0.5\cdot0.28 ⋅0.28⋅0.28\cdot+ 0.63 ⋅ + 0.63⋅+\ 0.63\cdot+ 0.02 ⋅ + 0.02⋅+\ 0.02\cdot 总时间...),这至少是由我的多项指标所决定的,而不是我猜测进入时间通常是一种有益的,具有代表性的特征? (请注意,我对度量的基本结构不感兴趣……我的问题是关于我们如何解释特定于上下文的行为。哈里在上下文2中活跃吗?如果他随着年龄的增长而改变了我们在上下文1中所解释的活动,他是否还会在上下文2中改变其活动?) 我看过PARAFAC,看过SEM,但我不认为这两种方法对我的样本量更好或更合适。有人可以称体重吗?谢谢。

5
不同长度时间序列的SVD维数缩减
我正在使用奇异值分解作为降维技术。 给定N维向量D,其思想是表示不相关维的变换空间中的特征,这将以重要性降序将大多数数据信息压缩到该空间的特征向量中。 现在,我正在尝试将此过程应用于时间序列数据。问题在于并非所有序列都具有相同的长度,因此我无法真正构建num-by-dim矩阵并应用SVD。我的第一个想法是通过构建num-by-maxDim矩阵并用零填充空白空间来用零填充矩阵,但是我不确定这是否正确。 我的问题是,如何将SVD降维方法应用于不同长度的时间序列?或者,是否还有其他通常用于时间序列的本征空间表示方法? 下面是一段MATLAB代码来说明这一想法: X = randn(100,4); % data matrix of size N-by-dim X0 = bsxfun(@minus, X, mean(X)); % standarize [U S V] = svd(X0,0); % SVD variances = diag(S).^2 / (size(X,1)-1); % variances along eigenvectors KEEP = 2; % number of dimensions to keep newX = U(:,1:KEEP)*S(1:KEEP,1:KEEP); % …

1
GBM软件包与使用GBM的插入符
我一直在使用进行模型调整caret,但随后使用该gbm软件包重新运行模型。据我了解,caret程序包使用gbm的输出应相同。然而,data(iris)使用RMSE和R ^ 2作为评估指标,使用进行的快速测试显示模型中的差异约为5%。我想使用来找到最佳模型性能,caret但要重新运行gbm以利用部分依赖图。下面的代码具有可重复性。 我的问题是: 1)为什么即使这两个软件包应该相同,我仍会看到这两个软件包之间的差异(我知道它们是随机的,但5%的差异还是很大的,尤其是当我没有使用iris建模时使用的很好的数据集时) 。 2)同时使用这两个软件包有什么优点或缺点? 3)不相关:使用iris数据集时,最佳interaction.depth值为5,但高于我所阅读的最大值,使用最大值floor(sqrt(ncol(iris)))为2。这是严格的经验法则还是非常灵活? library(caret) library(gbm) library(hydroGOF) library(Metrics) data(iris) # Using caret caretGrid <- expand.grid(interaction.depth=c(1, 3, 5), n.trees = (0:50)*50, shrinkage=c(0.01, 0.001), n.minobsinnode=10) metric <- "RMSE" trainControl <- trainControl(method="cv", number=10) set.seed(99) gbm.caret <- train(Sepal.Length ~ ., data=iris, distribution="gaussian", method="gbm", trControl=trainControl, verbose=FALSE, tuneGrid=caretGrid, metric=metric, bag.fraction=0.75) print(gbm.caret) # …

1
PCA和组件分数基于连续变量和二进制变量的混合
我想在由混合类型变量(连续和二进制)组成的数据集上应用PCA。为了说明该过程,我在下面的R中粘贴了一个最小的可复制示例。 # Generate synthetic dataset set.seed(12345) n <- 100 x1 <- rnorm(n) x2 <- runif(n, -2, 2) x3 <- x1 + x2 + rnorm(n) x4 <- rbinom(n, 1, 0.5) x5 <- rbinom(n, 1, 0.6) data <- data.frame(x1, x2, x3, x4, x5) # Correlation matrix with appropriate coefficients # Pearson product-moment: …
13 r  pca 

3
PCA优化是否凸出?
主成分分析(PCA)的目标函数是使L2范数中的重构误差最小化(请参阅此处的 2.12节。另一种观点试图使投影的方差最大化。我们在此处也有一篇很不错的文章:PCA的目标函数是什么?)。 我的问题是PCA优化凸出吗?(我在这里找到了一些讨论,但希望有人可以在这里提供有关CV的很好的证明)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.