相关疑难解决方法(0)

在sklearn.decomposition.PCA中,为什么components_为负?

我正在尝试跟随Abdi&Williams - Principal Component Analysis(2010)并通过SVD构建主要组件,使用numpy.linalg.svd.

当我components_从带有sklearn的拟合PCA 显示属性时,它们的大小与我手动计算的大小完全相同,但有些(不是全部)符号相反.是什么导致了这个?

更新:我的(部分)答案包含一些其他信息.

以下示例数据为例:

from pandas_datareader.data import DataReader as dr
import numpy as np
from sklearn.decomposition import PCA
from sklearn.preprocessing import scale

# sample data - shape (20, 3), each column standardized to N~(0,1)
rates = scale(dr(['DGS5', 'DGS10', 'DGS30'], 'fred', 
           start='2017-01-01', end='2017-02-01').pct_change().dropna())

# with sklearn PCA:
pca = PCA().fit(rates)
print(pca.components_)
[[-0.58365629 -0.58614003 -0.56194768]
 [-0.43328092 -0.36048659  0.82602486]
 [-0.68674084  0.72559581 -0.04356302]]

# compare to the manual method via SVD: …
Run Code Online (Sandbox Code Playgroud)

python numpy pca python-3.x scikit-learn

13
推荐指数
1
解决办法
5374
查看次数

执行PCA之前和之后的数据维度

我正在尝试使用Python和scikit-learn 进行kaggle.com的数字识别器竞赛.

从训练数据中删除标签后,我将CSV中的每一行添加到如下列表中:

for row in csv:
    train_data.append(np.array(np.int64(row)))
Run Code Online (Sandbox Code Playgroud)

我对测试数据做了同样的事情.

我使用PCA预处理这些数据以执行降维(和特征提取?):

def preprocess(train_data, test_data, pca_components=100):
    # convert to matrix
    train_data = np.mat(train_data)

    # reduce both train and test data
    pca = decomposition.PCA(n_components=pca_components).fit(train_data)
    X_train = pca.transform(train_data)
    X_test = pca.transform(test_data)

    return (X_train, X_test)
Run Code Online (Sandbox Code Playgroud)

然后我创建一个kNN分类器并将其与X_train数据拟合并使用数据进行预测X_test.

使用这种方法,我可以获得97%的准确率.

我的问题是关于PCA执行前后数据的维度

什么尺寸train_dataX_train

组件数量如何影响输出的维数?它们是一样的吗?

python numpy pca scikit-learn

6
推荐指数
1
解决办法
1815
查看次数

标签 统计

numpy ×2

pca ×2

python ×2

scikit-learn ×2

python-3.x ×1