pandas - Sklearn PCA:PC 的正确维度
问题描述
我有一个数据框df
,其中包含一个名为“事件”的列,其中有一个 24x24x40 numpy 数组。我想要:
- 提取这个 numpy 数组;
- 将其展平为 1x23040 向量;
- 将此条目作为列添加到新的 numpy 数组或数据框中;
- 对结果矩阵执行 PCA。
但是,PCA 生成的特征向量具有“条目数”的维度,而不是“数据中的维度数”。
为了说明我的问题,我演示了一个运行良好的最小示例:
例 1
from sklearn import datasets, decomposition
digits = datasets.load_digits()
X = digits.data
pca = decomposition.PCA()
X_pca = pca.fit_transform(X)
print (X.shape)
Result: (1797, 64)
print (X_pca.shape)
Result: (1797, 64)
每种情况下都有 1797 个条目,特征向量的维数为 64。
现在到我的例子:
例 2
from sklearn import datasets, decomposition
import pandas as pd
hdf=pd.HDFStore('./afile.h5')
df=hdf.select('batch0')
print(df['event'][0].shape)
Result: (1, 24, 24, 40)
print(df['event'][0].shape.flatten())
Result: (23040,)
for index, row in df.iterrows():
entry = df['event'][index].flatten()
_list.append(entry)
X = np.asarray(_list)
pca = decomposition.PCA()
X_pca=pca.fit_transform(X)
print (X.shape)
Result: (201, 23040)
print (X_pca.shape)
Result:(201, 201)
这具有数据数量的维度,201 个条目!
我不熟悉数据框,因此可能是我错误地遍历了数据框。但是,我检查了X
示例 2 中生成的 numpy 数组的行是否可以按预期重新整形和绘制。
任何想法将不胜感激!
亲切的问候!
解决方案
Sklearn 的文档指出,不指定n_components
参数时保留的组件数为min(n_samples, n_features)
.
现在,转到您的示例:
在您的第一个示例中,数据样本1797
的数量小于维度的数量64
,因此它保持整个维度(因为您没有指定组件的数量)。但是,在您的第二个示例中,数据样本的数量远远少于特征数量,因此,sklearns 的 PCA 将维度数量减少到n_samples
.
推荐阅读
- google-chrome - Firefox 和 Chrome 的可访问性树的区别
- bash - 有没有办法从反汇编程序输出中只过滤掉汇编代码?
- python - 新的、干净的 venv 项目(Python 3 /IntelliJ IDEA)中的包要求 - 为什么有?
- reactjs - 如何在拖动标签中使用 onChange 属性?
- c# - c# webapi中如何处理和excel从前端(网站)发送的文件?
- asp.net-core - .net核心中间件自动设置内容类型为application/json;字符集=utf-8
- php - 每个页面上的登录验证询问数据库
- design-patterns - 如何证明程序有层?
- ruby-on-rails - 如何使用 Ruby on Rails 发送电子邮件地址的值?
- javascript - Cloud Function 中的 Dialogflow 会话处理