使用基于列而非行的 PCA 进行降维
Dimension reduction using PCA based on columns not rows
我正在尝试减少 Covid 病例的时间序列数据的维度。我有一个数据框形式的 Covid 病例,每个日期都有一行,每个地区都有一列。我现在想减少维度以消除数据的时间扭曲。
我的数据框如下所示:
1001
1002
01.01.2020
35
57
02.01.2020
29
46
03.01.2020
46
61
数据帧上的代码 I 运行:
# df = above mentioned dataframe
pca = PCA (n_components=2)
transformed_df = pca.fit_transform(df)
我想收到的(我认为)是按列减少维数,从而生成一个数组,每列都有一个数组,其中包含维数减少的结果。因此,len(transformed_df) 应该等于我拥有的列数(在上面的示例中为 2.
我收到的是一个数组,我认为数据帧的每一行都有一个数组(因为 len(transformed_df) 等于我的行数,在上面的例子中它是 3)。
所以我的问题是,如何按列而不是按行执行降维。
(补充:我的数据是归一化的,上面的数字是我随机选择的)
好吧,事实证明只需使用 df.transpose 就足够了:
# df = above mentioned dataframe
pca = PCA (n_components=2)
transformed_df = pca.fit_transform(df.transpose())
我正在尝试减少 Covid 病例的时间序列数据的维度。我有一个数据框形式的 Covid 病例,每个日期都有一行,每个地区都有一列。我现在想减少维度以消除数据的时间扭曲。 我的数据框如下所示:
1001 | 1002 | |
---|---|---|
01.01.2020 | 35 | 57 |
02.01.2020 | 29 | 46 |
03.01.2020 | 46 | 61 |
数据帧上的代码 I 运行:
# df = above mentioned dataframe
pca = PCA (n_components=2)
transformed_df = pca.fit_transform(df)
我想收到的(我认为)是按列减少维数,从而生成一个数组,每列都有一个数组,其中包含维数减少的结果。因此,len(transformed_df) 应该等于我拥有的列数(在上面的示例中为 2. 我收到的是一个数组,我认为数据帧的每一行都有一个数组(因为 len(transformed_df) 等于我的行数,在上面的例子中它是 3)。 所以我的问题是,如何按列而不是按行执行降维。
(补充:我的数据是归一化的,上面的数字是我随机选择的)
好吧,事实证明只需使用 df.transpose 就足够了:
# df = above mentioned dataframe
pca = PCA (n_components=2)
transformed_df = pca.fit_transform(df.transpose())