标签: pca

Python中的主成分分析

我想使用主成分分析(PCA)来降低维数.numpy或scipy已经拥有它,还是我必须自己使用numpy.linalg.eigh

我不只是想使用奇异值分解(SVD),因为我的输入数据是相当高维的(~460维),所以我认为SVD比计算协方差矩阵的特征向量慢.

我希望找到一个预制的,已调试的实现,它已经为何时使用哪种方法做出了正确的决定,并且可能做了其他我不了解的优化.

python numpy scipy pca

110
推荐指数
9
解决办法
9万
查看次数

使用sklearn在PCA中恢复explain_variance_ratio_的功能名称

我正在尝试从使用scikit-learn完成的PCA中恢复,这些功能被选为相关的.

IRIS数据集的典型示例.

import pandas as pd
import pylab as pl
from sklearn import datasets
from sklearn.decomposition import PCA

# load dataset
iris = datasets.load_iris()
df = pd.DataFrame(iris.data, columns=iris.feature_names)

# normalize data
df_norm = (df - df.mean()) / df.std()

# PCA
pca = PCA(n_components=2)
pca.fit_transform(df_norm.values)
print pca.explained_variance_ratio_
Run Code Online (Sandbox Code Playgroud)

这回来了

In [42]: pca.explained_variance_ratio_
Out[42]: array([ 0.72770452,  0.23030523])
Run Code Online (Sandbox Code Playgroud)

如何恢复哪两个特征允许数据集中这两个解释的方差? 不同地说,如何在iris.feature_names中获取此功能的索引?

In [47]: print iris.feature_names
['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)']
Run Code Online (Sandbox Code Playgroud)

在此先感谢您的帮助.

python machine-learning pca scikit-learn

61
推荐指数
5
解决办法
4万
查看次数

Python中的主成分分析(PCA)

我有一个(26424 x 144)数组,我想用Python执行PCA.但是,网上没有特别的地方可以解释如何实现这个任务(有些网站只是按照自己的方式做PCA - 我没有找到这样做的通用方法).任何有任何帮助的人都会做得很好.

python pca scikit-learn

60
推荐指数
5
解决办法
12万
查看次数

43
推荐指数
2
解决办法
3万
查看次数

用ggplot2绘制pca biplot

我想知道是否有可能用ggplot2绘制pca biplot结果.假设我想用ggplot2显示以下双标图结果

fit <- princomp(USArrests, cor=TRUE)
summary(fit)
biplot(fit)
Run Code Online (Sandbox Code Playgroud)

任何帮助将受到高度赞赏.谢谢

graphics r ggplot2 pca

30
推荐指数
4
解决办法
5万
查看次数

为数据帧选择多个奇数或偶数列/行

在R中有没有办法选择许多非连续的,即奇数或偶数行/列?

我正在绘制我的主成分分析的负载.我有84行数据如下:x_1 y_1 x_2.....x_42 y_42

目前我正在为x和y加载数据创建数据帧,如下所示:

data.pc = princomp(as.matrix(data))

x.loadings <- data.frame(x=data.pc$loadings[c(1, 3, 5, 7, 9, 11, 13 ,15, 17, 19, 
21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41), 1])

yloadings <- data.frame(y=data.pc$loadings[c(2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 
22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42), 1])
Run Code Online (Sandbox Code Playgroud)

当然有更简单的方法吗?

r pca dataframe

29
推荐指数
4
解决办法
5万
查看次数

从sklearn PCA获得特征值和向量

如何获得PCA应用的特征值和特征向量?

from sklearn.decomposition import PCA
clf=PCA(0.98,whiten=True)      #converse 98% variance
X_train=clf.fit_transform(X_train)
X_test=clf.transform(X_test)
Run Code Online (Sandbox Code Playgroud)

我在文档中找不到它.

我"不能"理解这里的不同结果.

编辑:

def pca_code(data):
    #raw_implementation
    var_per=.98
    data-=np.mean(data, axis=0)
    data/=np.std(data, axis=0)
    cov_mat=np.cov(data, rowvar=False)
    evals, evecs = np.linalg.eigh(cov_mat)
    idx = np.argsort(evals)[::-1]
    evecs = evecs[:,idx]
    evals = evals[idx]
    variance_retained=np.cumsum(evals)/np.sum(evals)
    index=np.argmax(variance_retained>=var_per)
    evecs = evecs[:,:index+1]
    reduced_data=np.dot(evecs.T, data.T).T
    print(evals)
    print("_"*30)
    print(evecs)
    print("_"*30)
    #using scipy package
    clf=PCA(var_per)
    X_train=data.T
    X_train=clf.fit_transform(X_train)
    print(clf.explained_variance_)
    print("_"*30)
    print(clf.components_)
    print("__"*30)
Run Code Online (Sandbox Code Playgroud)
  1. 我希望获得所有特征值和特征向量,而不仅仅是具有收敛条件的简化集.

python scipy pca scikit-learn

28
推荐指数
2
解决办法
3万
查看次数

Python scikit学习pca.explained_variance_ratio_ cutoff

大师,

当选择主成分数(k)时,我们选择k作为最小值,以便保留例如99%的方差.

但是,在Python Scikit学习中,我不是100%肯定pca.explained_variance_ratio_ = 0.99等于"99%的方差被保留"?谁能开导?谢谢.

  • Python Scikit学习PCA手册就在这里

http://scikit-learn.org/stable/modules/generated/sklearn.decomposition.PCA.html#sklearn.decomposition.PCA

python pca scikit-learn

26
推荐指数
2
解决办法
3万
查看次数

R内部处理稀疏矩阵

我一直在比较Python和R的几个PCA实现的性能,并注意到一个有趣的行为:
虽然在Python中计算稀疏矩阵的PCA似乎是不可能的(唯一的方法是scikit-learn的 TruncatedSVD,但它确实如此)不支持平均居中要求等同于PCA的协方差解决方案.他们的论证是,它会破坏矩阵的稀疏性.其他实现如Facebook的PCA算法或scikit中的PCA/randomPCA方法学习不支持稀疏矩阵出于类似的原因.

虽然所有这些对我来说都是有意义的,但是几个R包,如irlba,rsvd等,能够处理稀疏矩阵(例如生成rsparsematrix),甚至允许特定的center=True参数.

我的问题是,R如何在内部处理它,因为它似乎比类似的Python实现更有效.R是否仍然通过绝对缩放来保持稀疏性(这理论上会伪造结果,但至少保持稀疏性)?或者有没有任何方法可以明确地为零值存储均值,并且只存储一次(而不是分别存储每个值)?

为了得到推迟:R内部如何存储具有均值中心的矩阵而不会爆炸RAM使用.希望足够简洁....

python r sparse-matrix pca scikit-learn

26
推荐指数
1
解决办法
631
查看次数

如何使用scikit-learn PCA减少功能并知道哪些功能被丢弃

我试图在维度为mxn的矩阵上运行PCA,其中m是要素的数量,n是样本的数量.

假设我想保留nf具有最大方差的要素.随着scikit-learn我能够做到这样:

from sklearn.decomposition import PCA

nf = 100
pca = PCA(n_components=nf)
# X is the matrix transposed (n samples on the rows, m features on the columns)
pca.fit(X)

X_new = pca.transform(X)
Run Code Online (Sandbox Code Playgroud)

现在,我得到一个X_new形状为nx nf 的新矩阵.是否可以知道哪些功能已被丢弃或保留哪些功能?

谢谢

python machine-learning pca feature-selection scikit-learn

25
推荐指数
1
解决办法
3万
查看次数