【发布时间】:2020-04-06 14:16:57
【问题描述】:
对于我的项目,我使用三维 MRI 数据,其中第四维代表不同的主题(为此我使用包 nilearn)。我正在使用sklearn.decomposition.PCA 从我的数据中提取给定数量的主成分。现在我想在大脑图像上分别绘制组件,也就是说,我想用不同颜色显示我提取的组件(在本例中为 2)的大脑图像。
这是一个使用 OASIS 数据集的示例代码,可以通过nilearn API 下载:
- 使用
nilearn.input_data.NiftiMasker进行屏蔽,它将我的 4 维数据转换为 2 维数组 (n_subjects x n_voxels)。 - 使用
StandardScaler标准化数据矩阵 - 使用
sklearn.decomposition.PCA运行 PCA:
## set workspace
import numpy as np
from nilearn.datasets import fetch_oasis_vbm
from nilearn.input_data import NiftiMasker
from nilearn.image import index_img
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
from sklearn.pipeline import Pipeline
from nilearn import plotting
## Load Data #################################################################
# take only first 30 subjects as example
oasis_dataset = fetch_oasis_vbm(n_subjects=30)
imgs = np.array(oasis_dataset['gray_matter_maps'])
## PIPELINE ###################################################################
# create a random number generator
rng = np.random.RandomState(42)
# Convert Images to 2D Data Array
niftimasker = NiftiMasker(mask_strategy='template')
# z-standardize images
scaler = StandardScaler()
# Extract 2 Components
pca = PCA(n_components=2,
svd_solver='full',
random_state=rng)
# create pipeline
pipe = Pipeline([('niftimasker',niftimasker),
('scaler',scaler),
('pca',pca)])
# call fit_transform on pipeline
X = pipe.fit_transform(imgs)
据我所知,我在运行 PCA 后获得的是 PCA 负载吗?不幸的是,我不明白如何从这个得到两个图像,每个图像都包含一个 PCA 组件。
【问题讨论】:
标签: scikit-learn pca nilearn